{"openapi":"3.1.0","info":{"title":"PowerMossa CAN map API","version":"0.7.72","description":"Staff: Authorization: Bearer <session>. Devices: X-Device-Key: <device key>. Docs: /api-reference/ and the Docs page 'CAN map API'."},"paths":{"/api/v0/vehicles/{vehicle_id}/can-map":{"get":{"tags":["can-map"],"summary":"Vehicle Can Map","description":"Base pack profile plus this vehicle's overrides, for the Edit mappings panel. All unverified.","operationId":"vehicle_can_map_api_v0_vehicles__vehicle_id__can_map_get","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"profile","in":"query","required":false,"schema":{"type":"string","default":"","title":"Profile"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vehicle Can Map Api V0 Vehicles  Vehicle Id  Can Map Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/vehicles/{vehicle_id}/can-signals":{"get":{"tags":["can-map"],"summary":"Vehicle Can Signals","description":"Every signal in the vehicle's effective map with its status (unverified/verified/rejected),\nthe compiled hash devices see, the status history and this vehicle's pack proposals.","operationId":"vehicle_can_signals_api_v0_vehicles__vehicle_id__can_signals_get","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vehicle Can Signals Api V0 Vehicles  Vehicle Id  Can Signals Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/vehicles/{vehicle_id}/can-signals/status":{"post":{"tags":["can-map"],"summary":"Vehicle Can Signal Status","description":"Staff set one signal verified/rejected/unverified. No code change: the compiled map and its\nhash follow, so dashes refetch (have=<hash>) and the OBD's want_ids are re-sent.","operationId":"vehicle_can_signal_status_api_v0_vehicles__vehicle_id__can_signals_status_post","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CanStatusIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vehicle Can Signal Status Api V0 Vehicles  Vehicle Id  Can Signals Status Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/vehicles/{vehicle_id}/can-verify":{"get":{"tags":["can-map"],"summary":"Vehicle Can Verify","description":"Map health (0.7.72): per unverified signal what the auto-verifier saw (auto_verified / flagged / insufficient),\nthe mode (shadow unless writes are on), the reference state and the evidence log. Read only.","operationId":"vehicle_can_verify_api_v0_vehicles__vehicle_id__can_verify_get","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vehicle Can Verify Api V0 Vehicles  Vehicle Id  Can Verify Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/vehicles/{vehicle_id}/can-verify/{can_id}/{label}":{"get":{"tags":["can-map"],"summary":"Vehicle Can Verify Signal","description":"One signal's verdict and its evidence entries.","operationId":"vehicle_can_verify_signal_api_v0_vehicles__vehicle_id__can_verify__can_id___label__get","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"can_id","in":"path","required":true,"schema":{"type":"integer","title":"Can Id"}},{"name":"label","in":"path","required":true,"schema":{"type":"string","title":"Label"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vehicle Can Verify Signal Api V0 Vehicles  Vehicle Id  Can Verify  Can Id   Label  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/vehicles/{vehicle_id}/can-verify/run":{"post":{"tags":["can-map"],"summary":"Vehicle Can Verify Run","description":"Evaluate now with what has been observed. In shadow mode this only updates the evidence.","operationId":"vehicle_can_verify_run_api_v0_vehicles__vehicle_id__can_verify_run_post","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vehicle Can Verify Run Api V0 Vehicles  Vehicle Id  Can Verify Run Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/vehicles/{vehicle_id}/can-verify/config":{"put":{"tags":["can-map"],"summary":"Vehicle Can Verify Config","description":"Manager: per-vehicle switches. write stays inert unless the server also runs with PM_CANVERIFY_WRITE=1.","operationId":"vehicle_can_verify_config_api_v0_vehicles__vehicle_id__can_verify_config_put","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CanVerifyConfigIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vehicle Can Verify Config Api V0 Vehicles  Vehicle Id  Can Verify Config Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/vehicles/{vehicle_id}/can-verify/lock":{"post":{"tags":["can-map"],"summary":"Vehicle Can Verify Lock","description":"Keep the auto-verifier away from one signal.","operationId":"vehicle_can_verify_lock_api_v0_vehicles__vehicle_id__can_verify_lock_post","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CanVerifyLockIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vehicle Can Verify Lock Api V0 Vehicles  Vehicle Id  Can Verify Lock Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/vehicles/{vehicle_id}/can-verify/unlock":{"post":{"tags":["can-map"],"summary":"Vehicle Can Verify Unlock","operationId":"vehicle_can_verify_unlock_api_v0_vehicles__vehicle_id__can_verify_unlock_post","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CanVerifyLockIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vehicle Can Verify Unlock Api V0 Vehicles  Vehicle Id  Can Verify Unlock Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/vehicles/{vehicle_id}/can-signals/promote":{"post":{"tags":["can-map"],"summary":"Vehicle Can Signal Promote","description":"'Promote to base pack': records a pending proposal for the next pack version. Only a manager's\napprove (POST /api/v0/can-pack/proposals/{id}/approve) cuts a new version; existing tags never change.","operationId":"vehicle_can_signal_promote_api_v0_vehicles__vehicle_id__can_signals_promote_post","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CanPromoteIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vehicle Can Signal Promote Api V0 Vehicles  Vehicle Id  Can Signals Promote Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/can-pack/proposals":{"get":{"tags":["can-pack"],"summary":"Can Pack Proposals","description":"Proposals from 'Promote to base pack' (state=pending|approved|rejected, or all). Approve/reject below.","operationId":"can_pack_proposals_api_v0_can_pack_proposals_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string","maxLength":12,"default":"","title":"State"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Can Pack Proposals Api V0 Can Pack Proposals Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/vehicles/{vehicle_id}/can-overrides":{"get":{"tags":["can-map"],"summary":"Vehicle Can Overrides","description":"This vehicle's per-signal overrides on top of the base pack profile.","operationId":"vehicle_can_overrides_api_v0_vehicles__vehicle_id__can_overrides_get","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vehicle Can Overrides Api V0 Vehicles  Vehicle Id  Can Overrides Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["can-map"],"summary":"Vehicle Can Overrides Put","description":"Replace the whole override list. Answers the new list and the new compiled hash.","operationId":"vehicle_can_overrides_put_api_v0_vehicles__vehicle_id__can_overrides_put","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CanOverridesIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vehicle Can Overrides Put Api V0 Vehicles  Vehicle Id  Can Overrides Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["can-map"],"summary":"Vehicle Can Overrides Upsert","description":"Add one override, or replace the one with the same can_id + label.","operationId":"vehicle_can_overrides_upsert_api_v0_vehicles__vehicle_id__can_overrides_post","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CanOverrideIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vehicle Can Overrides Upsert Api V0 Vehicles  Vehicle Id  Can Overrides Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["can-map"],"summary":"Vehicle Can Overrides Delete","description":"Remove one override (the pack signal comes back). 404 when there is no such override.","operationId":"vehicle_can_overrides_delete_api_v0_vehicles__vehicle_id__can_overrides_delete","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"can_id","in":"query","required":true,"schema":{"type":"integer","maximum":536870911,"minimum":0,"title":"Can Id"}},{"name":"label","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":60,"title":"Label"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vehicle Can Overrides Delete Api V0 Vehicles  Vehicle Id  Can Overrides Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/vehicles/{vehicle_id}/can-signals/history":{"get":{"tags":["can-map"],"summary":"Vehicle Can Signal History","description":"Status changes on this vehicle, newest first (who, when, old -> new, channel, note).","operationId":"vehicle_can_signal_history_api_v0_vehicles__vehicle_id__can_signals_history_get","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"can_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":536870911,"minimum":0},{"type":"null"}],"title":"Can Id"}},{"name":"label","in":"query","required":false,"schema":{"type":"string","maxLength":60,"default":"","title":"Label"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":200,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vehicle Can Signal History Api V0 Vehicles  Vehicle Id  Can Signals History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/can-pack":{"get":{"tags":["can-pack"],"summary":"Can Pack Info","description":"The active CAN pack: version, commit, sha256 hash of profiles/*.dbc. Staff or device key.","operationId":"can_pack_info_api_v0_can_pack_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-device-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Can Pack Info Api V0 Can Pack Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/can-pack/profiles":{"get":{"tags":["can-pack"],"summary":"Can Pack Profiles","description":"Every pack profile and alias (all unverified). Staff or device key.","operationId":"can_pack_profiles_api_v0_can_pack_profiles_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-device-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Can Pack Profiles Api V0 Can Pack Profiles Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/can-pack/profiles/{profile}":{"get":{"tags":["can-pack"],"summary":"Can Pack Profile","description":"One profile's messages and signals (hex id -> {name, dlc, signals}). Staff or device key.","operationId":"can_pack_profile_api_v0_can_pack_profiles__profile__get","parameters":[{"name":"profile","in":"path","required":true,"schema":{"type":"string","title":"Profile"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-device-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Can Pack Profile Api V0 Can Pack Profiles  Profile  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/can-pack/versions":{"get":{"tags":["can-pack"],"summary":"Can Pack Versions","description":"Pack versions this server knows: the vendored base and every release approved here, newest first.","operationId":"can_pack_versions_api_v0_can_pack_versions_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-device-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Can Pack Versions Api V0 Can Pack Versions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/can-pack/versions/{version}":{"get":{"tags":["can-pack"],"summary":"Can Pack Version","description":"One approved release: changelog, hash, changed DBC files (before and after), publish state.","operationId":"can_pack_version_api_v0_can_pack_versions__version__get","parameters":[{"name":"version","in":"path","required":true,"schema":{"type":"string","title":"Version"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-device-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Can Pack Version Api V0 Can Pack Versions  Version  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/can-pack/versions/{version}/publish":{"post":{"tags":["can-pack"],"summary":"Can Pack Version Publish","description":"Retry the git commit + tag for a release saved here (manager). Refuses if the tag exists.","operationId":"can_pack_version_publish_api_v0_can_pack_versions__version__publish_post","parameters":[{"name":"version","in":"path","required":true,"schema":{"type":"string","title":"Version"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Can Pack Version Publish Api V0 Can Pack Versions  Version  Publish Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/can-pack/proposals/{proposal_id}":{"get":{"tags":["can-pack"],"summary":"Can Pack Proposal","operationId":"can_pack_proposal_api_v0_can_pack_proposals__proposal_id__get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Can Pack Proposal Api V0 Can Pack Proposals  Proposal Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/can-pack/proposals/{proposal_id}/approve":{"post":{"tags":["can-pack"],"summary":"Can Pack Proposal Approve","description":"Manager approves: a NEW pack version is cut (semver bump, sha256, changelog), saved here and made\nactive, then committed and tagged in powermossa/powermossa-can-pack when this server has a publish\ntoken. Existing tags are never rewritten.","operationId":"can_pack_proposal_approve_api_v0_can_pack_proposals__proposal_id__approve_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackDecisionIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Can Pack Proposal Approve Api V0 Can Pack Proposals  Proposal Id  Approve Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/can-pack/proposals/{proposal_id}/reject":{"post":{"tags":["can-pack"],"summary":"Can Pack Proposal Reject","description":"Manager rejects a pending proposal. The pack is unchanged; the vehicle keeps its own override.","operationId":"can_pack_proposal_reject_api_v0_can_pack_proposals__proposal_id__reject_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackDecisionIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Can Pack Proposal Reject Api V0 Can Pack Proposals  Proposal Id  Reject Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/can/openapi.json":{"get":{"tags":["can-pack"],"summary":"Can Openapi Spec","description":"OpenAPI 3 spec of the CAN map API (routes tagged can-map / can-pack / devices). Public on purpose:\nit is documentation only and carries no shop data; every route it lists still needs staff or a device key.","operationId":"can_openapi_spec_api_v0_can_openapi_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Can Openapi Spec Api V0 Can Openapi Json Get"}}}}}}},"/api/v0/vehicles/{vehicle_id}/can-map/compiled":{"get":{"tags":["can-map"],"summary":"Vehicle Can Map Compiled","description":"The compiled map (PMCM v1) a device would download for this vehicle. ETag = the map hash:\nsend If-None-Match (or have=<hash>) and an unchanged map answers 304 with no body.","operationId":"vehicle_can_map_compiled_api_v0_vehicles__vehicle_id__can_map_compiled_get","parameters":[{"name":"vehicle_id","in":"path","required":true,"schema":{"type":"string","title":"Vehicle Id"}},{"name":"have","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"","title":"Have"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Vehicle Can Map Compiled Api V0 Vehicles  Vehicle Id  Can Map Compiled Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v0/devices/can-map":{"get":{"tags":["can-map","devices"],"summary":"Device Can Map","description":"Compiled map for the vehicle this board is attached to (dash or OBD). Auth: the device's existing\nkey (X-Device-Key). have=<hash> answers {unchanged: true} with no bin; If-None-Match: \"pmcm1-<hash>\"\nanswers 304. The ETag header always carries the current hash.","operationId":"device_can_map_api_v0_devices_can_map_get","parameters":[{"name":"have","in":"query","required":false,"schema":{"type":"string","maxLength":64,"default":"","title":"Have"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-device-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Device-Key"}},{"name":"if-none-match","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"If-None-Match"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Device Can Map Api V0 Devices Can Map Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AdoptIn":{"properties":{"code":{"type":"string","maxLength":8,"minLength":4,"title":"Code"},"label":{"type":"string","maxLength":40,"title":"Label","default":""},"family":{"type":"string","enum":["display","io","fan","button","lcd","obd","dash",""],"title":"Family","default":""},"site_id":{"type":"string","maxLength":40,"title":"Site Id","default":""}},"type":"object","required":["code"],"title":"AdoptIn"},"BoostRangeIn":{"properties":{"id":{"type":"string","maxLength":24,"minLength":1,"title":"Id"},"en":{"type":"string","maxLength":40,"title":"En","default":""},"th":{"type":"string","maxLength":40,"title":"Th","default":""},"min_kpa":{"type":"number","title":"Min Kpa"},"max_kpa":{"type":"number","title":"Max Kpa"}},"type":"object","required":["id","min_kpa","max_kpa"],"title":"BoostRangeIn"},"BoostRangesIn":{"properties":{"ranges":{"items":{"$ref":"#/components/schemas/BoostRangeIn"},"type":"array","maxItems":32,"title":"Ranges"}},"type":"object","title":"BoostRangesIn"},"BrakeIn":{"properties":{"held":{"type":"boolean","title":"Held"},"torque_nm":{"anyOf":[{"type":"number","maximum":2000.0,"minimum":0.0},{"type":"null"}],"title":"Torque Nm"}},"type":"object","required":["held"],"title":"BrakeIn"},"CalIn":{"properties":{"lc_zero":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lc Zero"},"lc_span_nm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lc Span Nm"},"teeth":{"anyOf":[{"type":"integer","maximum":512.0,"minimum":1.0},{"type":"null"}],"title":"Teeth"},"roller_diameter_m":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Roller Diameter M"},"zero_now":{"type":"boolean","title":"Zero Now","default":false}},"type":"object","title":"CalIn"},"CanFrameIn":{"properties":{"can_id":{"type":"integer","title":"Can Id"},"data_hex":{"type":"string","maxLength":32,"title":"Data Hex","default":""},"profile_id":{"type":"string","maxLength":40,"title":"Profile Id","default":""},"pid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pid"},"baro_kpa":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Baro Kpa"}},"type":"object","required":["can_id"],"title":"CanFrameIn"},"CanOverrideIn":{"properties":{"can_id":{"type":"integer","maximum":536870911.0,"minimum":0.0,"title":"Can Id"},"label":{"type":"string","maxLength":60,"minLength":1,"title":"Label"},"remove":{"type":"boolean","title":"Remove","default":false},"start":{"anyOf":[{"type":"integer","maximum":63.0,"minimum":0.0},{"type":"null"}],"title":"Start"},"length":{"anyOf":[{"type":"integer","maximum":64.0,"minimum":1.0},{"type":"null"}],"title":"Length"},"order":{"type":"string","enum":["intel","motorola"],"title":"Order","default":"motorola"},"signed":{"type":"boolean","title":"Signed","default":false},"scale":{"type":"number","title":"Scale","default":1.0},"offset":{"type":"number","title":"Offset","default":0.0},"unit":{"type":"string","maxLength":16,"title":"Unit","default":""}},"additionalProperties":false,"type":"object","required":["can_id","label"],"title":"CanOverrideIn"},"CanOverridesIn":{"properties":{"overrides":{"items":{"$ref":"#/components/schemas/CanOverrideIn"},"type":"array","maxItems":400,"title":"Overrides"}},"additionalProperties":false,"type":"object","required":["overrides"],"title":"CanOverridesIn"},"CanPromoteIn":{"properties":{"can_id":{"type":"integer","maximum":536870911.0,"minimum":0.0,"title":"Can Id"},"label":{"type":"string","maxLength":60,"minLength":1,"title":"Label"},"note":{"type":"string","maxLength":300,"title":"Note","default":""}},"additionalProperties":false,"type":"object","required":["can_id","label"],"title":"CanPromoteIn"},"CanStatusIn":{"properties":{"can_id":{"type":"integer","maximum":536870911.0,"minimum":0.0,"title":"Can Id"},"label":{"type":"string","maxLength":60,"minLength":1,"title":"Label"},"status":{"type":"string","pattern":"^(unverified|verified|rejected)$","title":"Status"},"channel":{"type":"string","maxLength":24,"title":"Channel","default":""},"note":{"type":"string","maxLength":200,"title":"Note","default":""}},"additionalProperties":false,"type":"object","required":["can_id","label","status"],"title":"CanStatusIn"},"CanVerifyConfigIn":{"properties":{"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"ref_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ref Enabled"},"ref_interval_ms":{"anyOf":[{"type":"integer","maximum":30000.0,"minimum":1000.0},{"type":"null"}],"title":"Ref Interval Ms"},"tolerance_scale":{"anyOf":[{"type":"number","maximum":3.0,"minimum":0.5},{"type":"null"}],"title":"Tolerance Scale"},"write":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Write"}},"additionalProperties":false,"type":"object","title":"CanVerifyConfigIn"},"CanVerifyIn":{"properties":{"profile_id":{"type":"string","maxLength":40,"title":"Profile Id","default":""},"bus":{"anyOf":[{"type":"string","enum":["up","down"]},{"type":"null"}],"title":"Bus"},"frames_s":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Frames S"},"ids_seen":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"string"}]},"type":"array"},{"type":"null"}],"title":"Ids Seen"},"ids_missing":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"string"}]},"type":"array"},{"type":"null"}],"title":"Ids Missing"},"age_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Age Ms"},"values":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Values"}},"type":"object","title":"CanVerifyIn"},"CanVerifyLockIn":{"properties":{"can_id":{"type":"integer","title":"Can Id"},"label":{"type":"string","maxLength":60,"minLength":1,"title":"Label"}},"type":"object","required":["can_id","label"],"title":"CanVerifyLockIn"},"ChannelConfIn":{"properties":{"thresholds":{"additionalProperties":{"additionalProperties":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"object"},"type":"object","title":"Thresholds"},"labels":{"additionalProperties":{"type":"string"},"type":"object","title":"Labels"}},"type":"object","title":"ChannelConfIn"},"ChannelIn":{"properties":{"catalog_id":{"type":"string","maxLength":40,"minLength":1,"title":"Catalog Id"},"enabled":{"type":"boolean","title":"Enabled","default":true},"label":{"type":"string","maxLength":40,"title":"Label","default":""},"role":{"type":"string","maxLength":20,"title":"Role","default":""}},"type":"object","required":["catalog_id"],"title":"ChannelIn"},"ChartIn":{"properties":{"title":{"type":"string","maxLength":120,"minLength":1,"title":"Title"},"run_id":{"type":"string","maxLength":40,"title":"Run Id","default":""},"gear":{"type":"string","maxLength":20,"title":"Gear","default":""},"peaks":{"additionalProperties":true,"type":"object","title":"Peaks"},"png":{"type":"string","maxLength":2500000,"minLength":32,"title":"Png"},"fame":{"type":"boolean","title":"Fame","default":false},"include_plate":{"type":"boolean","title":"Include Plate","default":false}},"type":"object","required":["title","png"],"title":"ChartIn"},"ChassisIn":{"properties":{"code":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Code"},"driven_axle":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Driven Axle"},"mass_kg":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Mass Kg"}},"type":"object","title":"ChassisIn"},"CorrectionIn":{"properties":{"can_id":{"type":"integer","maximum":536870911.0,"minimum":0.0,"title":"Can Id"},"verdict":{"type":"string","enum":["accept","reject","correct"],"title":"Verdict"},"name":{"type":"string","maxLength":60,"title":"Name","default":""},"note":{"type":"string","maxLength":200,"title":"Note","default":""}},"type":"object","required":["can_id","verdict"],"title":"CorrectionIn"},"CustomerIn":{"properties":{"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name"},"phone":{"type":"string","maxLength":40,"title":"Phone","default":""},"plate":{"type":"string","maxLength":20,"title":"Plate","default":""},"note":{"type":"string","maxLength":200,"title":"Note","default":""},"operator_id":{"type":"string","maxLength":40,"title":"Operator Id","default":""},"workshop_id":{"type":"string","maxLength":40,"title":"Workshop Id","default":""}},"type":"object","required":["name"],"title":"CustomerIn"},"DeviceCommandIn":{"properties":{"kind":{"type":"string","maxLength":40,"minLength":2,"title":"Kind"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"}},"type":"object","required":["kind"],"title":"DeviceCommandIn"},"DeviceDesiredIn":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Label"},"channel":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Channel"},"site_id":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Site Id"},"sniff":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Sniff"},"fast_pids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Fast Pids"}},"type":"object","title":"DeviceDesiredIn"},"DeviceProfileIn":{"properties":{"note":{"anyOf":[{"type":"string","maxLength":400},{"type":"null"}],"title":"Note"},"vehicle_id":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Vehicle Id"},"bus":{"anyOf":[{"type":"string","maxLength":12},{"type":"null"}],"title":"Bus"},"attach":{"anyOf":[{"type":"string","maxLength":12},{"type":"null"}],"title":"Attach"}},"type":"object","title":"DeviceProfileIn"},"DeviceStageIn":{"properties":{"version":{"type":"string","maxLength":40,"title":"Version","default":""}},"type":"object","title":"DeviceStageIn"},"DrivelineIn":{"properties":{"layout":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Layout"},"gearbox":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Gearbox"},"diff_ratio":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Diff Ratio"},"tyre":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Tyre"},"gear_ratio":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Gear Ratio"}},"type":"object","title":"DrivelineIn"},"DumpFrameIn":{"properties":{"t":{"type":"integer","title":"T","default":0},"i":{"type":"integer","title":"I","default":0},"h":{"type":"string","maxLength":16,"title":"H","default":""}},"type":"object","title":"DumpFrameIn"},"EngineIn":{"properties":{"family":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Family"},"code":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Code"},"displacement":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Displacement"},"induction":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Induction"},"fuel":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Fuel"},"ecu":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Ecu"}},"type":"object","title":"EngineIn"},"FameIn":{"properties":{"run_id":{"type":"string","maxLength":40,"minLength":4,"title":"Run Id"},"nickname":{"type":"string","maxLength":60,"title":"Nickname","default":""},"include_plate":{"type":"boolean","title":"Include Plate","default":false},"social":{"type":"boolean","title":"Social","default":false}},"type":"object","required":["run_id"],"title":"FameIn"},"FameSettingsIn":{"properties":{"dyno_name":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Dyno Name"},"open":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Open"},"auto_social":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Social"},"sort":{"anyOf":[{"type":"string","enum":["power","torque","boost","recent"]},{"type":"null"}],"title":"Sort"}},"type":"object","title":"FameSettingsIn"},"FansIn":{"properties":{"fan1":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Fan1"},"fan1_spd":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Fan1 Spd"},"fan_exh":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Fan Exh"},"fan_exh_spd":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Fan Exh Spd"}},"type":"object","title":"FansIn"},"FlashChunkIn":{"properties":{"id":{"type":"string","maxLength":40,"minLength":4,"title":"Id"},"address":{"type":"integer","title":"Address","default":0},"offset":{"type":"integer","title":"Offset","default":0},"total":{"type":"integer","title":"Total","default":0},"hex":{"type":"string","maxLength":512,"title":"Hex","default":""},"kind":{"type":"string","maxLength":16,"title":"Kind","default":""},"text":{"type":"string","maxLength":80,"title":"Text","default":""}},"type":"object","required":["id"],"title":"FlashChunkIn"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IngestIn":{"properties":{"profile_id":{"type":"string","maxLength":40,"title":"Profile Id","default":""},"channels":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Channels"}},"additionalProperties":true,"type":"object","title":"IngestIn"},"IotPressIn":{"properties":{"key_id":{"type":"string","maxLength":40,"title":"Key Id","default":"fire"},"kind":{"type":"string","maxLength":20,"title":"Kind","default":"tap"},"closed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Closed"}},"type":"object","title":"IotPressIn"},"IotStatusIn":{"properties":{"firmware":{"type":"string","maxLength":40,"title":"Firmware","default":""},"firmware_version":{"type":"string","maxLength":40,"title":"Firmware Version","default":""},"heap":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Heap"},"rssi":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rssi"},"ssid":{"type":"string","maxLength":40,"title":"Ssid","default":""},"panel":{"type":"string","maxLength":20,"title":"Panel","default":""},"closed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Closed"}},"additionalProperties":true,"type":"object","title":"IotStatusIn"},"LayoutIn":{"properties":{"skin":{"type":"string","enum":["modern","mainline_dynolog","dyno_dynamics"],"title":"Skin","default":"modern"},"view":{"type":"string","enum":["run","display"],"title":"View","default":"run"},"layout":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Layout"}},"type":"object","title":"LayoutIn"},"MachineIn":{"properties":{"machine_type":{"type":"string","enum":["single_retarder","twin_retarder","awd_4wd","hub"],"title":"Machine Type"}},"type":"object","required":["machine_type"],"title":"MachineIn"},"ModeIn":{"properties":{"mode":{"type":"string","enum":["idle","road_load","fixed_load","ramp","coast"],"title":"Mode"}},"type":"object","required":["mode"],"title":"ModeIn"},"OidcIn":{"properties":{"access_token":{"type":"string","minLength":20,"title":"Access Token"}},"type":"object","required":["access_token"],"title":"OidcIn"},"OperatorIn":{"properties":{"name":{"type":"string","maxLength":60,"minLength":1,"title":"Name"},"email":{"type":"string","maxLength":120,"pattern":"^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$","title":"Email"}},"type":"object","required":["name","email"],"title":"OperatorIn"},"OperatorPatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string","maxLength":120,"pattern":"^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$"},{"type":"null"}],"title":"Email"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active"}},"type":"object","title":"OperatorPatch"},"PackDecisionIn":{"properties":{"note":{"type":"string","maxLength":300,"title":"Note","default":""},"bump":{"type":"string","enum":["","patch","minor","major"],"title":"Bump","default":""}},"additionalProperties":false,"type":"object","title":"PackDecisionIn"},"PairIn":{"properties":{"peer_id":{"type":"string","maxLength":40,"title":"Peer Id","default":""}},"type":"object","title":"PairIn"},"PitSimIn":{"properties":{"rpm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rpm"},"torque_nm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Torque Nm"},"torque_raw":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Torque Raw"},"cmd_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cmd Pct"},"estop":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Estop"},"drop_comms":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Drop Comms"},"follow":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Follow"},"mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mode"},"sensors":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Sensors"}},"additionalProperties":true,"type":"object","title":"PitSimIn"},"ProfileReviewIn":{"properties":{"note":{"type":"string","maxLength":400,"title":"Note","default":""},"confirm":{"type":"boolean","title":"Confirm","default":false},"corrections":{"items":{"$ref":"#/components/schemas/CorrectionIn"},"type":"array","maxItems":48,"title":"Corrections"},"bus":{"type":"string","maxLength":12,"title":"Bus","default":"chassis"}},"type":"object","title":"ProfileReviewIn"},"RestoreIn":{"properties":{"source":{"type":"string","enum":["local","mothership"],"title":"Source"},"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name"}},"type":"object","required":["source","name"],"title":"RestoreIn"},"RunStartIn":{"properties":{"vehicle_id":{"type":"string","maxLength":40,"minLength":4,"title":"Vehicle Id"},"customer_id":{"type":"string","maxLength":40,"title":"Customer Id","default":""}},"type":"object","required":["vehicle_id"],"title":"RunStartIn"},"ScreenSettingsIn":{"properties":{"units":{"anyOf":[{"type":"string","enum":["afr","lambda"]},{"type":"null"}],"title":"Units"},"fuel":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Fuel"},"induction":{"anyOf":[{"type":"string","enum":["na","boost"]},{"type":"null"}],"title":"Induction"},"zones_custom":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Zones Custom"},"bright":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":10.0},{"type":"null"}],"title":"Bright"},"view":{"anyOf":[{"type":"string","enum":["main","big","bar","gauge"]},{"type":"null"}],"title":"View"},"theme":{"anyOf":[{"type":"string","enum":["dark","light"]},{"type":"null"}],"title":"Theme"},"lam_lo":{"anyOf":[{"type":"number","maximum":3.4,"minimum":0.5},{"type":"null"}],"title":"Lam Lo"},"lam_hi":{"anyOf":[{"type":"number","maximum":3.4,"minimum":0.5},{"type":"null"}],"title":"Lam Hi"},"lam_rich":{"anyOf":[{"type":"number","maximum":3.4,"minimum":0.5},{"type":"null"}],"title":"Lam Rich"},"lam_lean":{"anyOf":[{"type":"number","maximum":3.4,"minimum":0.5},{"type":"null"}],"title":"Lam Lean"},"profile":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Profile"},"boost_range":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Boost Range"},"boost_unit":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"title":"Boost Unit"},"workshop":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Workshop"},"faces":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Faces"},"boost_warn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Boost Warn"},"boost_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Boost Limit"},"egt_warn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Egt Warn"},"egt_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Egt Limit"},"ect_warn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ect Warn"},"ect_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ect Limit"},"rail_warn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rail Warn"},"rail_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rail Limit"},"oil_warn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Oil Warn"},"oil_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Oil Limit"}},"type":"object","title":"ScreenSettingsIn"},"SelectionIn":{"properties":{"customer_id":{"type":"string","maxLength":40,"title":"Customer Id","default":""},"vehicle_id":{"type":"string","maxLength":40,"title":"Vehicle Id","default":""},"operator_id":{"type":"string","maxLength":40,"title":"Operator Id","default":""},"workshop_id":{"type":"string","maxLength":40,"title":"Workshop Id","default":""}},"type":"object","title":"SelectionIn"},"SetpointIn":{"properties":{"torque_nm":{"anyOf":[{"type":"number","maximum":3000.0,"minimum":0.0},{"type":"null"}],"title":"Torque Nm"},"tractive_n":{"anyOf":[{"type":"number","maximum":20000.0,"minimum":0.0},{"type":"null"}],"title":"Tractive N"},"rpm":{"anyOf":[{"type":"number","maximum":12000.0,"minimum":0.0},{"type":"null"}],"title":"Rpm"},"speed_kph":{"anyOf":[{"type":"number","maximum":400.0,"minimum":0.0},{"type":"null"}],"title":"Speed Kph"},"ramp_start":{"anyOf":[{"type":"number","maximum":12000.0,"minimum":0.0},{"type":"null"}],"title":"Ramp Start"},"ramp_end":{"anyOf":[{"type":"number","maximum":12000.0,"minimum":0.0},{"type":"null"}],"title":"Ramp End"},"ramp_rate":{"anyOf":[{"type":"number","maximum":5000.0,"minimum":0.0},{"type":"null"}],"title":"Ramp Rate"},"grade_pct":{"anyOf":[{"type":"number","maximum":30.0,"minimum":-30.0},{"type":"null"}],"title":"Grade Pct"},"mass_class":{"anyOf":[{"type":"string","enum":["bike","car","ute"]},{"type":"null"}],"title":"Mass Class"}},"type":"object","title":"SetpointIn"},"SettingsIn":{"properties":{"skin":{"anyOf":[{"type":"string","enum":["modern","mainline_dynolog","dyno_dynamics"]},{"type":"null"}],"title":"Skin"},"lang":{"anyOf":[{"type":"string","enum":["en","th"]},{"type":"null"}],"title":"Lang"},"theme":{"anyOf":[{"type":"string","enum":["system","light","dark"]},{"type":"null"}],"title":"Theme"},"units":{"anyOf":[{"type":"string","enum":["metric","imperial"]},{"type":"null"}],"title":"Units"},"brake_hold_nm":{"anyOf":[{"type":"number","maximum":2000.0,"minimum":0.0},{"type":"null"}],"title":"Brake Hold Nm"}},"type":"object","title":"SettingsIn"},"ShareIn":{"properties":{"run_id":{"type":"string","maxLength":40,"minLength":4,"title":"Run Id"},"via":{"type":"string","enum":["operator","powermossa"],"title":"Via","default":"operator"},"customer_id":{"type":"string","maxLength":40,"title":"Customer Id","default":""},"include_plate":{"type":"boolean","title":"Include Plate","default":false}},"type":"object","required":["run_id"],"title":"ShareIn"},"ShopWifiIn":{"properties":{"ssid":{"type":"string","maxLength":32,"minLength":1,"title":"Ssid"},"password":{"type":"string","maxLength":64,"title":"Password","default":""}},"type":"object","required":["ssid"],"title":"ShopWifiIn"},"SniffIdIn":{"properties":{"id":{"type":"integer","title":"Id"},"ext":{"type":"boolean","title":"Ext","default":false},"dlc":{"type":"integer","title":"Dlc","default":0},"hz":{"type":"number","title":"Hz","default":0},"hex":{"type":"string","maxLength":16,"title":"Hex","default":""},"chg":{"type":"integer","title":"Chg","default":0}},"type":"object","required":["id"],"title":"SniffIdIn"},"SniffIn":{"properties":{"frames_s":{"type":"number","title":"Frames S","default":0},"reply_ms":{"type":"number","title":"Reply Ms","default":0},"ids":{"items":{"$ref":"#/components/schemas/SniffIdIn"},"type":"array","title":"Ids"},"obd":{"items":{"type":"integer"},"type":"array","title":"Obd"},"dump":{"items":{"$ref":"#/components/schemas/DumpFrameIn"},"type":"array","maxItems":80,"title":"Dump"}},"type":"object","title":"SniffIn"},"SocialIn":{"properties":{"channel":{"type":"string","enum":["x","facebook","instagram"],"title":"Channel"},"status":{"type":"string","enum":["off","queue","live"],"title":"Status"}},"type":"object","required":["channel","status"],"title":"SocialIn"},"StreamIn":{"properties":{"status":{"anyOf":[{"type":"string","enum":["off","preview","live"]},{"type":"null"}],"title":"Status"},"dest":{"anyOf":[{"type":"string","enum":["none","waiting_room","local_wall","rtmp"]},{"type":"null"}],"title":"Dest"},"overlay":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Overlay"},"overlay_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Overlay Ids"},"lobby":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Lobby"}},"type":"object","title":"StreamIn"},"SurfaceIn":{"properties":{"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"roles":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Roles"},"layout":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layout"},"channels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Channels"},"alerts":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Alerts"},"panel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Panel"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"}},"type":"object","title":"SurfaceIn"},"SystemSettingsIn":{"properties":{"settings":{"additionalProperties":true,"type":"object","title":"Settings"},"secrets":{"additionalProperties":{"type":"string"},"type":"object","title":"Secrets"}},"type":"object","title":"SystemSettingsIn"},"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"},"VehicleIn":{"properties":{"customer_id":{"type":"string","maxLength":40,"minLength":4,"title":"Customer Id"},"year":{"type":"string","maxLength":8,"title":"Year","default":""},"make":{"type":"string","maxLength":40,"title":"Make","default":""},"model":{"type":"string","maxLength":40,"title":"Model","default":""},"nickname":{"type":"string","maxLength":60,"title":"Nickname","default":""},"plate":{"type":"string","maxLength":20,"title":"Plate","default":""},"note":{"type":"string","maxLength":200,"title":"Note","default":""},"vin":{"type":"string","maxLength":17,"title":"Vin","default":""},"engine":{"anyOf":[{"$ref":"#/components/schemas/EngineIn"},{"type":"null"}]},"driveline":{"anyOf":[{"$ref":"#/components/schemas/DrivelineIn"},{"type":"null"}]},"chassis":{"anyOf":[{"$ref":"#/components/schemas/ChassisIn"},{"type":"null"}]},"library_id":{"type":"string","maxLength":40,"title":"Library Id","default":""},"standalone_id":{"type":"string","maxLength":40,"title":"Standalone Id","default":""},"listen":{"type":"string","maxLength":12,"title":"Listen","default":"chassis"},"flash_protocol":{"type":"string","maxLength":40,"title":"Flash Protocol","default":""},"standalone_protocol":{"type":"string","maxLength":40,"title":"Standalone Protocol","default":""},"can_profile":{"type":"string","maxLength":60,"title":"Can Profile","default":""},"note_text":{"type":"string","maxLength":500,"title":"Note Text","default":""}},"type":"object","required":["customer_id"],"title":"VehicleIn"},"VehiclePatch":{"properties":{"customer_id":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Customer Id"},"year":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"title":"Year"},"make":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Make"},"model":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Model"},"nickname":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Nickname"},"plate":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Plate"},"note":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Note"},"note_text":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Note Text"},"vin":{"anyOf":[{"type":"string","maxLength":17},{"type":"null"}],"title":"Vin"},"engine":{"anyOf":[{"$ref":"#/components/schemas/EngineIn"},{"type":"null"}]},"driveline":{"anyOf":[{"$ref":"#/components/schemas/DrivelineIn"},{"type":"null"}]},"chassis":{"anyOf":[{"$ref":"#/components/schemas/ChassisIn"},{"type":"null"}]},"standalone_id":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Standalone Id"},"listen":{"anyOf":[{"type":"string","maxLength":12},{"type":"null"}],"title":"Listen"},"flash_protocol":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Flash Protocol"},"standalone_protocol":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Standalone Protocol"},"library_id":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Library Id"},"can_profile":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Can Profile"},"can_overrides":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":400},{"type":"null"}],"title":"Can Overrides"},"can_kbps":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":0.0},{"type":"null"}],"title":"Can Kbps"}},"type":"object","title":"VehiclePatch"},"VehicleSniffIn":{"properties":{"device_id":{"type":"string","maxLength":40,"minLength":4,"title":"Device Id"},"on":{"type":"boolean","title":"On","default":true},"keep":{"type":"boolean","title":"Keep","default":false},"live_only":{"type":"boolean","title":"Live Only","default":false},"live":{"items":{"type":"string"},"type":"array","maxItems":64,"title":"Live"}},"type":"object","required":["device_id"],"title":"VehicleSniffIn"},"WorkshopIn":{"properties":{"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name"},"note":{"type":"string","maxLength":200,"title":"Note","default":""}},"type":"object","required":["name"],"title":"WorkshopIn"}}}}