{"openapi":"3.1.0","info":{"title":"device-management","description":"Device Management","version":"v2.147.0"},"paths":{"/health":{"get":{"tags":["health"],"summary":"Service health check. This health information is collected by a health check aggregator to gather data about the service.","description":"Returns a health check for this service and its dependencies. This health information is\ncollected by a health check aggregator to gather data about the service.","operationId":"get_health_health_get","responses":{"200":{"description":"Service health status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthCheck"}}}}}}},"/heartbeat":{"get":{"tags":["health"],"summary":"Service heart beat. It serves as both readiness and liveness probes, ensuring the service's preparedness and continuous operation while providing an empty response.","description":"This route functions as both readiness and liveness probes, ensuring the service's\npreparedness and continuous operation while providing an empty response.","operationId":"get_heartbeat_heartbeat_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/version":{"get":{"tags":["health"],"summary":"Service version check.","description":"Returns a current version of the application.","operationId":"get_version_version_get","responses":{"200":{"description":"Service version check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionCheck"}}}}}}},"/api/v1/okta_information/":{"get":{"tags":["devices"],"summary":"Provides OKTA client_id, issuer_url & redirect_uri for merchant user authentication.","operationId":"okta_information_api_v1_okta_information__get","responses":{"200":{"description":"OKTA Information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OKTAInformation"}}}}}}},"/api/v1/enroll/":{"post":{"tags":["devices"],"summary":"Enrolls device in OKTA and ConnectDB, and returns OKTA credentials.","operationId":"enroll_api_v1_enroll__post","security":[{"Registration Bearer Token":[]}],"parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceTopologyWithSerialNumber"}}}},"responses":{"200":{"description":"OKTA Credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OKTACredentials"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/merchants/":{"get":{"tags":["merchants"],"summary":"Gets list of merchants/locations for merchant_id from OKTA JWT.","operationId":"get_merchants_api_v1_merchants__get","security":[{"Registration Bearer Token":[]}],"parameters":[{"name":"X-Serial-Number","in":"header","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/DeviceSerialNumber"},{"type":"null"}],"title":"X-Serial-Number"}},{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"List of Topologies(merchants/locations) for given `merchant_id`.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TopologyDetailWithSignature"},"title":"Response Get Merchants Api V1 Merchants  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mdm/att/bulk-sim-usage":{"get":{"tags":["mdm"],"summary":"Get device usage data. The unit of data_usage is bytes.","description":"Get usage data for devices under a specific rate plan.\n\nIf rate_plan_name is not provided, the default rate plan \"SpotOn - 500MB Tier Plan\" will be used.","operationId":"get_device_usages_api_v1_mdm_att_bulk_sim_usage_get","parameters":[{"name":"rate_plan_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate Plan Name"}},{"name":"cycle_start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cycle Start Date"}},{"name":"usage_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/UsageType"},{"type":"null"}],"title":"Usage Type"}},{"name":"rate_plan_version","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Plan Version"}},{"name":"page_number","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page Number"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Device usage data retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceUsagesResponse"},"example":{"account_id":123456789,"account_name":"SpotOn - AT&T","page_number":1,"last_page":false,"rate_plan_name":"SpotOn - 500MB Tier Plan","rate_plan_version":2,"zones":[{"devices":[{"device_id":"89012345678901234567","usage":{"data_usage":1234567}}],"zone":"US-Canada-Mexico"}]}}}},"400":{"description":"Invalid rate plan or request parameters","content":{"application/json":{"examples":{"invalid_rate_plan":{"summary":"Invalid rate plan","value":{"detail":"Rate plan 'InvalidPlan' not found or invalid"}},"invalid_parameters":{"summary":"Invalid request parameters","value":{"detail":"Invalid request parameters: page_size must be between 1 and 50"}}}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"500":{"description":"AT&T service error","content":{"application/json":{"example":{"detail":"Failed to retrieve usage data from AT&T service"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/venues/{venue_id}/stations/":{"get":{"tags":["venues"],"summary":"Get merchant stations associated with the venue from EUM.","operationId":"get_merchant_stations_api_v1_venues__venue_id__stations__get","security":[{"Registration Bearer Token":[]}],"parameters":[{"name":"venue_id","in":"path","required":true,"schema":{"type":"string","title":"Venue Id"}},{"name":"shard_id","in":"query","required":true,"schema":{"type":"string","title":"Shard Id"}}],"responses":{"200":{"description":"List of venue stations. subvendors and vendors.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/device-topology/":{"get":{"tags":["topology"],"summary":"Returns information about merchant location device is assigned to.","description":"Returns merchant topology information for the device. Requires device Okta token with claims containing terminal account ID and shard ID.","operationId":"get_device_topology_api_v1_device_topology__get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Merchant topology information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopologyWithBLID"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sku-mappings":{"get":{"tags":["config"],"summary":"Provides the current SKU mappings between MDMs and SKUs, and untracked SKUs without MDM mappings.","operationId":"sku_mappings_api_v1_sku_mappings_get","responses":{"200":{"description":"SKU Mappings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkuMappings"}}}}},"security":[{"S2S Bearer Token":[]}]}},"/api/v1/device-type-mappings":{"get":{"tags":["config"],"summary":"Provides the current DeviceType mappings between MDMs and available DeviceTypes, and untracked DeviceTypes without MDM mappings.","operationId":"device_type_mappings_api_v1_device_type_mappings_get","responses":{"200":{"description":"DeviceType Mappings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceTypeMappings"}}}}}}},"/api/v1/audit/devices/{device_serial_number}/annotation":{"post":{"tags":["audits"],"summary":"Create a device audit log entry with metadata","description":"Create or update a device in the inventory system.\n\nThis endpoint performs an upsert operation - if a device with the given serial number\nalready exists, it will be updated with the new information. If it doesn't exist,\na new device record will be created.","operationId":"create_device_audit_annotation_api_v1_audit_devices__device_serial_number__annotation_post","parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceAuditAnnotateRequest"}}}},"responses":{"201":{"description":"DeviceAudit log successfully created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceAuditResponse"},"example":{"device_id":"01234567-89ab-cdef-0123-456789abcdef","event_type":"annotate","actor":"admin_user","event_metadata":{"note":"This device was inspected and is functioning properly."},"created_at":"2023-10-01T12:34:56.789Z"}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"No actor sent","content":{"application/json":{"example":{"detail":{"message":"No actor sent in request body or headers."}}}}}}}},"/api/v1/audit/devices/{device_serial_number}":{"get":{"tags":["audits"],"summary":"Fetch audit logs related to a Device by Serial Number","description":"Fetch audit logs related to a Device by Serial Number.","operationId":"fetch_device_audit_logs_api_v1_audit_devices__device_serial_number__get","parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"200":{"description":"DeviceAudit logs retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeviceAuditResponse"},"title":"Response Fetch Device Audit Logs Api V1 Audit Devices  Device Serial Number  Get"},"example":[{"device_id":"01234567-89ab-cdef-0123-456789abcdef","event_type":"annotate","actor":"system","event_metadata":{"note":"This is officially installed."},"created_at":"2023-10-01T12:00:00.000Z"},{"device_id":"01234567-89ab-cdef-0123-456789abcdef","event_type":"assign","actor":"admin_user","event_metadata":{"new_values":{"location_id":"fedcba98-7654-3210-fedc-ba9876543210"},"old_values":{},"business_location_id":"BL-1234-5678-9012"},"created_at":"2023-10-02T15:30:00.000Z"},{"device_id":"01234567-89ab-cdef-0123-456789abcdef","event_type":"register","actor":"admin_user","event_metadata":{},"created_at":"2023-10-03T09:45:00.000Z"}]}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tasks/runs/{task_run_id}":{"get":{"tags":["tasks"],"summary":"Get the status of an async task run","description":"Returns the current status of a previously enqueued async task. Clients should poll this endpoint until the status reaches a terminal state (success or error).","operationId":"get_task_run_status_api_v1_tasks_runs__task_run_id__get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"task_run_id","in":"path","required":true,"schema":{"type":"string","title":"Task Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskRunStatusResponse"}}}},"404":{"description":"Task run not found."},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tasks/runs":{"get":{"tags":["tasks"],"summary":"List in-flight task run IDs by type","description":"Returns the IDs of all task runs in a non-terminal state (pending or running) filtered by the given task type(s). Useful for the frontend to discover active tasks that can then be polled individually via the detail endpoint. Pass multiple task_type params to filter on more than one type.","operationId":"list_inflight_task_runs_api_v1_tasks_runs_get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"task_type","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"description":"Task type(s) to filter on (e.g. topic name)","title":"Task Type"},"description":"Task type(s) to filter on (e.g. topic name)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response List Inflight Task Runs Api V1 Tasks Runs Get"}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/soda/start":{"post":{"tags":["sidecar_commands"],"summary":"Start SODA on a device via its sidecar.","operationId":"start_soda_api_v1_devices__device_serial_number__soda_start_post","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/StartSodaRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartSodaResponse"}}}},"400":{"description":"ACTOR_REQUIRED"},"404":{"description":"DEVICE_NOT_FOUND"},"409":{"description":"DEVICE_OFFLINE"},"422":{"description":"DEVICE_NOT_ELIGIBLE"},"502":{"description":"DELIVERY_REJECTED"},"503":{"description":"DELIVERY_DEPENDENCY_ERROR"},"504":{"description":"DELIVERY_UNCONFIRMED"},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}}}}},"/api/v1/devices/{device_serial_number}/soda/reset":{"post":{"tags":["sidecar_commands"],"summary":"Delete the device's RustDesk record, then start SODA via its sidecar.","operationId":"reset_soda_api_v1_devices__device_serial_number__soda_reset_post","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/StartSodaRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartSodaResponse"}}}},"400":{"description":"ACTOR_REQUIRED"},"404":{"description":"DEVICE_NOT_FOUND"},"409":{"description":"DEVICE_OFFLINE"},"422":{"description":"DEVICE_NOT_ELIGIBLE or SODA_NOT_LINKED"},"500":{"description":"RUSTDESK_UNAVAILABLE"},"502":{"description":"DELIVERY_REJECTED"},"503":{"description":"DELIVERY_DEPENDENCY_ERROR"},"504":{"description":"DELIVERY_UNCONFIRMED"},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}}}}},"/api/v1/devices/{device_serial_number}/software-report":{"post":{"tags":["software_reports"],"summary":"Ingest a SoftwareChanged.v1 report from SNAP.","operationId":"ingest_software_report_api_v1_devices__device_serial_number__software_report_post","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoftwareReportIngestRequest"}}}},"responses":{"200":{"description":"Report stored, duplicated, or accepted for an unknown device.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestSuccessResponse"}}}},"409":{"description":"Idempotency or sequence conflict.","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/IdempotencyConflictResponse"},{"$ref":"#/components/schemas/SequenceConflictResponse"}],"title":"Response 409 Ingest Software Report Api V1 Devices  Device Serial Number  Software Report Post"}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device-software-report:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/software-status":{"get":{"tags":["software_reports"],"summary":"Read the latest software report for a device.","operationId":"read_software_status_api_v1_devices__device_serial_number__software_status_get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoftwareStatusResponse"}}}},"404":{"description":"Serial has no device row and no stored reports."},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/eero/provision":{"post":{"tags":["eero"],"summary":"Start provisioning a new eero Business network for a warehouse-staged device set.","description":"Enqueues an eero_network_provisioning job for the gateway and returns it immediately. The job claims the gateway and any access points, creates the network and binds them, converts it to Business, applies the BLID/DBA labels and SpotOn's golden subnet/DNS config, waits for the network to come back online, upgrades firmware, then enables the main SSID. Poll GET /jobs/{job_id}: job_arguments.phase and last_reason report progress, job_arguments.steps holds per-step results, and status ends in success or error. The gateway must already exist in the device inventory as an eero device.","operationId":"provision_eero_network_api_v1_eero_provision_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EeroProvisionRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceJobResponse"}}}},"400":{"description":"The gateway is not an eero device, or it already has an active job."},"404":{"description":"Gateway not found in the device inventory."},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"S2S Bearer Token":[]}]}},"/api/v1/device-location-mappings/":{"post":{"tags":["device_locations_mappings"],"summary":"Maps a device to a location.","description":"Maps a device to a location.\nReturns the device location mapping details.","operationId":"post_device_location_mapping_api_v1_device_location_mappings__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostDeviceLocationMappingRequest"}}},"required":true},"responses":{"201":{"description":"Device Location Mapping","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostDeviceLocationMappingResponse"}}}},"400":{"description":"Bad Request"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"S2S Bearer Token":[]}]}},"/api/v1/device-location-mappings/{device_serial_number}":{"get":{"tags":["device_locations_mappings"],"summary":"Returns info about device and associated location.","operationId":"get_device_location_mapping_endpoint_api_v1_device_location_mappings__device_serial_number__get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"200":{"description":"Device Location Mapping","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetDeviceLocationMappingResponse"}}},"device_serial_number":"SN001","device_type":"POS","mac_address":"00:11:22:33:44:55","model_number":"Model-123","mdm_type":"zero-touch","mdm_device_id":"mdm-123456","blid":"BL-1234-5678-9ABC","location_id":"location-123456","mapped_at":"2023-10-01T12:00:00Z"},"404":{"description":"Device not found","content":{"application/json":{"example":{"detail":{"message":"Device not found.","extra":{"serial_number":"SN001"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["device_locations_mappings"],"summary":"Removes a device from its location.","description":"Removes a device from its location.\nReturns 204 if successful, 404 if device not found.","operationId":"delete_device_location_mapping_api_v1_device_location_mappings__device_serial_number__delete","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"204":{"description":"Device successfully removed from location"},"400":{"description":"Bad Request"},"404":{"description":"Device not found","content":{"application/json":{"example":{"detail":{"message":"Device not found.","extra":{"serial_number":"SN001"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/device-location-mappings/ready-for-cert-enroll/{device_serial_number}":{"get":{"tags":["device_locations_mappings"],"summary":"Checks if a device is ready for certificate enrollment.","description":"Checks if a device is ready for certificate enrollment and\nreturns the device's BLID and last ackable certificate serial if already mapped.\nIf not allowed, returns 404.","operationId":"validate_device_ready_for_cert_enrollment_api_v1_device_location_mappings_ready_for_cert_enroll__device_serial_number__get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetDeviceReadyForCertEnrollResponse"}}},"device_serial_number":"SN001","blid":"BL-1234-5678-9ABC"},"404":{"description":"Device not ready for certificate enrollment","content":{"application/json":{"example":{"detail":{"message":"Device not ready for certificate enrollment.","extra":{"serial_number":"SN001"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices-by-location/{blid}":{"get":{"tags":["device_locations_mappings"],"summary":"Returns devices from given location.","operationId":"get_devices_by_location_endpoint_api_v1_devices_by_location__blid__get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"blid","in":"path","required":true,"schema":{"$ref":"#/components/schemas/BLID"}}],"responses":{"200":{"description":"List of devices","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeviceDetailWithSims"},"title":"Response Get Devices By Location Endpoint Api V1 Devices By Location  Blid  Get"},"example":[{"device_serial_number":"SN001","device_type":"POS","mac_address":"00:11:22:33:44:55","model_number":"Model-123","mdm_type":"zero-touch","mdm_device_id":"mdm-123456","device_nickname":"Front Desk","updated_at":"2025-07-22T20:22:07.506846Z","linked_sims":[]},{"device_serial_number":"SN002","device_type":"KDS","mac_address":"00:11:22:33:44:56","model_number":"Model-456","mdm_type":"eloview","mdm_device_id":"mdm-123456","device_nickname":"Front Desk","updated_at":"2025-07-22T20:22:07.506846Z","linked_sims":[]}]}}},"404":{"description":"Device location not found","content":{"application/json":{"example":{"detail":{"message":"Device location not found.","extra":{"blid":"BL-123456"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/":{"post":{"tags":["devices_inventory"],"summary":"Create or update device inventory","description":"Create or update a device in the inventory system.\n\nThis endpoint performs an upsert operation - if a device with the given serial number\nalready exists, it will be updated with the new information. If it doesn't exist,\na new device record will be created.\n\nIf a blid is provided, the device will also be mapped to that location.","operationId":"create_device_inventory_api_v1_devices__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceInventoryRequest"}}},"required":true},"responses":{"201":{"description":"Device inventory successfully created or updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceInventoryResponse"},"example":{"id":"01234567-89ab-cdef-0123-456789abcdef","device_type":"POS","device_serial_number":"TEST123456","mac_address":"00:11:22:33:44:55","model_number":"MODEL_TEST_001","mdm_type":"eloview","mdm_device_id":"mdm_test_123","device_nickname":"Front Desk","rustdesk_id":"1234567890","wave":"general"}}}},"400":{"description":"Device with the given serial number already exists, or the serial number is invalid for the given MDM.","content":{"application/json":{"example":{"detail":"Device with serial number 'TEST123456' already exists."}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"S2S Bearer Token":[]}]}},"/api/v1/devices/{device_serial_number}":{"patch":{"tags":["devices_inventory"],"summary":"Partially update device inventory","description":"Partially update an existing device in the inventory system.\n\nThis endpoint updates only the fields provided in the request body. Fields not included\nin the request will remain unchanged. The device must exist in the system - if it doesn't\nexist, a 404 error will be returned.","operationId":"update_device_inventory_api_v1_devices__device_serial_number__patch","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceInventoryUpdateRequest"}}}},"responses":{"200":{"description":"Device inventory successfully updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceInventoryResponse"},"example":{"id":"01234567-89ab-cdef-0123-456789abcdef","device_type":"POS","device_serial_number":"TEST123456","mac_address":"00:11:22:33:44:55","model_number":"MODEL_TEST_001","mdm_type":"eloview","mdm_device_id":"mdm_test_123","device_nickname":"Front Desk","rustdesk_id":"1234567890","wave":"general"}}}},"400":{"description":"Bad Request"},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"404":{"description":"Device not found","content":{"application/json":{"example":{"detail":"Device with serial number 'TEST123456' not found"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["devices_inventory"],"summary":"Delete device from inventory","description":"Delete a device from the inventory system.\n\nThis endpoint permanently removes a device from the system. The device must exist\nin the system - if it doesn't exist, a 404 error will be returned.","operationId":"delete_device_inventory_api_v1_devices__device_serial_number__delete","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"204":{"description":"Device successfully deleted from inventory"},"400":{"description":"Bad Request"},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"404":{"description":"Device not found","content":{"application/json":{"example":{"detail":"Device with serial number 'TEST123456' not found"}}}},"409":{"description":"Gateway device has no recorded mdm_device_id","content":{"application/json":{"example":{"detail":{"message":"Gateway device 'TEST123456' has no recorded mdm_device_id and cannot be removed.","extra":{"serial_number":"TEST123456"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["devices_inventory"],"summary":"Returns device details by serial number.","operationId":"get_device_with_serial_number_api_v1_devices__device_serial_number__get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"200":{"description":"Device details retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceDetailWithCertificate"},"example":{"device_serial_number":"SN001","device_type":"POS","mac_address":"00:11:22:33:44:55","model_number":"Model-123","mdm_type":"zero-touch","mdm_device_id":"mdm-123456","device_nickname":"Front Desk","updated_at":"2025-07-22T20:22:07.506846Z","rustdesk_id":"1234567890","linked_sims":[],"certificate_fingerprint":"33cbeb9b86c45d26e69a6cc65ed2c60756c8590edbb0d036bba8437a242f2996","certificate_serial_number":"1234567890abcdef"}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"404":{"description":"Device location not found","content":{"application/json":{"example":{"detail":{"message":"Device location not found.","extra":{"serial_number":"SN002"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/squadron-control":{"patch":{"tags":["devices_inventory"],"summary":"Opt a device in/out of automatic squadron group moves","description":"Opt a device in or out of automatic squadron group moves.\n\nWhen opted out (``opt_out=true``), location/mapping changes will not schedule a\nrejoin-fleet job for this device, so its manually configured group/software is left\nalone. Deliberate operator actions — the manual rejoin endpoint and the CSV script —\nare unaffected. Send ``opt_out=false`` to re-enable automatic moves.\n\nReturns 404 if the device does not exist.","operationId":"set_device_squadron_control_api_v1_devices__device_serial_number__squadron_control_patch","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SquadronControlUpdateRequest"}}}},"responses":{"200":{"description":"Squadron-control opt-out state updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SquadronControlResponse"},"example":{"device_serial_number":"TEST123456","squadron_control_opt_out":true}}}},"400":{"description":"Bad Request"},"404":{"description":"Device not found","content":{"application/json":{"example":{"detail":"Device with serial number 'TEST123456' not found"}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/sims/{sim_iccid}":{"post":{"tags":["devices_inventory"],"summary":"Link a SIM to a device","description":"Link a SIM to a device.\n\nThis endpoint links a SIM to a device. The device and SIM must exist in the system -\nif they don't, a 404 error will be returned.\nThe SIM must be a valid SIM and the device must be a valid device.","operationId":"create_device_sim_linking_api_v1_devices__device_serial_number__sims__sim_iccid__post","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}},{"name":"sim_iccid","in":"path","required":true,"schema":{"type":"string","title":"Sim Iccid"}}],"responses":{"204":{"description":"SIM successfully linked to device"},"400":{"description":"Bad Request"},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"404":{"description":"Device not found","content":{"application/json":{"example":{"detail":"Device with serial number 'TEST123456' not found"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["devices_inventory"],"summary":"Unlink a SIM from a device","description":"Unlink a SIM from a device.\n\nThis endpoint removes the link between a SIM and a device. If the device or\nSIM don't exist, a 404 error will be returned. If they exist but aren't\ncurrently linked, this is a no-op and still returns 204.","operationId":"delete_device_sim_linking_api_v1_devices__device_serial_number__sims__sim_iccid__delete","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}},{"name":"sim_iccid","in":"path","required":true,"schema":{"type":"string","title":"Sim Iccid"}}],"responses":{"204":{"description":"SIM successfully unlinked from device"},"400":{"description":"Bad Request"},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"404":{"description":"Device or SIM not found","content":{"application/json":{"example":{"detail":"Device with serial number 'TEST123456' not found"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/device-certificate-info":{"post":{"tags":["devices_inventory"],"summary":"Store device certificate information including certificates for devices that haven't been enrolled yet","operationId":"store_device_certificate_info_endpoint_api_v1_device_certificate_info_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceCertificateInfoRequest"}}},"required":true},"responses":{"201":{"description":"Device certificate information successfully stored","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceCertificateInfoResponse"},"example":{"device_serial_number":"TEST123456","certificate_fingerprint":"33cbeb9b86c45d26e69a6cc65ed2c60756c8590edbb0d036bba8437a242f2996","certificate_serial_number":"CERT123456","issued_at":"2025-07-16T08:00:00Z","id":"01234567-89ab-cdef-0123-456789abcdef"}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"S2S Bearer Token":[]}]}},"/api/v1/device-certificate-info/{certificate_fingerprint}/ack":{"post":{"tags":["devices_inventory"],"summary":"Acknowledge device certificate","operationId":"ack_device_certificate_endpoint_api_v1_device_certificate_info__certificate_fingerprint__ack_post","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"certificate_fingerprint","in":"path","required":true,"schema":{"type":"string","title":"Certificate Fingerprint"}}],"responses":{"200":{"description":"Device certificate acknowledged","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceCertificateInfoResponse"},"example":{"device_serial_number":"TEST123456","certificate_fingerprint":"33cbeb9b86c45d26e69a6cc65ed2c60756c8590edbb0d036bba8437a242f2996","certificate_serial_number":"CERT123456","issued_at":"2025-07-16T08:00:00Z","id":"01234567-89ab-cdef-0123-456789abcdef","acked_at":"2025-07-17T08:00:00Z"}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"404":{"description":"Device certificate not found","content":{"application/json":{"example":{"detail":{"error_slug":"CERTIFICATE_NOT_FOUND","message":"Device certificate not found.","certificate_fingerprint":"33cbeb9b86c45d26e69a6cc65ed2c60756c8590edbb0d036bba8437a242f2996"}}}}},"409":{"description":"Certificate acknowledgement window expired","content":{"application/json":{"example":{"detail":{"error_slug":"CERTIFICATE_ACKNOWLEDGE_EXPIRED","message":"Device certificate cannot be acknowledged: certificate is too old.","certificate_fingerprint":"33cbeb9b86c45d26e69a6cc65ed2c60756c8590edbb0d036bba8437a242f2996"}}}}},"410":{"description":"Device certificate has been revoked","content":{"application/json":{"example":{"detail":{"error_slug":"CERTIFICATE_REVOKED","message":"Device certificate has been revoked.","certificate_fingerprint":"33cbeb9b86c45d26e69a6cc65ed2c60756c8590edbb0d036bba8437a242f2996"}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/mdm-details":{"get":{"tags":["devices_inventory"],"summary":"Returns device mdm details by serial number.","operationId":"get_device_mdm_details_with_serial_number_api_v1_devices__device_serial_number__mdm_details_get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"200":{"description":"Device details retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceDetailsResponse"}}}},"404":{"description":"Device details not found","content":{"application/json":{"example":{"detail":{"message":"Device details not found.","extra":{"serial_number":"SN002"}}}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/squadron-intent":{"get":{"tags":["devices_inventory"],"summary":"Returns the squadron intent for a device by serial number.","operationId":"get_device_squadron_intent_api_v1_devices__device_serial_number__squadron_intent_get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"200":{"description":"Squadron intent retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SquadronIntent"}}}},"404":{"description":"Device or squadron intent not found."},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/reboot":{"post":{"tags":["devices_inventory"],"summary":"Reboots a device by serial number.","operationId":"send_reboot_command_to_mdm_api_v1_devices__device_serial_number__reboot_post","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"204":{"description":"Successful Response"},"200":{"description":"Device reboot command sent successfully."},"404":{"description":"Device details not found"},"400":{"description":"Device is offline and cannot be rebooted."},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/prepare-kitting":{"post":{"tags":["devices_inventory"],"summary":"Prepare terminal kitting info (key + url) by serial number.","operationId":"prepare_device_kitting_api_v1_devices__device_serial_number__prepare_kitting_post","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"200":{"description":"Kitting info prepared successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareDeviceKittingResponse"}}}},"404":{"description":"Device is not registered in CasHUB."},"400":{"description":"Device's MDM type does not support kitting."},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/reset":{"post":{"tags":["devices_inventory"],"summary":"Resets a device by serial number.","operationId":"send_reset_command_to_mdm_api_v1_devices__device_serial_number__reset_post","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"204":{"description":"Successful Response"},"404":{"description":"Device details not found"},"400":{"description":"Device is offline and cannot be reset."},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/resync":{"post":{"tags":["devices_inventory"],"summary":"Triggers a resync of all devices for a business location or a single device to the MDM.","operationId":"resync_api_v1_devices_resync_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResyncRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"404":{"description":"Business location or device not found"},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"S2S Bearer Token":[]}]}},"/api/v1/device-provisioning-results":{"post":{"tags":["devices_inventory"],"summary":"Creates device provisioning results.","operationId":"create_provisioning_results_api_v1_device_provisioning_results_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload","description":"Arbitrary JSON payload for device provisioning results"},"example":{"device_serial":"123456789","provisioning_status":"success","metadata":{"location":"store_001","timestamp":"2024-01-01T12:00:00Z"}}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceProvisioningResultsResponse"}}},"id":"01234567-89ab-cdef-0123-456789abcdef","device_id":"fedcba98-7654-3210-fedc-ba987654321","result_data":{"some":"data"},"created_at":"2025-07-22T20:22:07.506846Z","updated_at":"2025-07-22T20:22:07.506846Z"},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"S2S Bearer Token":[]},{"mTLS Device Serial Number":[]},{"mTLS Certificate Fingerprint":[]},{"mTLS Certificate Serial Number":[]}]}},"/api/v1/devices/{device_serial_number}/bypass-provisioning-results":{"post":{"tags":["devices_inventory"],"summary":"Creates a bypassed device provisioning results.","operationId":"create_bypassed_provisioning_results_api_v1_devices__device_serial_number__bypass_provisioning_results_post","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceProvisioningResultsResponse"}}},"id":"01234567-89ab-cdef-0123-456789abcdef","device_id":"fedcba98-7654-3210-fedc-ba987654321","result_data":{"some":"data"},"created_at":"2025-07-22T20:22:07.506846Z","updated_at":"2025-07-22T20:22:07.506846Z"},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/uninstall-app":{"post":{"tags":["devices_inventory"],"summary":"Queue an MDM uninstall command for an app on a device.","operationId":"uninstall_app_api_v1_devices__device_serial_number__uninstall_app_post","security":[{"S2S Bearer Token":[]},{"mTLS Device Serial Number":[]},{"mTLS Certificate Fingerprint":[]},{"mTLS Certificate Serial Number":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UninstallAppRequest"}}}},"responses":{"202":{"description":"Uninstall command queued in the device's MDM.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Uninstall App Api V1 Devices  Device Serial Number  Uninstall App Post"},"example":{"message":"Uninstall of com.spoton.copper queued for device TEST123456."}}}},"404":{"description":"Device not found.","content":{"application/json":{"example":{"detail":"Device not found with serial number TEST123456."}}}},"422":{"description":"Device MDM type does not support app uninstall.","content":{"application/json":{"example":{"detail":"MDM type eloview does not support app uninstall."}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}}}}},"/api/v1/devices/{device_serial_number}/spoton-lite/activate":{"post":{"tags":["devices_inventory"],"summary":"Queue SpotOn Lite activation of a Cashub SpotOn Lite device for a merchant.","description":"Queues activation of a Cashub SPOTON_LITE device that is assigned to a location, for the given merchant. A 202 means the activation was queued; poll the returned task_run_id for the outcome.","operationId":"activate_spoton_lite_device_api_v1_devices__device_serial_number__spoton_lite_activate_post","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateSpotOnLiteRequest"}}}},"responses":{"202":{"description":"Activation queued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateSpotOnLiteResponse"},"example":{"task_run_id":"0b9c3c1e-5f0e-4a8e-9d55-0d1d8f4e2a77"}}}},"404":{"description":"Device not found.","content":{"application/json":{"example":{"detail":"Device not found with serial number TEST123456."}}}},"409":{"description":"Device is not assigned to a location, or already has an activation in progress.","content":{"application/json":{"example":{"detail":"Device TEST123456 is not assigned to a location."}}}},"422":{"description":"Device is not a Cashub SPOTON_LITE device.","content":{"application/json":{"example":{"detail":"SpotOn Lite activation is only supported for Cashub SPOTON_LITE devices, not pax SPOTON_LITE."}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}}}}},"/api/v1/devices/{device_serial_number}/latest-provisioning-result":{"get":{"tags":["devices_inventory"],"summary":"Gets the latest device provisioning result.","operationId":"get_latest_provisioning_result_api_v1_devices__device_serial_number__latest_provisioning_result_get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceProvisioningResultsResponse"}}},"id":"01234567-89ab-cdef-0123-456789abcdef","device_id":"fedcba98-7654-3210-fedc-ba987654321","result_data":{"some":"data"},"created_at":"2025-07-22T20:22:07.506846Z","updated_at":"2025-07-22T20:22:07.506846Z"},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/heal-device-type":{"post":{"tags":["devices_inventory"],"summary":"Heals the device type by checking the device details and updating the device type.","operationId":"heal_device_type_by_serial_number_api_v1_devices__device_serial_number__heal_device_type_post","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"200":{"description":"Device type healed successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealDeviceTypeResponse"},"example":{"device_type":"EXPRESS_POS","message":"Device type healed successfully."}}}},"400":{"description":"Device's MDM does not support heal_device_type.","content":{"application/json":{"example":{"detail":"MDM does not support heal_device_type for device SN002: MDM type ZERO_TOUCH does not support heal_device_type operation."}}}},"404":{"description":"Device not found","content":{"application/json":{"example":{"detail":"Device not found with serial number SN002."}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/rejoin-fleet":{"post":{"tags":["devices_inventory"],"summary":"Ensures a device is in its squadron's MDM group, scheduling a move job if not.","operationId":"rejoin_fleet_by_serial_number_api_v1_devices__device_serial_number__rejoin_fleet_post","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"200":{"description":"Rejoin-fleet check completed. When the device is outside its fleet, a rejoin_fleet device job is scheduled (job_id / process_at_utc) to perform the move; when it is already in one of its wave's groups, no job is created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejoinFleetResult"},"example":{"moved":false,"identifier":{"mdm_type":"eloview","device_type":"AX","cell":"c1","wave":"general"},"previous_mdm_group_id":"old-group-id","target_mdm_group_id":"new-group-id","target_group_name":"AX-C1-GENERAL","job_id":"01234567-89ab-cdef-0123-456789abcdef","process_at_utc":"2026-07-15T04:05:00Z"}}}},"400":{"description":"Device's MDM does not support rejoin_fleet."},"404":{"description":"Device not found, not registered in its MDM, or its squadron cannot be resolved."},"409":{"description":"No wave group has remaining capacity to place the device in, or the device already has a job in progress."},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/reassign-preflight":{"get":{"tags":["devices_inventory"],"summary":"Checks whether a device can be reassigned to a business location.","description":"Score a reassignment to ``blid`` without applying it.\n\nIntended to be called before the unassign/assign pair so a device is never\nstranded by a reassignment whose target group doesn't exist. A device whose\nMDM has no squadron groups is still `allowed` — it just reports\n`group_change_required=False`.","operationId":"reassign_preflight_by_serial_number_api_v1_devices__device_serial_number__reassign_preflight_get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}},{"name":"blid","in":"query","required":true,"schema":{"$ref":"#/components/schemas/BLID"}}],"responses":{"200":{"description":"Preflight completed. Check `allowed` before reassigning: when False, `reason` explains why the device cannot be placed at the target location and should be surfaced to the user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReassignPreflightResult"}}}},"404":{"description":"Device not found."},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/detect-misconfiguration":{"get":{"tags":["devices_inventory"],"summary":"Gets the latest device misconfiguration result.","description":"Compares the device against its MDM group live. When a verdict can be computed it is also written to the device drift cache, replacing the device's cached verdict unless that one was read more recently.","operationId":"get_misconfiguration_api_v1_devices__device_serial_number__detect_misconfiguration_get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"200":{"description":"Device misconfiguration results retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MisconfigurationDetails"},"example":{"data":{"result":{"performance":"10.1ms","rule_brightness":{"status":"ok","message":"Settings match: brightness=75"},"rule_volume":{"status":"error","message":"Mismatch: device=50, group=75"}}}}}}},"400":{"description":"Device's MDM does not support misconfiguration analysis.","content":{"application/json":{"example":{"detail":{"message":"Device's MDM does not support misconfiguration analysis.","extra":{"serial_number":"ABC123"}}}}}},"404":{"description":"Device not found.","content":{"application/json":{"example":{"detail":{"message":"Device not found.","extra":{"serial_number":"ABC123"}}}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/okta-authorized":{"post":{"tags":["devices_inventory"],"summary":"Records that a device has been authorized via Okta.","description":"Record that a device has been authorized via Okta.\n\nThis endpoint is called by the device-authentication service when a device\nsuccessfully authorizes. The timestamp can be used to determine eligibility\nfor in-field certificate enrollment within a configured time window.","operationId":"record_device_okta_authorized_api_v1_devices__device_serial_number__okta_authorized_post","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"200":{"description":"Device authorization timestamp recorded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceOktaAuthorizedResponse"},"example":{"device_serial_number":"TEST123456","device_last_authorized_at":"2026-02-05T12:35:00Z"}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"404":{"description":"Device not found","content":{"application/json":{"example":{"detail":{"message":"Device not found.","extra":{"serial_number":"TEST123456"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/os-update":{"post":{"tags":["devices_inventory"],"summary":"Triggers an OS update for a device if eligible.","description":"Trigger an OS update for a device.\n\nThis endpoint checks that:\n1. The device is in a provisioning group.\n2. The device's current OS version requires updating based on the OS policy.\n\nIf both conditions are met, the OS update task is dispatched.","operationId":"trigger_device_os_update_api_v1_devices__device_serial_number__os_update_post","security":[{"Device API Key":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"202":{"description":"OS update triggered successfully.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Trigger Device Os Update Api V1 Devices  Device Serial Number  Os Update Post"},"example":{"message":"OS update triggered for device TEST123456."}}}},"401":{"description":"Invalid or missing device API key.","content":{"application/json":{"example":{"detail":"Invalid or missing device API key"}}}},"404":{"description":"Device not found in EloView.","content":{"application/json":{"example":{"detail":"Device not found in EloView."}}}},"409":{"description":"Device is not eligible for OS update.","content":{"application/json":{"example":{"detail":"Device is not in a provisioning group."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/jobs":{"get":{"tags":["device_jobs"],"summary":"List all jobs for a device.","description":"Fetches the device by serial number, then returns all jobs for that device ordered by newest first.","operationId":"list_device_jobs_api_v1_devices__device_serial_number__jobs_get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"responses":{"200":{"description":"Jobs retrieved successfully.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeviceJobResponse"},"title":"Response List Device Jobs Api V1 Devices  Device Serial Number  Jobs Get"}}}},"404":{"description":"Device not found","content":{"application/json":{"example":{"detail":"Device not found with serial number TEST123456."}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["device_jobs"],"summary":"Create a device job.","description":"Creates a new device job for the given device. The job_type determines validation rules and how job_arguments is interpreted. For example, a 'device_type_change' job requires an eloview device and job_arguments must include 'new_device_type', while an 'apply_configuration' job takes 'policy_keys' and 'software_names' naming which of the device's reported configuration differences to write back from its MDM group.","operationId":"create_device_job_endpoint_api_v1_devices__device_serial_number__jobs_post","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeviceJobRequest"}}}},"responses":{"201":{"description":"Job created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceJobResponse"}}}},"400":{"description":"Validation failed for the given job_type and arguments.","content":{"application/json":{"example":{"detail":"Device with serial number 'TEST123456' is not an eloview device. Only eloview devices support device type change jobs."}}}},"404":{"description":"Device not found","content":{"application/json":{"example":{"detail":"Device not found with serial number TEST123456."}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/devices/{device_serial_number}/job/{job_id}/force":{"post":{"tags":["device_jobs"],"summary":"[Deprecated] Force execute a software push job for a device.","description":"**Deprecated**: Use `POST /jobs/{job_id}/force` instead.\n\nForces immediate execution of a software/device type change for a device. Currently executes the action directly. In future iterations, this will interact with a job queue system where job_id references a pending job.","operationId":"force_software_push_job_api_v1_devices__device_serial_number__job__job_id__force_post","deprecated":true,"security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"device_serial_number","in":"path","required":true,"schema":{"$ref":"#/components/schemas/DeviceSerialNumber"}},{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForceSoftwarePushRequest"}}}},"responses":{"202":{"description":"Software push job accepted and initiated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Force Software Push Job Api V1 Devices  Device Serial Number  Job  Job Id  Force Post"}}}},"404":{"description":"Device not found."},"400":{"description":"Operation not supported."},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/fis-pax-terminal-data/":{"get":{"tags":["fis_pax_terminal_data"],"summary":"Gets FIS/PAX terminal data by merchant ID or device serial number.","operationId":"get_fis_terminal_data_route_api_v1_fis_pax_terminal_data__get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"merchant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Id"}},{"name":"serial_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serial Number"}}],"responses":{"200":{"description":"List of FIS/PAX terminal data records.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FisPaxTerminalDataResponse"},"title":"Response Get Fis Terminal Data Route Api V1 Fis Pax Terminal Data  Get"}}}},"422":{"description":"Must provide either merchant_id or serial_number","content":{"application/json":{"example":{"detail":"Must provide either merchant_id or serial_number parameter."}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}}}}},"/api/v1/jobs/{job_id}":{"get":{"tags":["jobs"],"summary":"Get a specific job.","description":"Fetches a specific job by job_id.","operationId":"get_job_api_v1_jobs__job_id__get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Job retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceJobResponse"}}}},"404":{"description":"Job not found","content":{"application/json":{"example":{"detail":"Job not found with id 01234567-89ab-cdef-0123-456789abcdef."}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["jobs"],"summary":"Cancel a device job.","description":"Cancels a pending device job by setting its status to CANCELLED. Only jobs with PENDING status can be cancelled.","operationId":"cancel_job_api_v1_jobs__job_id__delete","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Job cancelled successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceJobResponse"}}}},"400":{"description":"Job cannot be cancelled (not in pending status).","content":{"application/json":{"example":{"detail":"Cannot cancel job with status 'in_progress'. Only pending jobs can be cancelled."}}}},"404":{"description":"Job not found","content":{"application/json":{"example":{"detail":"Job not found with id 01234567-89ab-cdef-0123-456789abcdef."}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}/force":{"post":{"tags":["jobs"],"summary":"Force execute a job.","description":"Forces immediate execution of a pending job. Looks up the job by job_id and triggers immediate execution, bypassing the scheduled process_at_utc time and the scheduler's processing window. The response `status` reports the outcome: `success`, `pending` (a multi-tick job rescheduled itself), or `error` (the handler failed; see the job's `job_arguments.last_reason`).","operationId":"force_execute_job_api_v1_jobs__job_id__force_post","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"202":{"description":"Job executed; `status` carries the outcome, including `error` on handler failure.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Force Execute Job Api V1 Jobs  Job Id  Force Post"}}}},"404":{"description":"Job not found."},"400":{"description":"Operation not supported."},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/locations/{blid}/wave":{"get":{"tags":["locations"],"summary":"Get the wave assignment for a location","description":"Return the current deployment wave for the location with the given BLID.","operationId":"get_location_wave_api_v1_locations__blid__wave_get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"blid","in":"path","required":true,"schema":{"$ref":"#/components/schemas/BLID"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationWaveResponse"}}},"blid":"BL-1234-5678-9ABC","wave":"general"},"404":{"description":"Device location not found","content":{"application/json":{"example":{"detail":{"message":"Device location not found.","extra":{"blid":"BL-1234-5678-9ABC"}}}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["locations"],"summary":"Change the wave assignment for a location","description":"Updates the location-level deployment wave (early | general | late). Devices at the location that are now outside their new wave's squadron groups get a rejoin_fleet job, scheduled for the merchant's batch close. Re-sending the current wave changes nothing but re-evaluates the devices.","operationId":"update_location_wave_api_v1_locations__blid__wave_patch","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"blid","in":"path","required":true,"schema":{"$ref":"#/components/schemas/BLID"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationWaveUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationWaveResponse"}}},"blid":"BL-1234-5678-9ABC","wave":"early"},"400":{"description":"Bad Request"},"404":{"description":"Device location not found","content":{"application/json":{"example":{"detail":{"message":"Device location not found.","extra":{"blid":"BL-1234-5678-9ABC"}}}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/locations/{blid}/audit":{"get":{"tags":["locations"],"summary":"Get the audit log for a location","description":"Returns the location-level audit log entries (e.g. wave changes) for the given BLID, newest first.","operationId":"get_location_audit_api_v1_locations__blid__audit_get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"blid","in":"path","required":true,"schema":{"$ref":"#/components/schemas/BLID"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LocationAuditResponse"},"title":"Response Get Location Audit Api V1 Locations  Blid  Audit Get"}}}},"404":{"description":"Device location not found","content":{"application/json":{"example":{"detail":{"message":"Device location not found.","extra":{"blid":"BL-1234-5678-9ABC"}}}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/networks-by-location/{blid}":{"get":{"tags":["networks"],"summary":"Returns networks from given location.","operationId":"get_networks_by_location_endpoint_api_v1_networks_by_location__blid__get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"blid","in":"path","required":true,"schema":{"$ref":"#/components/schemas/BLID"}}],"responses":{"200":{"description":"List of networks","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NetworkDetail"},"title":"Response Get Networks By Location Endpoint Api V1 Networks By Location  Blid  Get"},"example":[{"network_id":"1234567890","network_name":"Network 1","vendor":"Vendor 1"},{"network_id":"9876543210","network_name":"Network 2","vendor":"Vendor 2"}]}}},"404":{"description":"Network location not found","content":{"application/json":{"example":{"detail":{"message":"Network location not found.","extra":{"blid":"BL-123456"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/networks/{network_id}":{"get":{"tags":["networks"],"summary":"Returns network details by id.","operationId":"get_network_api_v1_networks__network_id__get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"network_id","in":"path","required":true,"schema":{"type":"string","title":"Network Id"}}],"responses":{"200":{"description":"Network details retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkDetail"},"example":{"network_id":"01234567-89ab-cdef-0123-456789abcdef","network_name":"Network 1","vendor":"Vendor 1","location_id":"01234567-89ab-cdef-0123-456789abcdef","location":{"id":"01234567-89ab-cdef-0123-456789abcdef","blid":"BL-ABCD-1234-DCBA","created_at":"2023-01-01T00:00:00Z","updated_at":"2023-01-01T00:00:00Z"}}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:read"],"provided_scopes":["default"]}}}}},"404":{"description":"Network not found","content":{"application/json":{"example":{"detail":{"message":"Network not found.","extra":{"network_id":"01234567-89ab-cdef-0123-456789abcdef"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/fleet/reconcile":{"post":{"tags":["fleet"],"summary":"Ensure squadron intent for the given wave_identifier","description":"Sets the desired software configuration for the given wave_identifier. Creates a new intent if none exists, or updates existing ones. ``software`` is a list of items (each with ``name`` / ``version`` / ``type`` / ``mode``). The item's ``mode`` (one of ``foreground`` | ``background`` | ``hidden`` | ``uninstall`` — see fleet-controller ADR-0004) describes how the MDM should treat it; at most one item per squadron may carry ``mode='foreground'`` (CasHub squadrons may carry one per 2K/4K generation). ``policy`` is an optional opaque per-MDM payload. Pre-rollout CasHub clients may still post the legacy ``config: {app_name, app_version}`` field instead of ``software`` — a back-compat shim wraps it into a one-item list with ``mode='foreground'``.","operationId":"reconcile_api_v1_fleet_reconcile_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetReconcileRequest"}}},"required":true},"responses":{"200":{"description":"Squadron intent created or updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SquadronIntent"},"examples":{"cashub_single":{"summary":"CasHub squadron with one foreground app","value":{"identifier":{"mdm_type":"cashub","device_type":"RPOSA_STANDALONE","cell":"c1","wave":"early"},"software":[{"name":"com.spoton.rpos.android","version":"1.8.1","type":"app","mode":"foreground"}]}},"cashub_multi":{"summary":"CasHub squadron with a foreground app + a background app","value":{"identifier":{"mdm_type":"cashub","device_type":"RPOSA_STANDALONE","cell":"c1","wave":"early"},"software":[{"name":"com.spoton.rpos.android","version":"1.8.1","type":"app","mode":"foreground"},{"name":"com.spoton.print.helper","version":"1.4.0","type":"app","mode":"background"}]}},"eloview_mixed":{"summary":"EloView squadron with a foreground bundle + a hidden APK","value":{"identifier":{"mdm_type":"eloview","device_type":"AX","cell":"c1","wave":"general"},"software":[{"name":"spoton-ax-launcher-1.12.0","version":"","type":"apk","mode":"hidden"},{"name":"spoton-ax-bundle-2026q2","version":"","type":"bundle","mode":"foreground"}]}},"legacy_cashub":{"summary":"Legacy FleetGroup CasHub shim (auto-wrapped)","value":{"identifier":{"mdm_type":"cashub","device_type":"RPOSA_STANDALONE","cell":"c1","wave":"early"},"config":{"app_name":"com.spoton.rpos.android","app_version":"1.8.1"}}}}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["fleet:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"S2S Bearer Token":[]}]}},"/api/v1/fleet/status":{"post":{"tags":["fleet"],"summary":"Get current squadron intent for the given wave_identifier","description":"Returns the squadron's current software list under ``software`` (list of items with ``name`` / ``version`` / ``type`` / ``mode``). At most one item is the active push target (``mode='foreground'``), except for CasHub squadrons, which may carry one per 2K/4K generation. ``policy`` echoes the opaque per-MDM policy payload when one is persisted.","operationId":"get_status_api_v1_fleet_status_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusRequest"}}},"required":true},"responses":{"200":{"description":"Status retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SquadronIntent"},"examples":{"cashub":{"summary":"CasHub status","value":{"identifier":{"mdm_type":"cashub","device_type":"RPOSA_STANDALONE","cell":"c1","wave":"early"},"software":[{"name":"com.spoton.rpos.android","version":"1.8.1","type":"app","mode":"foreground"}]}},"eloview":{"summary":"EloView status","value":{"identifier":{"mdm_type":"eloview","device_type":"AX","cell":"c1","wave":"general"},"software":[{"name":"spoton-ax-launcher-1.12.0","version":"","type":"apk","mode":"foreground"}]}}}}}},"404":{"description":"No squadron intent found for the given wave_identifier."},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["fleet:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"S2S Bearer Token":[]}]}},"/api/v1/fleet/squadron-intents":{"get":{"tags":["fleet"],"summary":"Get all squadron intents","description":"Returns all squadron intent configurations across all wave identifiers. Each entry includes ``has_drift`` — true when at least one MDM group cache row for that wave identifier has detected configuration drift — ``device_count`` — the total number of devices across all MDM groups for that wave identifier (null when no cache data exists) — and ``drifted_device_count`` — how many of those devices are drifted (null when the wave has not been swept).","operationId":"get_all_squadron_intent_records_api_v1_fleet_squadron_intents_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SquadronIntentSummary"},"type":"array","title":"Response Get All Squadron Intent Records Api V1 Fleet Squadron Intents Get"}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["fleet:read"],"provided_scopes":["default"]}}}}}},"security":[{"S2S Bearer Token":[]}]}},"/api/v1/fleet/squadron-intents/report":{"post":{"tags":["fleet"],"summary":"Get full report (intent + MDM cache + execution history) for one wave identifier","description":"Aggregates the desired :class:`SquadronIntent`, the actual downstream MDM group state from ``mdm_groups_cache`` (one row per group, including the ZenEngine drift diff under ``last_config_delta``), and the most recent execution-log rows for the given wave identifier. ``execution_history_limit`` defaults to 50 and is capped at 200; rows are returned newest first. Returns 404 when no intent matches.","operationId":"get_squadron_intent_report_api_v1_fleet_squadron_intents_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SquadronIntentReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SquadronIntentReport"}}}},"404":{"description":"No squadron intent found for the given wave_identifier."},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["fleet:read"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"S2S Bearer Token":[]}]}},"/api/v1/fleet/squadron-intents/sync":{"post":{"tags":["fleet"],"summary":"Trigger a full squadron-intent MDM sync for a single wave","description":"Enqueues the sync task (refresh cache -> save deltas -> execute drift when EXECUTE_CACHE_DRIFTS_ENABLED is true) scoped to the wave identified in the request body and returns immediately. This manual sync bypasses the DRIFT_EXECUTION_WINDOW gate that limits the scheduled cron, so drift corrections are pushed immediately. A 202 means the job was accepted; poll the returned task_run_id for completion status.","operationId":"sync_squadron_intents_api_v1_fleet_squadron_intents_sync_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncRequest"}}},"required":true},"responses":{"202":{"description":"Squadron intent sync enqueued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskAcceptedResponse"}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"S2S Bearer Token":[]}]}},"/api/v1/fleet/squadron-intents/refresh-cache":{"post":{"tags":["fleet"],"summary":"Trigger a cache-only refresh for a single wave","description":"Enqueues a lightweight task that runs the cache-refresh and delta-computation steps of the sync for the wave identified in the request body so the cached group state surfaced to operators reflects the latest EloView / CasHub reality. A 202 means the job was accepted; poll the returned task_run_id for completion status.","operationId":"refresh_squadron_intent_cache_api_v1_fleet_squadron_intents_refresh_cache_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncRequest"}}},"required":true},"responses":{"202":{"description":"Squadron intent cache refresh enqueued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskAcceptedResponse"}}}},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"S2S Bearer Token":[]}]}},"/api/v1/fleet/squadron-intents/calculate-device-drift":{"post":{"tags":["fleet"],"summary":"Trigger the per-device misconfiguration sweep for a single wave","description":"Enqueues a read-only sweep that compares every device in the wave's MDM groups against the group it sits in, running the same misconfiguration ruleset as the single-device report and caching each verdict in ``mdm_device_drift_cache``. Nothing is pushed downstream. The sweep walks paged MDM listings under a deliberate throttle, so a large wave takes minutes; poll the returned task_run_id for completion. Only one sweep may run fleet-wide at a time — a second trigger (for this or any other wave) is rejected with 409 rather than queued.","operationId":"calculate_device_drift_api_v1_fleet_squadron_intents_calculate_device_drift_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncRequest"}}},"required":true},"responses":{"202":{"description":"Device drift calculation enqueued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskAcceptedResponse"}}}},"409":{"description":"A device drift calculation is already in progress."},"403":{"description":"insufficient privileges","content":{"application/json":{"example":{"detail":{"error_slug":"insufficient_scope","message":"You do not have the required permissions to perform this action.","required_scopes":["device:write"],"provided_scopes":["default"]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"S2S Bearer Token":[]}]}},"/api/v1/rustdesk/devices/{rustdesk_id}":{"get":{"tags":["rustdesk"],"summary":"Returns rustdesk device details by id.","operationId":"get_rustdesk_device_api_v1_rustdesk_devices__rustdesk_id__get","security":[{"S2S Bearer Token":[]}],"parameters":[{"name":"rustdesk_id","in":"path","required":true,"schema":{"type":"string","title":"Rustdesk Id"}}],"responses":{"200":{"description":"Rustdesk device details retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RustdeskDeviceSearchResponse"}}}},"403":{"description":"insufficient privileges"},"404":{"description":"Rustdesk device not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rustdesk/users/sync":{"post":{"tags":["rustdesk"],"summary":"Ensure a RustDesk user is in the correct parent group (warn-only).","description":"Idempotently ensures the user identified by ``email`` is a member of ``parent_group_name`` and that the parent group's ``access_to`` additively includes the given ``agent_ids`` user groups. If the user does not exist in RustDesk, returns ``in_rustdesk=false`` without any writes (warn-only).","operationId":"sync_rustdesk_user_endpoint_api_v1_rustdesk_users_sync_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncRustdeskUserRequest"}}},"required":true},"responses":{"200":{"description":"Sync evaluated; see in_rustdesk.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncRustdeskUserResult"}}}},"403":{"description":"insufficient privileges"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"S2S Bearer Token":[]}]}},"/api/v2/enroll/":{"post":{"tags":["devices"],"summary":"Enrolls device in OKTA and ConnectDB, and returns OKTA credentials.","operationId":"enroll_api_v2_enroll__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceTopology"}}},"required":true},"responses":{"200":{"description":"OKTA Credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OKTACredentials"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"S2S Bearer Token":[]},{"mTLS Device Serial Number":[]},{"mTLS Certificate Fingerprint":[]},{"mTLS Certificate Serial Number":[]}]}},"/api/v2/merchants/":{"get":{"tags":["merchants"],"summary":"Gets list of merchants/locations assigned to device by certificate.","operationId":"get_merchants_api_v2_merchants__get","responses":{"200":{"description":"List of Topologies(merchants/locations) for device.","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/TopologyDetailWithSignature"},"type":"array","title":"Response Get Merchants Api V2 Merchants  Get"}}}}},"security":[{"S2S Bearer Token":[]},{"mTLS Device Serial Number":[]},{"mTLS Certificate Fingerprint":[]},{"mTLS Certificate Serial Number":[]}]}},"/api/v2/venues/{venue_id}/stations/":{"get":{"tags":["venues"],"summary":"Get merchant stations associated with the venue from EUM.","operationId":"get_merchant_stations_api_v2_venues__venue_id__stations__get","security":[{"S2S Bearer Token":[]},{"mTLS Device Serial Number":[]},{"mTLS Certificate Fingerprint":[]},{"mTLS Certificate Serial Number":[]}],"parameters":[{"name":"venue_id","in":"path","required":true,"schema":{"type":"string","title":"Venue Id"}},{"name":"shard_id","in":"query","required":true,"schema":{"type":"string","title":"Shard Id"}}],"responses":{"200":{"description":"List of venue stations. subvendors and vendors.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ATTStatusAndUsageDataResult":{"properties":{"status":{"$ref":"#/components/schemas/ATTStatusType"},"usage":{"type":"integer","title":"Usage"}},"type":"object","required":["status","usage"],"title":"ATTStatusAndUsageDataResult"},"ATTStatusType":{"type":"string","enum":["ACTIVATED","DEACTIVATED","UNKNOWN"],"title":"ATTStatusType"},"ActivateSpotOnLiteRequest":{"properties":{"merchant_id":{"$ref":"#/components/schemas/MerchantID"}},"type":"object","required":["merchant_id"],"title":"ActivateSpotOnLiteRequest","description":"Request to activate a SpotOn Lite device for a merchant.\n\nThe merchant isn't checked against the device's location; callers are expected to pick one from it."},"ActivateSpotOnLiteResponse":{"properties":{"task_run_id":{"type":"string","title":"Task Run Id"}},"type":"object","required":["task_run_id"],"title":"ActivateSpotOnLiteResponse","description":"Response for a queued SpotOn Lite activation."},"Address":{"properties":{"street1":{"type":"string","title":"Street1"},"region":{"type":"string","title":"Region"},"city":{"type":"string","title":"City"},"postal_code":{"type":"string","title":"Postal Code"},"country":{"type":"string","title":"Country"}},"type":"object","required":["street1","region","city","postal_code","country"],"title":"Address"},"AdminPassword":{"properties":{"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"quickAccessSettings":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Quickaccesssettings"}},"type":"object","title":"AdminPassword","description":"Pydantic model for the admin password setting."},"AppEnforcement":{"properties":{"rev":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rev"},"uninstall":{"items":{"$ref":"#/components/schemas/AppItem"},"type":"array","title":"Uninstall","default":[]},"install":{"items":{"$ref":"#/components/schemas/AppItem"},"type":"array","title":"Install","default":[]},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"}},"type":"object","title":"AppEnforcement"},"AppInfo":{"properties":{"application_name":{"type":"string","title":"Application Name"}},"type":"object","required":["application_name"],"title":"AppInfo","description":"Pydantic model for app information"},"AppItem":{"properties":{"adminAccess":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Adminaccess"},"apkPackageName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Apkpackagename"},"visibilityStatus":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Visibilitystatus"},"contentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contentid"},"downloadUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Downloadurl"},"contentType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contenttype"}},"type":"object","title":"AppItem"},"BLID":{"type":"string","pattern":"^BL(-[0-9A-F]{4}){3}$","description":"Business Location ID","examples":["BL-E001-A001-0001"]},"CashubCombinedDeviceDetails":{"properties":{"terminal_info":{"$ref":"#/components/schemas/TerminalDetails"},"diagnostic":{"anyOf":[{"$ref":"#/components/schemas/TerminalDiagnosticData"},{"type":"null"}]},"certified":{"type":"boolean","title":"Certified"}},"type":"object","required":["terminal_info","diagnostic","certified"],"title":"CashubCombinedDeviceDetails","description":"Combined terminal info and diagnostic data for MDM details response."},"CreateDeviceJobRequest":{"properties":{"job_type":{"$ref":"#/components/schemas/DeviceJobType"},"process_at_utc":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Process At Utc"},"job_arguments":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Job Arguments"}},"type":"object","required":["job_type"],"title":"CreateDeviceJobRequest","description":"Request to create a device job. The job_arguments contents are specific to the job_type."},"CurrentPlayingContent":{"properties":{"apk_package_name":{"type":"string","title":"Apk Package Name"},"content_status":{"type":"string","title":"Content Status"},"apk_version":{"type":"string","title":"Apk Version"},"content_type":{"type":"string","title":"Content Type"},"content_playing_status":{"type":"boolean","title":"Content Playing Status"},"application_name":{"type":"string","title":"Application Name"}},"type":"object","required":["apk_package_name","content_status","apk_version","content_type","content_playing_status","application_name"],"title":"CurrentPlayingContent","description":"Pydantic model for current playing content"},"DeviceAuditAnnotateRequest":{"properties":{"note":{"type":"string","title":"Note"},"actor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor"}},"type":"object","required":["note"],"title":"DeviceAuditAnnotateRequest","description":"Request to create DeviceAudit annotation entry."},"DeviceAuditResponse":{"properties":{"device_serial_number":{"$ref":"#/components/schemas/DeviceSerialNumber"},"event_type":{"$ref":"#/components/schemas/EventType"},"actor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor"},"event_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Event Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["device_serial_number","event_type","created_at"],"title":"DeviceAuditResponse","description":"Response to Create or Fetch DeviceAudit logs."},"DeviceCertificateInfoRequest":{"properties":{"device_serial_number":{"$ref":"#/components/schemas/DeviceSerialNumber"},"certificate_fingerprint":{"type":"string","title":"Certificate Fingerprint"},"certificate_serial_number":{"type":"string","title":"Certificate Serial Number"},"issued_at":{"type":"string","format":"date-time","title":"Issued At"},"legacy_auto_ack":{"type":"boolean","title":"Legacy Auto Ack","default":false}},"type":"object","required":["device_serial_number","certificate_fingerprint","certificate_serial_number","issued_at"],"title":"DeviceCertificateInfoRequest","description":"Request to store device certificate information."},"DeviceCertificateInfoResponse":{"properties":{"device_serial_number":{"$ref":"#/components/schemas/DeviceSerialNumber"},"certificate_fingerprint":{"type":"string","title":"Certificate Fingerprint"},"certificate_serial_number":{"type":"string","title":"Certificate Serial Number"},"issued_at":{"type":"string","format":"date-time","title":"Issued At"},"id":{"type":"string","format":"uuid","title":"Id"},"acked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Acked At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"}},"type":"object","required":["device_serial_number","certificate_fingerprint","certificate_serial_number","issued_at","id"],"title":"DeviceCertificateInfoResponse","description":"Response for stored device certificate information."},"DeviceDetail":{"properties":{"device_serial_number":{"$ref":"#/components/schemas/DeviceSerialNumber"},"device_type":{"$ref":"#/components/schemas/DeviceType"},"mac_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mac Address"},"model_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Number"},"mdm_type":{"anyOf":[{"$ref":"#/components/schemas/MDMType"},{"type":"null"}]},"mdm_device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mdm Device Id"},"device_nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Nickname"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"rustdesk_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rustdesk Id"},"wave":{"anyOf":[{"$ref":"#/components/schemas/device_management__entities__device__Wave"},{"type":"null"}]},"blid":{"anyOf":[{"$ref":"#/components/schemas/BLID"},{"type":"null"}]},"provisioned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Provisioned"},"squadron_control_opt_out":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Squadron Control Opt Out"}},"type":"object","required":["device_serial_number","device_type"],"title":"DeviceDetail","description":"Detailed device information."},"DeviceDetailWithCertificate":{"properties":{"device_serial_number":{"$ref":"#/components/schemas/DeviceSerialNumber"},"device_type":{"$ref":"#/components/schemas/DeviceType"},"mac_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mac Address"},"model_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Number"},"mdm_type":{"anyOf":[{"$ref":"#/components/schemas/MDMType"},{"type":"null"}]},"mdm_device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mdm Device Id"},"device_nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Nickname"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"rustdesk_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rustdesk Id"},"wave":{"anyOf":[{"$ref":"#/components/schemas/device_management__entities__device__Wave"},{"type":"null"}]},"blid":{"anyOf":[{"$ref":"#/components/schemas/BLID"},{"type":"null"}]},"provisioned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Provisioned"},"squadron_control_opt_out":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Squadron Control Opt Out"},"linked_sims":{"items":{"$ref":"#/components/schemas/DeviceDetail"},"type":"array","title":"Linked Sims","default":[]},"has_configuration_drift":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Configuration Drift"},"certificate_fingerprint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Certificate Fingerprint"},"certificate_serial_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Certificate Serial Number"}},"type":"object","required":["device_serial_number","device_type","certificate_fingerprint","certificate_serial_number"],"title":"DeviceDetailWithCertificate"},"DeviceDetailWithSims":{"properties":{"device_serial_number":{"$ref":"#/components/schemas/DeviceSerialNumber"},"device_type":{"$ref":"#/components/schemas/DeviceType"},"mac_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mac Address"},"model_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Number"},"mdm_type":{"anyOf":[{"$ref":"#/components/schemas/MDMType"},{"type":"null"}]},"mdm_device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mdm Device Id"},"device_nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Nickname"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"rustdesk_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rustdesk Id"},"wave":{"anyOf":[{"$ref":"#/components/schemas/device_management__entities__device__Wave"},{"type":"null"}]},"blid":{"anyOf":[{"$ref":"#/components/schemas/BLID"},{"type":"null"}]},"provisioned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Provisioned"},"squadron_control_opt_out":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Squadron Control Opt Out"},"linked_sims":{"items":{"$ref":"#/components/schemas/DeviceDetail"},"type":"array","title":"Linked Sims","default":[]},"has_configuration_drift":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Configuration Drift"}},"type":"object","required":["device_serial_number","device_type"],"title":"DeviceDetailWithSims"},"DeviceDetailsResponse":{"properties":{"mdm_device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mdm Device Id"},"mdm_type":{"type":"string","title":"Mdm Type"},"errors":{"items":{},"type":"array","title":"Errors"},"data":{"additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/EloviewDeviceDetailsDataResult"},{"$ref":"#/components/schemas/ATTStatusAndUsageDataResult"},{"$ref":"#/components/schemas/CashubCombinedDeviceDetails"},{"$ref":"#/components/schemas/PaxstoreDeviceDetailsDataResult"},{"$ref":"#/components/schemas/EeroGatewayDetails"},{"$ref":"#/components/schemas/EeroAccessPointDetails"}]},"type":"object","title":"Data"}},"type":"object","required":["mdm_device_id","mdm_type","errors","data"],"title":"DeviceDetailsResponse","description":"Aggregated MDM details response for a single device."},"DeviceInventoryRequest":{"properties":{"device_serial_number":{"$ref":"#/components/schemas/DeviceSerialNumber"},"device_type":{"$ref":"#/components/schemas/DeviceType"},"mac_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mac Address"},"model_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Number"},"mdm_type":{"anyOf":[{"$ref":"#/components/schemas/MDMType"},{"type":"null"}]},"mdm_device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mdm Device Id"},"device_nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Nickname"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"rustdesk_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rustdesk Id"},"wave":{"anyOf":[{"$ref":"#/components/schemas/device_management__entities__device__Wave"},{"type":"null"}]},"blid":{"anyOf":[{"$ref":"#/components/schemas/BLID"},{"type":"null"}]},"provisioned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Provisioned"},"squadron_control_opt_out":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Squadron Control Opt Out"},"merchant_id":{"anyOf":[{"$ref":"#/components/schemas/MerchantID"},{"type":"null"}]},"provisioning_certification":{"anyOf":[{"$ref":"#/components/schemas/ProvisioningCertification"},{"type":"null"}]}},"type":"object","required":["device_serial_number","device_type"],"title":"DeviceInventoryRequest","description":"Request to create or update device inventory.\n\nIncludes merchant_id for PAX device provisioning - this field is only used\non input and is not returned in responses.\n\nprovisioning_certification selects the warehouse provisioning track for\nCasHub (Castles) devices: send ``\"provisioning_certification\": \"certified\"``\nfor the certified (secure key) track, omit it otherwise - device\nmanagement assumes uncertified."},"DeviceInventoryResponse":{"properties":{"device_serial_number":{"$ref":"#/components/schemas/DeviceSerialNumber"},"device_type":{"$ref":"#/components/schemas/DeviceType"},"mac_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mac Address"},"model_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Number"},"mdm_type":{"anyOf":[{"$ref":"#/components/schemas/MDMType"},{"type":"null"}]},"mdm_device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mdm Device Id"},"device_nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Nickname"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"rustdesk_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rustdesk Id"},"wave":{"anyOf":[{"$ref":"#/components/schemas/device_management__entities__device__Wave"},{"type":"null"}]},"blid":{"anyOf":[{"$ref":"#/components/schemas/BLID"},{"type":"null"}]},"provisioned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Provisioned"},"squadron_control_opt_out":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Squadron Control Opt Out"},"id":{"type":"string","format":"uuid","title":"Id"},"location_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Location Id"}},"type":"object","required":["device_serial_number","device_type","id"],"title":"DeviceInventoryResponse","description":"Response to create or update device inventory."},"DeviceInventoryUpdateRequest":{"properties":{"device_type":{"anyOf":[{"$ref":"#/components/schemas/DeviceType"},{"type":"null"}]},"mac_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mac Address"},"model_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Number"},"mdm_type":{"anyOf":[{"$ref":"#/components/schemas/MDMType"},{"type":"null"}]},"mdm_device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mdm Device Id"},"device_nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Nickname"},"rustdesk_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rustdesk Id"},"wave":{"anyOf":[{"$ref":"#/components/schemas/device_management__entities__device__Wave"},{"type":"null"}]}},"type":"object","title":"DeviceInventoryUpdateRequest","description":"Request to partially update device inventory."},"DeviceJobResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"device_serial_number":{"type":"string","title":"Device Serial Number"},"job_type":{"$ref":"#/components/schemas/DeviceJobType"},"status":{"$ref":"#/components/schemas/DeviceJobStatus"},"process_at_utc":{"type":"string","format":"date-time","title":"Process At Utc"},"actor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor"},"job_arguments":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Job Arguments"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","device_serial_number","job_type","status","process_at_utc","created_at","updated_at"],"title":"DeviceJobResponse","description":"Response for a device job."},"DeviceJobStatus":{"type":"string","enum":["pending","in_progress","success","error","cancelled"],"title":"DeviceJobStatus"},"DeviceJobType":{"type":"string","enum":["apply_configuration","device_type_change","rejoin_fleet","cashub_certified_provisioning","eero_network_provisioning"],"title":"DeviceJobType"},"DeviceLocationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"blid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blid"},"merchant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","created_at","updated_at"],"title":"DeviceLocationResponse","description":"Pydantic model for DeviceLocation response."},"DeviceOktaAuthorizedResponse":{"properties":{"device_serial_number":{"$ref":"#/components/schemas/DeviceSerialNumber"},"device_last_authorized_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Device Last Authorized At"}},"type":"object","required":["device_serial_number","device_last_authorized_at"],"title":"DeviceOktaAuthorizedResponse","description":"Response containing the timestamp saved in db of the device's last successful authorization."},"DeviceProvisioningResultsResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"device_id":{"type":"string","format":"uuid","title":"Device Id"},"result_data":{"additionalProperties":true,"type":"object","title":"Result Data"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","device_id","result_data","created_at","updated_at"],"title":"DeviceProvisioningResultsResponse"},"DeviceSerialNumber":{"type":"string","maxLength":25,"minLength":1},"DeviceTopology":{"properties":{"merchant_id":{"$ref":"#/components/schemas/MerchantID"},"corporate_id":{"type":"integer","title":"Corporate Id"},"venue_id":{"type":"integer","title":"Venue Id"},"vendor_id":{"type":"integer","title":"Vendor Id"},"shard_id":{"$ref":"#/components/schemas/ShardID"},"signature":{"type":"string","title":"Signature"},"device_type":{"$ref":"#/components/schemas/DeviceType"},"subvendor_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Subvendor Id"}},"type":"object","required":["merchant_id","corporate_id","venue_id","vendor_id","shard_id","signature","device_type"],"title":"DeviceTopology"},"DeviceTopologyWithSerialNumber":{"properties":{"merchant_id":{"$ref":"#/components/schemas/MerchantID"},"corporate_id":{"type":"integer","title":"Corporate Id"},"venue_id":{"type":"integer","title":"Venue Id"},"vendor_id":{"type":"integer","title":"Vendor Id"},"shard_id":{"$ref":"#/components/schemas/ShardID"},"signature":{"type":"string","title":"Signature"},"device_type":{"$ref":"#/components/schemas/DeviceType"},"subvendor_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Subvendor Id"},"device_serial_number":{"$ref":"#/components/schemas/DeviceSerialNumber"}},"type":"object","required":["merchant_id","corporate_id","venue_id","vendor_id","shard_id","signature","device_type","device_serial_number"],"title":"DeviceTopologyWithSerialNumber"},"DeviceType":{"type":"string","enum":["UNKNOWN","AX","POS","KDS","KIOSK","EXPRESS_POS","RPOSA_STANDALONE","EXPRESS_KDS","EXPRESS_KIOSK","RPOSA_FRESH_KDS","EXPRESS_FRESH_KDS","RPOSA_CFD","RPOSA_HH","EXPRESS_HH","CHEFTAB","SIM_CARD","PRINTER","GATEWAY","SWITCH","ACCESS_POINT","CELLULAR_BACKUP","WAREHOUSE_E2E_TEST","SPOTON_LITE","COPPER"],"title":"DeviceType"},"DeviceTypeMappings":{"properties":{"mapped_device_types":{"additionalProperties":{"additionalProperties":{"type":"string"},"propertyNames":{"$ref":"#/components/schemas/DeviceType"},"type":"object"},"propertyNames":{"$ref":"#/components/schemas/MDMType"},"type":"object","title":"Mapped Device Types"},"unmapped_device_types":{"additionalProperties":{"type":"string"},"type":"object","title":"Unmapped Device Types"}},"type":"object","required":["mapped_device_types","unmapped_device_types"],"title":"DeviceTypeMappings"},"DeviceUsageDetail":{"properties":{"data_usage":{"type":"integer","title":"Data Usage","default":0}},"type":"object","title":"DeviceUsageDetail","description":"Individual device usage data."},"DeviceUsagesResponse":{"properties":{"account_id":{"type":"integer","title":"Account Id"},"account_name":{"type":"string","title":"Account Name"},"page_number":{"type":"integer","title":"Page Number"},"last_page":{"type":"boolean","title":"Last Page"},"rate_plan_name":{"type":"string","title":"Rate Plan Name"},"rate_plan_version":{"type":"integer","title":"Rate Plan Version"},"zones":{"items":{"$ref":"#/components/schemas/UsageZone"},"type":"array","title":"Zones"}},"type":"object","required":["account_id","account_name","page_number","last_page","rate_plan_name","rate_plan_version","zones"],"title":"DeviceUsagesResponse","description":"Response from device usages endpoint."},"DeviceWithUsage":{"properties":{"device_id":{"type":"string","title":"Device Id"},"usage":{"$ref":"#/components/schemas/DeviceUsageDetail"}},"type":"object","required":["device_id","usage"],"title":"DeviceWithUsage","description":"Device with usage information."},"DiagnosticApplication":{"properties":{"name":{"type":"string","title":"Name"},"package_name":{"type":"string","title":"Package Name"},"version_name":{"type":"string","title":"Version Name"},"version_code":{"type":"integer","title":"Version Code"},"install_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Install Time"},"update_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Update Time"}},"type":"object","required":["name","package_name","version_name","version_code"],"title":"DiagnosticApplication","description":"Application info in diagnostic response."},"DiagnosticMemoryEntry":{"properties":{"time":{"type":"string","title":"Time"},"type":{"type":"string","title":"Type"},"value":{"type":"integer","title":"Value"}},"type":"object","required":["time","type","value"],"title":"DiagnosticMemoryEntry","description":"Memory entry in diagnostic response."},"DiagnosticNetwork":{"properties":{"ipv4":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ipv4"},"cellular":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cellular"},"strength":{"items":{"$ref":"#/components/schemas/DiagnosticNetworkStrength"},"type":"array","title":"Strength"}},"type":"object","title":"DiagnosticNetwork","description":"Network info in diagnostic response."},"DiagnosticNetworkStrength":{"properties":{"time":{"type":"string","title":"Time"},"type":{"type":"string","title":"Type"},"value":{"type":"integer","title":"Value"}},"type":"object","required":["time","type","value"],"title":"DiagnosticNetworkStrength","description":"Network strength entry in diagnostic response."},"DiagnosticSettingItem":{"properties":{"name":{"type":"string","title":"Name"},"content":{"title":"Content"}},"type":"object","required":["name","content"],"title":"DiagnosticSettingItem","description":"Setting item in diagnostic response."},"DiagnosticSystemItem":{"properties":{"name":{"type":"string","title":"Name"},"content":{"title":"Content"}},"type":"object","required":["name","content"],"title":"DiagnosticSystemItem","description":"System item in diagnostic response."},"EeroAccessPointDetails":{"properties":{"serial":{"type":"string","title":"Serial"},"mac":{"type":"string","title":"Mac"},"status":{"$ref":"#/components/schemas/EeroDeviceStatus"}},"type":"object","required":["serial","mac","status"],"title":"EeroAccessPointDetails"},"EeroAccessory":{"properties":{"dsn":{"type":"string","title":"Dsn"},"model":{"type":"string","title":"Model"},"name":{"type":"string","title":"Name"},"configuration_status":{"type":"string","title":"Configuration Status"},"registered":{"type":"boolean","title":"Registered"},"joined":{"type":"string","title":"Joined"},"eero_id":{"type":"string","title":"Eero Id"},"connected_eero_url":{"type":"string","title":"Connected Eero Url"},"properties_type":{"type":"string","title":"Properties Type"},"properties":{"title":"Properties"}},"type":"object","required":["dsn","model","name","configuration_status","registered","joined","eero_id","connected_eero_url","properties_type"],"title":"EeroAccessory"},"EeroCellularBackup":{"properties":{"dsn":{"type":"string","title":"Dsn"},"model":{"type":"string","title":"Model"},"bars":{"type":"integer","title":"Bars"},"status":{"type":"string","title":"Status"},"network_technology":{"type":"string","title":"Network Technology"},"provider":{"type":"string","title":"Provider"},"carrier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Carrier"},"signal_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Signal Score"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"data_usage":{"anyOf":[{"$ref":"#/components/schemas/EeroDataUsage"},{"type":"null"}]},"data_cycle_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Cycle Start"},"data_cycle_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Cycle End"}},"type":"object","required":["dsn","model","bars","status","network_technology","provider"],"title":"EeroCellularBackup"},"EeroClient":{"properties":{"mac":{"type":"string","title":"Mac"},"connected":{"type":"boolean","title":"Connected"},"wireless":{"type":"boolean","title":"Wireless"},"subnet_kind":{"type":"string","title":"Subnet Kind"},"last_active":{"type":"string","format":"date-time","title":"Last Active"},"connection_type":{"type":"string","title":"Connection Type"},"ip":{"anyOf":[{"type":"string","format":"ipv4"},{"type":"string","format":"ipv6"},{"type":"null"}],"title":"Ip"},"hostname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hostname"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nickname"},"ssid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ssid"},"is_guest":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Guest"},"model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Name"},"inferred_make":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inferred Make"},"inferred_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inferred Model"},"signal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal"},"first_seen":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Seen"}},"type":"object","required":["mac","connected","wireless","subnet_kind","last_active","connection_type"],"title":"EeroClient"},"EeroDataUsage":{"properties":{"is_unlimited":{"type":"boolean","title":"Is Unlimited"},"max_data_kb":{"type":"integer","title":"Max Data Kb"},"used_data_kb":{"type":"integer","title":"Used Data Kb"}},"type":"object","required":["is_unlimited","max_data_kb","used_data_kb"],"title":"EeroDataUsage"},"EeroDeviceStatus":{"properties":{"eero_id":{"type":"string","title":"Eero Id"},"model":{"type":"string","title":"Model"},"online":{"type":"boolean","title":"Online"},"hb_ok":{"type":"boolean","title":"Hb Ok"},"last_seen":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Seen"},"network_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Network Id"}},"type":"object","required":["eero_id","model","online","hb_ok"],"title":"EeroDeviceStatus"},"EeroDhcpPool":{"properties":{"subnet_ip":{"type":"string","format":"ipv4","title":"Subnet Ip"},"subnet_mask":{"type":"string","format":"ipv4","title":"Subnet Mask"},"start_ip":{"type":"string","format":"ipv4","title":"Start Ip"},"end_ip":{"type":"string","format":"ipv4","title":"End Ip"},"default_lease_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Lease Time"},"max_lease_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Lease Time"}},"type":"object","required":["subnet_ip","subnet_mask","start_ip","end_ip"],"title":"EeroDhcpPool"},"EeroGatewayDetails":{"properties":{"serial":{"type":"string","title":"Serial"},"mac":{"type":"string","title":"Mac"},"status":{"$ref":"#/components/schemas/EeroDeviceStatus"},"network":{"anyOf":[{"$ref":"#/components/schemas/EeroNetworkInfo"},{"type":"null"}]}},"type":"object","required":["serial","mac","status"],"title":"EeroGatewayDetails"},"EeroIpv6Lease":{"properties":{"prefix":{"type":"string","format":"ipv6network","title":"Prefix"},"name_servers":{"items":{"anyOf":[{"type":"string","format":"ipv4"},{"type":"string","format":"ipv6"}]},"type":"array","title":"Name Servers"},"subnets":{"items":{"type":"string","format":"ipv6network"},"type":"array","title":"Subnets"}},"type":"object","required":["prefix"],"title":"EeroIpv6Lease"},"EeroIpv6Pinhole":{"properties":{"device_url":{"type":"string","title":"Device Url"},"port":{"type":"string","title":"Port"},"protocol":{"type":"string","title":"Protocol"}},"type":"object","required":["device_url","port","protocol"],"title":"EeroIpv6Pinhole"},"EeroNetworkDhcp":{"properties":{"mode":{"type":"string","title":"Mode"},"custom":{"anyOf":[{"$ref":"#/components/schemas/EeroDhcpPool"},{"type":"null"}]},"guest":{"anyOf":[{"$ref":"#/components/schemas/EeroDhcpPool"},{"type":"null"}]},"main":{"anyOf":[{"$ref":"#/components/schemas/EeroDhcpPool"},{"type":"null"}]},"subnet_a":{"anyOf":[{"$ref":"#/components/schemas/EeroDhcpPool"},{"type":"null"}]},"subnet_b":{"anyOf":[{"$ref":"#/components/schemas/EeroDhcpPool"},{"type":"null"}]},"supernet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supernet"}},"type":"object","required":["mode"],"title":"EeroNetworkDhcp"},"EeroNetworkInfo":{"properties":{"network_id":{"type":"string","title":"Network Id"},"name":{"type":"string","title":"Name"},"customer_type":{"type":"string","title":"Customer Type"},"internet_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Internet Status"},"mesh_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mesh Status"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"dns_mode":{"type":"string","title":"Dns Mode"},"dns_servers":{"items":{"anyOf":[{"type":"string","format":"ipv4"},{"type":"string","format":"ipv6"}]},"type":"array","title":"Dns Servers"},"dhcp":{"$ref":"#/components/schemas/EeroNetworkDhcp"},"connection_mode":{"type":"string","title":"Connection Mode"},"double_nat":{"type":"boolean","title":"Double Nat"},"lease_mode":{"type":"string","title":"Lease Mode"},"wpa3_enabled":{"type":"boolean","title":"Wpa3 Enabled"},"upnp_enabled":{"type":"boolean","title":"Upnp Enabled"},"thread_enabled":{"type":"boolean","title":"Thread Enabled"},"band_steering":{"type":"boolean","title":"Band Steering"},"sqm":{"type":"boolean","title":"Sqm"},"speed":{"anyOf":[{"$ref":"#/components/schemas/EeroSpeedTest"},{"type":"null"}]},"wan_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wan Type"},"wan_ip":{"anyOf":[{"type":"string","format":"ipv4"},{"type":"string","format":"ipv6"},{"type":"null"}],"title":"Wan Ip"},"public_ip":{"anyOf":[{"type":"string","format":"ipv4"},{"type":"string","format":"ipv6"},{"type":"null"}],"title":"Public Ip"},"gateway_ip":{"anyOf":[{"type":"string","format":"ipv4"},{"type":"null"}],"title":"Gateway Ip"},"vlan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vlan"},"lease_ip":{"anyOf":[{"type":"string","format":"ipv4"},{"type":"null"}],"title":"Lease Ip"},"lease_mask":{"anyOf":[{"type":"string","format":"ipv4"},{"type":"null"}],"title":"Lease Mask"},"lease_router":{"anyOf":[{"type":"string","format":"ipv4"},{"type":"null"}],"title":"Lease Router"},"ipv6_upstream_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ipv6 Upstream Enabled"},"ipv6_dns_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ipv6 Dns Mode"},"ipv6_dns_servers":{"items":{"type":"string","format":"ipv6"},"type":"array","title":"Ipv6 Dns Servers"},"ipv6_lease":{"anyOf":[{"$ref":"#/components/schemas/EeroIpv6Lease"},{"type":"null"}]},"wireless_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wireless Mode"},"last_reboot":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Reboot"},"rebooting":{"anyOf":[{"$ref":"#/components/schemas/EeroReboot"},{"type":"null"}]},"total_reboots_in_last_24_hours":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Reboots In Last 24 Hours"},"accessories":{"items":{"$ref":"#/components/schemas/EeroAccessory"},"type":"array","title":"Accessories"},"cellular_backup":{"anyOf":[{"$ref":"#/components/schemas/EeroCellularBackup"},{"type":"null"}]},"subnets":{"items":{"$ref":"#/components/schemas/EeroSubnet"},"type":"array","title":"Subnets"},"clients":{"items":{"$ref":"#/components/schemas/EeroClient"},"type":"array","title":"Clients"},"dns_caching":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Dns Caching"},"mlo_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mlo Mode"},"nodes":{"items":{"$ref":"#/components/schemas/EeroNode"},"type":"array","title":"Nodes"},"reservations":{"items":{"$ref":"#/components/schemas/EeroReservation"},"type":"array","title":"Reservations"},"port_forwards":{"items":{"$ref":"#/components/schemas/EeroPortForward"},"type":"array","title":"Port Forwards"},"ipv6_pinholes":{"items":{"$ref":"#/components/schemas/EeroIpv6Pinhole"},"type":"array","title":"Ipv6 Pinholes"},"public_static_ip":{"anyOf":[{"$ref":"#/components/schemas/EeroPublicStaticIp"},{"type":"null"}]},"outages":{"items":{"$ref":"#/components/schemas/EeroOutage"},"type":"array","title":"Outages"}},"type":"object","required":["network_id","name","customer_type","internet_status","mesh_status","timezone","dns_mode","dns_servers","dhcp","connection_mode","double_nat","lease_mode","wpa3_enabled","upnp_enabled","thread_enabled","band_steering","sqm"],"title":"EeroNetworkInfo"},"EeroNode":{"properties":{"serial":{"type":"string","title":"Serial"},"gateway":{"type":"boolean","title":"Gateway"},"eero_id":{"type":"string","title":"Eero Id"}},"type":"object","required":["serial","gateway","eero_id"],"title":"EeroNode"},"EeroOutage":{"properties":{"start":{"type":"string","format":"date-time","title":"Start"},"end":{"type":"string","format":"date-time","title":"End"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["start","end","reason"],"title":"EeroOutage"},"EeroPortForward":{"properties":{"ip":{"type":"string","format":"ipv4","title":"Ip"},"gateway_port":{"type":"integer","title":"Gateway Port"},"client_port":{"type":"integer","title":"Client Port"},"protocol":{"type":"string","title":"Protocol"},"enabled":{"type":"boolean","title":"Enabled"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["ip","gateway_port","client_port","protocol","enabled"],"title":"EeroPortForward"},"EeroProvisionRequest":{"properties":{"business_location_id":{"$ref":"#/components/schemas/BLID"},"gateway_serial_number":{"type":"string","title":"Gateway Serial Number"},"ap_serial_numbers":{"items":{"type":"string"},"type":"array","title":"Ap Serial Numbers","default":[]}},"type":"object","required":["business_location_id","gateway_serial_number"],"title":"EeroProvisionRequest","description":"Request to provision a new eero Business network for a warehouse-staged device set.\n\nThe network's DBA/display name is resolved from GAP\nTODO: business_location_id and ap_serial_numbers will be removed as inputs."},"EeroPublicStaticIp":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},"type":"object","required":["enabled"],"title":"EeroPublicStaticIp"},"EeroReboot":{"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope"},"remaining":{"items":{"type":"string"},"type":"array","title":"Remaining"}},"type":"object","title":"EeroReboot"},"EeroReservation":{"properties":{"mac":{"type":"string","title":"Mac"},"ip":{"type":"string","format":"ipv4","title":"Ip"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["mac","ip"],"title":"EeroReservation"},"EeroSpeedTest":{"properties":{"date":{"type":"string","format":"date-time","title":"Date"},"status":{"type":"string","title":"Status"},"down_value":{"type":"number","title":"Down Value"},"down_units":{"type":"string","title":"Down Units"},"up_value":{"type":"number","title":"Up Value"},"up_units":{"type":"string","title":"Up Units"}},"type":"object","required":["date","status","down_value","down_units","up_value","up_units"],"title":"EeroSpeedTest"},"EeroSubnet":{"properties":{"subnet_type":{"type":"string","title":"Subnet Type"},"name":{"type":"string","title":"Name"},"enabled":{"type":"boolean","title":"Enabled"},"open_network":{"type":"boolean","title":"Open Network"},"rate_limit_pct":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Pct"},"vlan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vlan"},"subnet_ip":{"anyOf":[{"type":"string","format":"ipv4"},{"type":"null"}],"title":"Subnet Ip"},"subnet_mask":{"anyOf":[{"type":"string","format":"ipv4"},{"type":"null"}],"title":"Subnet Mask"},"dhcp_start":{"anyOf":[{"type":"string","format":"ipv4"},{"type":"null"}],"title":"Dhcp Start"},"dhcp_end":{"anyOf":[{"type":"string","format":"ipv4"},{"type":"null"}],"title":"Dhcp End"}},"type":"object","required":["subnet_type","name","enabled","open_network"],"title":"EeroSubnet"},"EffectiveSquadronIntent":{"properties":{"software":{"items":{"$ref":"#/components/schemas/SoftwareItem"},"type":"array","title":"Software"},"policy":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Policy"}},"type":"object","required":["software"],"title":"EffectiveSquadronIntent","description":"The squadron intent as one MDM group row is meant to see it.\n\n``software`` is the intent's ``software`` narrowed to what the row is\nmeant to carry. For CasHub ``2K``/``4K`` merchant rows that drops the\nother generation's ``-2K``/``-4K`` apps and package collections; for\nevery other row (EloView groups, legacy unsuffixed CasHub merchants) it\nis the full intent software. It is *narrowed, not expanded*: the member\napps and firmware a CasHub package collection implies are not listed\nhere (resolving them needs the CasHub catalog, which a report read does\nnot consult); where they took part in the drift calculation they appear\nin ``last_config_delta`` entries tagged ``implied_by``.\n\n``policy`` is the intent's policy. Nothing narrows it per row today; it\nlives here so a row's desired state is one object and clients never\nhave to merge the intent and cache contracts themselves.\n\nUnlike :class:`SquadronIntent`, ``software`` may be empty — an intent\nmade only of the other generation's items narrows to nothing for a row."},"EloviewDeviceDetailsDataResult":{"properties":{"serial_number":{"type":"string","title":"Serial Number"},"group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Id"},"model_no":{"type":"string","title":"Model No","default":"unknown"},"model_name":{"type":"string","title":"Model Name","default":"unknown"},"os_version":{"type":"string","title":"Os Version","default":"unknown"},"time_zone":{"anyOf":[{"$ref":"#/components/schemas/TimeZone"},{"type":"null"}]},"password":{"type":"string","title":"Password","default":""},"device_mode":{"type":"string","title":"Device Mode","default":"unknown"},"admin_password":{"anyOf":[{"$ref":"#/components/schemas/AdminPassword"},{"type":"null"}]},"device_name":{"type":"string","title":"Device Name","default":""},"device_key":{"type":"string","title":"Device Key","default":""},"contact_first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact First Name"},"contact_last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Last Name"},"address_line_1":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 1"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state_province":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State Province"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"registered_account":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registered Account"},"email_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Address"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"group_name":{"type":"string","title":"Group Name","default":""},"last_reboot":{"type":"integer","title":"Last Reboot","default":0},"gms_restriction":{"anyOf":[{"$ref":"#/components/schemas/GMSRestriction"},{"type":"null"}]},"online_since":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Online Since"},"offline_since":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offline Since"},"network_info":{"anyOf":[{"$ref":"#/components/schemas/NetworkInfo"},{"type":"null"}]},"current_playing_content":{"anyOf":[{"$ref":"#/components/schemas/CurrentPlayingContent"},{"type":"null"}]},"app_info":{"anyOf":[{"$ref":"#/components/schemas/AppInfo"},{"type":"null"}]},"app_enforcement":{"anyOf":[{"$ref":"#/components/schemas/AppEnforcement"},{"type":"null"}]},"home_button_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Home Button Enabled"},"power_button_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Power Button Enabled"},"virtual_keyboard_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Virtual Keyboard Enabled"},"multi_ime_keyboard_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Multi Ime Keyboard Enabled"},"touch_sound":{"anyOf":[{"$ref":"#/components/schemas/TouchSound"},{"type":"null"}]}},"type":"object","required":["serial_number","group_id"],"title":"EloviewDeviceDetailsDataResult","description":"Pydantic model for EloView device details API response"},"EventType":{"type":"string","enum":["register","assign","unassign","reassign","deprovision","config_change","reprovision","annotate","reboot","enterprise_reset","job_change","rejoin_fleet","soda_start"],"title":"EventType"},"ExecuteSquadronIntentLogEntry":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suffix"},"software":{"anyOf":[{"items":{"$ref":"#/components/schemas/SoftwareItem"},"type":"array"},{"type":"null"}],"title":"Software"},"policy":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Policy"},"execute_time":{"type":"string","format":"date-time","title":"Execute Time"},"status":{"type":"string","title":"Status"},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details"}},"type":"object","required":["id","execute_time","status"],"title":"ExecuteSquadronIntentLogEntry","description":"One drift-correction attempt against an MDM.\n\nSourced from :class:`mdms.db.models.ExecuteSquadronIntentLog`. The\nDevice GitOps modal renders these as a newest-first history table. The\nsnapshotted ``software`` and ``policy`` fields describe what the\nsync flow pushed at execution time, not the current intent."},"FisPaxTerminalDataResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"device_id":{"type":"string","format":"uuid","title":"Device Id"},"merchant_id":{"$ref":"#/components/schemas/MerchantID"},"terminal_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terminal Id"},"pax_created_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Pax Created Time"},"lane_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lane Id"},"spoton_lite_activated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Spoton Lite Activated At"}},"type":"object","required":["id","device_id","merchant_id"],"title":"FisPaxTerminalDataResponse","description":"Response for FIS/PAX terminal data."},"FleetReconcileRequest":{"properties":{"identifier":{"$ref":"#/components/schemas/WaveIdentifier"},"software":{"anyOf":[{"items":{"$ref":"#/components/schemas/SoftwareItem"},"type":"array"},{"type":"null"}],"title":"Software"},"policy":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Policy"}},"type":"object","required":["identifier"],"title":"FleetReconcileRequest","description":"Strict request body for ``POST /fleet/reconcile``.\n\nSame shape as :class:`SquadronIntent` plus a legacy back-compat shim for\npre-this-PR CasHub clients that posted ``config: {app_name, app_version}``.\nThe shim promotes the legacy single-item shape into a one-entry\n``software`` list (``type=\"app\"``, ``mode=\"foreground\"``) so existing\nFleetGroupReconciler callers keep working without changing their CR\nschema.\n\nValidation delegates to :class:`SquadronIntent` so the request enforces\nthe same shape contract as the response model without duplicating\nvalidators. Missing or malformed payloads fail with 422 instead of 500\nfrom downstream business logic."},"ForceSoftwarePushRequest":{"properties":{"new_device_type":{"$ref":"#/components/schemas/DeviceType"}},"type":"object","required":["new_device_type"],"title":"ForceSoftwarePushRequest","description":"Request to force push software/device type change to a device."},"GMSRestriction":{"properties":{"status":{"type":"string","title":"Status","default":"unavailable in elo"}},"type":"object","title":"GMSRestriction"},"GetDeviceLocationMappingResponse":{"properties":{"device_serial_number":{"$ref":"#/components/schemas/DeviceSerialNumber"},"device_type":{"$ref":"#/components/schemas/DeviceType"},"mac_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mac Address"},"model_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Number"},"mdm_type":{"anyOf":[{"$ref":"#/components/schemas/MDMType"},{"type":"null"}]},"mdm_device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mdm Device Id"},"device_nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Nickname"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"rustdesk_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rustdesk Id"},"wave":{"anyOf":[{"$ref":"#/components/schemas/device_management__entities__device__Wave"},{"type":"null"}]},"blid":{"anyOf":[{"$ref":"#/components/schemas/BLID"},{"type":"null"}]},"provisioned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Provisioned"},"squadron_control_opt_out":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Squadron Control Opt Out"},"location_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Id"},"mapped_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Mapped At"}},"type":"object","required":["device_serial_number","device_type","blid","location_id","mapped_at"],"title":"GetDeviceLocationMappingResponse","description":"Response for getting device location mapping."},"GetDeviceReadyForCertEnrollResponse":{"properties":{"device_serial_number":{"$ref":"#/components/schemas/DeviceSerialNumber"},"blid":{"anyOf":[{"$ref":"#/components/schemas/BLID"},{"type":"null"}]},"last_ackable_certificate_serial":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Ackable Certificate Serial"}},"type":"object","required":["device_serial_number","blid"],"title":"GetDeviceReadyForCertEnrollResponse","description":"Response for checking if a device is ready for certificate enrollment."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealDeviceTypeResponse":{"properties":{"device_type":{"anyOf":[{"$ref":"#/components/schemas/DeviceType"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"HealDeviceTypeResponse","description":"Response to heal the device type."},"HealthCheck":{"properties":{"service":{"type":"boolean","title":"Service"}},"type":"object","required":["service"],"title":"HealthCheck"},"IdempotencyConflictResponse":{"properties":{"outcome":{"type":"string","const":"IDEMPOTENCY_CONFLICT","title":"Outcome"},"device_serial_number":{"type":"string","title":"Device Serial Number"},"event_id":{"type":"string","format":"uuid","title":"Event Id"}},"additionalProperties":false,"type":"object","required":["outcome","device_serial_number","event_id"],"title":"IdempotencyConflictResponse"},"IngestOutcome":{"type":"string","enum":["STORED","DUPLICATE","UNRESOLVED_DEVICE","IDEMPOTENCY_CONFLICT","SEQUENCE_CONFLICT"],"title":"IngestOutcome"},"IngestSuccessResponse":{"properties":{"outcome":{"$ref":"#/components/schemas/IngestOutcome"},"device_serial_number":{"type":"string","title":"Device Serial Number"},"event_id":{"type":"string","format":"uuid","title":"Event Id"}},"additionalProperties":false,"type":"object","required":["outcome","device_serial_number","event_id"],"title":"IngestSuccessResponse"},"InstalledSoftware":{"properties":{"package_name":{"type":"string","title":"Package Name"},"version_name":{"type":"string","title":"Version Name"},"version_code":{"type":"integer","maximum":9007199254740991.0,"minimum":0.0,"title":"Version Code"}},"additionalProperties":false,"type":"object","required":["package_name","version_name","version_code"],"title":"InstalledSoftware"},"LocationAuditResponse":{"properties":{"event_type":{"$ref":"#/components/schemas/LocationEventType"},"actor":{"type":"string","title":"Actor"},"event_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Event Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["event_type","actor","created_at"],"title":"LocationAuditResponse","description":"A single location audit log entry."},"LocationEventType":{"type":"string","enum":["wave_change"],"title":"LocationEventType","description":"Event types recorded in the location-level audit log."},"LocationWaveResponse":{"properties":{"blid":{"$ref":"#/components/schemas/BLID"},"wave":{"$ref":"#/components/schemas/device_management__entities__locations__Wave"}},"type":"object","required":["blid","wave"],"title":"LocationWaveResponse","description":"Wave assignment for a device location, keyed by BLID."},"LocationWaveUpdateRequest":{"properties":{"wave":{"$ref":"#/components/schemas/device_management__entities__locations__Wave"}},"type":"object","required":["wave"],"title":"LocationWaveUpdateRequest","description":"Request to change a location's wave."},"MDMGroupCacheEntry":{"properties":{"name":{"type":"string","title":"Name"},"suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suffix"},"mdm_group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mdm Group Id"},"device_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Device Count"},"software":{"anyOf":[{"items":{"$ref":"#/components/schemas/SoftwareItem"},"type":"array"},{"type":"null"}],"title":"Software"},"effective_intent":{"anyOf":[{"$ref":"#/components/schemas/EffectiveSquadronIntent"},{"type":"null"}]},"policy":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Policy"},"last_config_delta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Last Config Delta"},"last_config_delta_calculated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Config Delta Calculated At"},"last_config_drift_detected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Config Drift Detected At"}},"type":"object","required":["name"],"title":"MDMGroupCacheEntry","description":"One MDM group row associated with a wave identifier.\n\nSourced from :class:`mdms.db.models.MDMGroupCache`. A single wave can have\nmultiple cache rows when overflow groups exist (``suffix`` distinguishes\nthem, e.g. EloView's ``-1``, ``-2``). The ``last_config_delta``\npayload is the ZenEngine diff between the squadron intent and the\ndownstream MDM's actual state — the Device GitOps modal renders it\nside-by-side with the intent's ``policy`` to expose drift.\n\n``name`` is the canonical MDM group name\n(``{DEVICE_TYPE}-{CELL}-{WAVE}[-{SUFFIX}]``, uppercased) that the\ndownstream MDM reports for this group — computed via\n:meth:`mdms.db.models.MDMGroupCache.group_name`. The Device GitOps\nmodal renders it as the per-group card title since the raw\n``mdm_group_id`` is an opaque internal identifier.\n\n``effective_intent`` is the squadron intent as *this* row is meant to\nsee it (see :class:`EffectiveSquadronIntent`). Clients should render it,\nnot ``SquadronIntentReport.intent``, as the \"desired\" side of a\nper-group diff, and ``software`` / ``policy`` here as the \"current\" side.\nBoth software lists are sorted the same way so a text diff of the two\ndoes not light up on ordering alone."},"MDMType":{"type":"string","enum":["att","cashub","eloview","pax","pronto","meraki","eero","ubiquiti","epson","zero-touch"],"title":"MDMType"},"MerchantID":{"type":"string","minLength":1},"MisconfigurationDetails":{"properties":{"data":{"additionalProperties":true,"type":"object","title":"Data"}},"type":"object","required":["data"],"title":"MisconfigurationDetails","description":"MDM-agnostic device misconfiguration analysis result.\n\n{\n    \"data\": {\n        \"performance\": \"4.5ms\",\n        \"result\": {\n            \"rule_admin_password\": {\n                \"message\": \"Admin password match\",\n                \"status\": \"ok\"\n            },\n            \"rule_allow_content_downgrade\": {\n                \"message\": \"Settings match: both enabled\",\n                \"status\": \"ok\"\n            },\n            ...\n            \"squadron_drift\": {\n                \"identifier\": {...},\n                \"has_drift\": true,\n                \"software\": [...],\n                \"policy\": {...}\n            }\n        }\n    }\n}\n\nBoth the ``rule_*`` keys and ``squadron_drift`` compare a device against\nthe MDM group it inherits from. The rules cover five hand-picked settings;\ndrift covers every setting the group declares. Whether the group itself\nmatches the GitOps YAML is reported separately, per squadron."},"NetworkDetail":{"properties":{"network_id":{"type":"string","title":"Network Id"},"network_name":{"type":"string","title":"Network Name"},"vendor":{"type":"string","title":"Vendor"},"location_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Location Id"},"location":{"anyOf":[{"$ref":"#/components/schemas/DeviceLocationResponse"},{"type":"null"}]}},"type":"object","required":["network_id","network_name","vendor"],"title":"NetworkDetail","description":"Detailed network information."},"NetworkInfo":{"properties":{"ip_address":{"type":"string","title":"Ip Address"},"mac_address":{"type":"string","title":"Mac Address"},"interface_name":{"type":"string","title":"Interface Name"},"network_type":{"type":"string","title":"Network Type"}},"type":"object","required":["ip_address","mac_address","interface_name","network_type"],"title":"NetworkInfo","description":"Pydantic model for network information"},"OKTACredentials":{"properties":{"device_username":{"type":"string","title":"Device Username"},"device_password":{"type":"string","title":"Device Password"}},"type":"object","required":["device_username","device_password"],"title":"OKTACredentials","description":"Stores login and password to Merchant OKTA"},"OKTAInformation":{"properties":{"client_id":{"type":"string","title":"Client Id"},"issuer_url":{"type":"string","title":"Issuer Url"},"redirect_uri":{"type":"string","title":"Redirect Uri"}},"type":"object","required":["client_id","issuer_url","redirect_uri"],"title":"OKTAInformation","description":"Client information for authenticating Merchant Users into Merchant Okta"},"PaxApkItem":{"properties":{"apk_package_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Apk Package Name"},"apk_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Apk Name"},"version_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version Name"},"install_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Install Time"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"entry_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entry Id"}},"type":"object","title":"PaxApkItem","description":"A single APK record (installed, pending, or historical) on a Paxstore terminal."},"PaxTerminalInfo":{"properties":{"model":{"type":"string","title":"Model","default":"Unknown"},"merchant_name":{"type":"string","title":"Merchant Name","default":"Unknown"},"terminal_name":{"type":"string","title":"Terminal Name","default":"Unknown"},"reseller_name":{"type":"string","title":"Reseller Name","default":"Unknown"},"pax_status":{"type":"string","title":"Pax Status","default":"Unknown"},"tid":{"type":"string","title":"Tid","default":"Unknown"},"pax_id":{"type":"string","title":"Pax Id","default":"Unknown"},"firmware":{"type":"string","title":"Firmware","default":"Unknown"},"installed_apps":{"items":{"$ref":"#/components/schemas/PaxApkItem"},"type":"array","title":"Installed Apps"}},"type":"object","title":"PaxTerminalInfo","description":"Top-level terminal information from Paxstore."},"PaxTerminalNetworkDetail":{"properties":{"iccid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Iccid"},"local_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Local Ip"}},"type":"object","title":"PaxTerminalNetworkDetail","description":"Network-level details (SIM card, local IP) for a Paxstore terminal."},"PaxstoreDeviceDetailsDataResult":{"properties":{"terminal":{"$ref":"#/components/schemas/PaxTerminalInfo"},"tampered":{"type":"boolean","title":"Tampered","default":false},"installed_apps":{"items":{"$ref":"#/components/schemas/PaxApkItem"},"type":"array","title":"Installed Apps"},"pending_apps":{"items":{"$ref":"#/components/schemas/PaxApkItem"},"type":"array","title":"Pending Apps"},"apk_install_history":{"items":{"$ref":"#/components/schemas/PaxApkItem"},"type":"array","title":"Apk Install History"},"terminal_variables":{"additionalProperties":{"type":"string"},"type":"object","title":"Terminal Variables"},"network":{"$ref":"#/components/schemas/PaxTerminalNetworkDetail"},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone"}},"type":"object","required":["terminal"],"title":"PaxstoreDeviceDetailsDataResult","description":"Aggregated MDM device details for a Paxstore terminal."},"PostDeviceLocationMappingRequest":{"properties":{"device_serial_number":{"$ref":"#/components/schemas/DeviceSerialNumber"},"blid":{"$ref":"#/components/schemas/BLID"}},"type":"object","required":["device_serial_number","blid"],"title":"PostDeviceLocationMappingRequest","description":"Request to map a device to a location."},"PostDeviceLocationMappingResponse":{"properties":{"device_serial_number":{"$ref":"#/components/schemas/DeviceSerialNumber"},"device_type":{"$ref":"#/components/schemas/DeviceType"},"mac_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mac Address"},"model_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Number"},"mdm_type":{"anyOf":[{"$ref":"#/components/schemas/MDMType"},{"type":"null"}]},"mdm_device_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mdm Device Id"},"device_nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Nickname"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"rustdesk_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rustdesk Id"},"wave":{"anyOf":[{"$ref":"#/components/schemas/device_management__entities__device__Wave"},{"type":"null"}]},"blid":{"$ref":"#/components/schemas/BLID"},"provisioned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Provisioned"},"squadron_control_opt_out":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Squadron Control Opt Out"},"location_id":{"type":"string","title":"Location Id"},"mapped_at":{"type":"string","format":"date-time","title":"Mapped At"}},"type":"object","required":["device_serial_number","device_type","blid","location_id","mapped_at"],"title":"PostDeviceLocationMappingResponse","description":"Response for mapping a device to a location."},"PrepareDeviceKittingResponse":{"properties":{"key":{"type":"string","title":"Key"},"url":{"type":"string","title":"Url"}},"type":"object","required":["key","url"],"title":"PrepareDeviceKittingResponse","description":"Response containing kitting info (key + url) for QR code generation."},"ProvisioningCertification":{"type":"string","enum":["certified","uncertified"],"title":"ProvisioningCertification","description":"Which warehouse provisioning track a device goes through.\n\nCertified devices are provisioned with a secure key injected; uncertified\ndevices are not. Determines which MDM provisioning group/merchant a new\ndevice is placed in for penny testing."},"ReassignPreflightResult":{"properties":{"blid":{"type":"string","title":"Blid"},"allowed":{"type":"boolean","title":"Allowed"},"group_change_required":{"type":"boolean","title":"Group Change Required"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"identifier":{"anyOf":[{"$ref":"#/components/schemas/WaveIdentifier"},{"type":"null"}]},"current_mdm_group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Mdm Group Id"},"current_mdm_group_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Mdm Group Name"},"target_mdm_group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Mdm Group Id"},"target_group_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Group Name"}},"type":"object","required":["blid","allowed","group_change_required"],"title":"ReassignPreflightResult","description":"Whether a device may be reassigned to ``blid``, and what it would cost.\n\nRead-only scoring of a prospective location change, so support tooling can\nfail fast *before* it unassigns a device rather than stranding it when the\nassign half fails.\n\n``allowed`` is the single gate callers should branch on. It is False only\nwhen the target location resolves to a squadron the device cannot be placed\nin — no wave configuration for its ``(mdm_type, device_type, cell, wave)``,\nor every group in that wave is full. Anything else is allowed: a device\nwhose MDM doesn't use squadron groups, or that its MDM has no record of,\ncan still be remapped — there is simply no group to move it into, which\n``group_change_required=False`` reports.\n\n``reason`` is human-readable and meant to be surfaced verbatim to support\nstaff. It is populated whenever ``allowed`` is False, and also when a move\nis skipped for a benign reason.\n\nThe group fields are only populated when the squadron resolved, i.e. when\n``group_change_required`` is True or the device is already in the target\nwave's groups."},"RejoinFleetResult":{"properties":{"moved":{"type":"boolean","title":"Moved"},"identifier":{"$ref":"#/components/schemas/WaveIdentifier"},"previous_mdm_group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous Mdm Group Id"},"target_mdm_group_id":{"type":"string","title":"Target Mdm Group Id"},"target_group_name":{"type":"string","title":"Target Group Name"},"job_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Job Id"},"process_at_utc":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Process At Utc"}},"type":"object","required":["moved","identifier","target_mdm_group_id","target_group_name"],"title":"RejoinFleetResult","description":"Outcome of a per-device rejoin-fleet action.\n\nThe group move itself is deferred to a device job, so ``moved`` is False\nboth when the device is already in one of its wave's MDM groups (any\ngroup of the wave counts — base or overflow; ``target_mdm_group_id``\nequals ``previous_mdm_group_id`` and no job is created) and when a move\nwas scheduled (``job_id`` and ``process_at_utc`` identify the job that\nwill move the device into the wave group named ``target_group_name``)."},"ReportState":{"type":"string","enum":["reported","no_report"],"title":"ReportState"},"ResyncRequest":{"properties":{"blid":{"anyOf":[{"$ref":"#/components/schemas/BLID"},{"type":"null"}]},"serial_number":{"anyOf":[{"$ref":"#/components/schemas/DeviceSerialNumber"},{"type":"null"}]}},"type":"object","title":"ResyncRequest","description":"Request to trigger a resync of all devices for a business location or a single device."},"RustdeskDevice":{"properties":{"guid":{"type":"string","title":"Guid"},"id":{"type":"string","title":"Id"},"info":{"anyOf":[{"$ref":"#/components/schemas/RustdeskDeviceInfo"},{"type":"null"}]},"status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"is_online":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Online"},"device_group_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Group Name"},"strategy_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Strategy Name"},"last_online":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Online"}},"type":"object","required":["guid","id"],"title":"RustdeskDevice"},"RustdeskDeviceInfo":{"properties":{"ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip"},"device_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Name"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"cpu":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cpu"},"memory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memory"},"os":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os"}},"type":"object","title":"RustdeskDeviceInfo"},"RustdeskDeviceSearchResponse":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/RustdeskDevice"},"type":"array"},{"type":"null"}],"title":"Data"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"}},"type":"object","title":"RustdeskDeviceSearchResponse"},"SequenceConflictResponse":{"properties":{"outcome":{"type":"string","const":"SEQUENCE_CONFLICT","title":"Outcome"},"device_serial_number":{"type":"string","title":"Device Serial Number"},"installation_id":{"type":"string","format":"uuid","title":"Installation Id"},"seq":{"type":"integer","title":"Seq"}},"additionalProperties":false,"type":"object","required":["outcome","device_serial_number","installation_id","seq"],"title":"SequenceConflictResponse"},"ShardID":{"type":"string","maxLength":63,"minLength":1},"SkuMappings":{"properties":{"mapped_skus":{"additionalProperties":{"additionalProperties":{"type":"string"},"type":"object"},"propertyNames":{"$ref":"#/components/schemas/MDMType"},"type":"object","title":"Mapped Skus"},"unmapped_skus":{"additionalProperties":{"type":"string"},"type":"object","title":"Unmapped Skus"}},"type":"object","required":["mapped_skus","unmapped_skus"],"title":"SkuMappings"},"SoftwareChangedPayload":{"properties":{"installation_id":{"type":"string","format":"uuid","title":"Installation Id"},"seq":{"type":"integer","maximum":9007199254740991.0,"minimum":1.0,"title":"Seq"},"trigger":{"type":"string","const":"package_changed","title":"Trigger"},"software":{"items":{"$ref":"#/components/schemas/InstalledSoftware"},"type":"array","title":"Software"}},"additionalProperties":false,"type":"object","required":["installation_id","seq","trigger","software"],"title":"SoftwareChangedPayload"},"SoftwareItem":{"properties":{"name":{"type":"string","title":"Name"},"version":{"type":"string","title":"Version"},"type":{"type":"string","title":"Type"},"mode":{"$ref":"#/components/schemas/SoftwareMode"}},"type":"object","required":["name","version","type","mode"],"title":"SoftwareItem","description":"One piece of software a Squadron carries.\n\nShape is uniform across MDMs: ``name`` / ``version`` / ``type`` /\n``mode``. The ``type`` vocabulary is free-form and MDM-specific (e.g.\n``\"app\"`` for CasHub, ``\"apk\"`` / ``\"bundle\"`` for EloView); the\nfleet-controller does not validate ``type`` against the MDM and\ndevice-management persists items verbatim — the per-MDM resolver in\n:mod:`mdms.<mdm>.business_logic` owns interpretation.\n\n``mode`` (see :class:`SoftwareMode`) describes how the MDM should treat\nthe item: foreground (active push target — at most one per squadron,\nCasHub excepted),\nbackground (non-default visible install), hidden (non-default install,\nhidden from launcher), or uninstall (remove by package name).\n\nAt most one item per squadron may carry ``mode=\"foreground\"`` (CasHub\nexcepted); the constraint is enforced on :class:`SquadronIntent` via\n:meth:`SquadronIntent._at_most_one_foreground`. The multi-item MDM push\npipeline is a follow-up owned by another team; today the dispatcher\nbridges through the foreground-marked item only."},"SoftwareMode":{"type":"string","enum":["foreground","background","hidden","uninstall"],"title":"SoftwareMode","description":"How a :class:`SoftwareItem` should be treated by the MDM.\n\nFour states that together cover every install/uninstall + visibility\ncombination the per-MDM resolvers need to express. The states are not\nindependent axes — they're four cells of a single state machine — which\nis why they live on one enum field rather than separate bool/enum\ncolumns. See fleet-controller ADR-0004.\n\nValues\n------\nforeground\n    Active push target — the squadron's \"default\" launcher app.\n    Implicitly visible. **At most one per Squadron** (enforced on\n    :class:`SquadronIntent`), except CasHub, which may carry one per\n    2K/4K generation.\nbackground\n    Non-default install, visible in the device launcher.\nhidden\n    Non-default install, hidden from the device launcher. This is\n    today's hardcoded EloView behavior for non-default items, kept as\n    an explicit value so operators can opt in/out per item.\nuninstall\n    Remove the package identified by ``name`` from the device.\n    ``version`` and per-MDM visibility are ignored."},"SoftwareReportIngestRequest":{"properties":{"event_type":{"type":"string","const":"SoftwareChanged.v1","title":"Event Type"},"event_id":{"type":"string","format":"uuid","title":"Event Id"},"timestamp":{"type":"integer","maximum":253402300799999.0,"exclusiveMinimum":0.0,"title":"Timestamp"},"origin_system":{"type":"string","const":"android-sidecar-vault","title":"Origin System"},"metadata":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Metadata"},"payload":{"$ref":"#/components/schemas/SoftwareChangedPayload"},"mqtt_topic":{"type":"string","title":"Mqtt Topic"},"received_at":{"type":"string","format":"date-time","title":"Received At"}},"additionalProperties":false,"type":"object","required":["event_type","event_id","timestamp","origin_system","payload","mqtt_topic","received_at"],"title":"SoftwareReportIngestRequest"},"SoftwareStatusDevice":{"properties":{"device_serial_number":{"type":"string","title":"Device Serial Number"},"device_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Device Id"},"device_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Type"},"mdm_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mdm Type"},"nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nickname"}},"type":"object","required":["device_serial_number"],"title":"SoftwareStatusDevice"},"SoftwareStatusLatestReport":{"properties":{"report_state":{"$ref":"#/components/schemas/ReportState"},"event_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Event Id"},"installation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Installation Id"},"seq":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seq"},"event_timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Event Timestamp"},"received_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Received At"},"software":{"anyOf":[{"items":{"$ref":"#/components/schemas/InstalledSoftware"},"type":"array"},{"type":"null"}],"title":"Software"}},"type":"object","required":["report_state"],"title":"SoftwareStatusLatestReport"},"SoftwareStatusResponse":{"properties":{"device":{"$ref":"#/components/schemas/SoftwareStatusDevice"},"latest_report":{"$ref":"#/components/schemas/SoftwareStatusLatestReport"}},"type":"object","required":["device","latest_report"],"title":"SoftwareStatusResponse"},"SquadronControlResponse":{"properties":{"device_serial_number":{"$ref":"#/components/schemas/DeviceSerialNumber"},"squadron_control_opt_out":{"type":"boolean","title":"Squadron Control Opt Out"}},"type":"object","required":["device_serial_number","squadron_control_opt_out"],"title":"SquadronControlResponse","description":"Response reflecting a device's squadron-control opt-out state."},"SquadronControlUpdateRequest":{"properties":{"opt_out":{"type":"boolean","title":"Opt Out"}},"type":"object","required":["opt_out"],"title":"SquadronControlUpdateRequest","description":"Request to opt a device in/out of automatic squadron group moves.\n\n``opt_out=True`` excludes the device from the automatic rejoin-fleet move that\nlocation/mapping changes would otherwise schedule. ``opt_out=False`` re-enables it."},"SquadronIntent":{"properties":{"identifier":{"$ref":"#/components/schemas/WaveIdentifier"},"software":{"items":{"$ref":"#/components/schemas/SoftwareItem"},"type":"array","minItems":1,"title":"Software"},"policy":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Policy"}},"type":"object","required":["identifier","software"],"title":"SquadronIntent","description":"List of software items + optional opaque policy, keyed by wave identifier.\n\n``software`` is the squadron's list of software items (see\n:class:`SoftwareItem`). Each item carries a free-form ``type`` whose\ninterpretation lives in the per-MDM resolver. The list must contain at\nleast one item; at most one item may carry ``mode=\"foreground\"``, except\nfor CasHub, which carries one per 2K/4K generation. Order\nis informational only — drift detection on the fleet-controller side\ncompares lists order-insensitively.\n\n``policy`` is an opaque ``dict[str, Any]`` payload — fleet-controller\nowns the shape; device-management persists it verbatim and does not\nintrospect or apply it (per-MDM policy application is a follow-up)."},"SquadronIntentReport":{"properties":{"intent":{"$ref":"#/components/schemas/SquadronIntent"},"cache":{"items":{"$ref":"#/components/schemas/MDMGroupCacheEntry"},"type":"array","title":"Cache"},"execution_history":{"items":{"$ref":"#/components/schemas/ExecuteSquadronIntentLogEntry"},"type":"array","title":"Execution History"}},"type":"object","required":["intent"],"title":"SquadronIntentReport","description":"Aggregated report payload for a single wave identifier.\n\nCombines the desired intent, the cached actual MDM state (with drift\ndiffs), and the recent execution history into one payload so the\nDevice GitOps modal can render software, policy, and execution logs\nfrom a single API call."},"SquadronIntentReportRequest":{"properties":{"identifier":{"$ref":"#/components/schemas/WaveIdentifier"},"execution_history_limit":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Execution History Limit","default":50}},"type":"object","required":["identifier"],"title":"SquadronIntentReportRequest","description":"Body for ``POST /fleet/squadron-intents/report``.\n\n``execution_history_limit`` caps how many rows from\n``execute_squadron_intent_logs`` are returned (newest first). The default\nof 50 matches the Device GitOps modal's initial render budget; the cap\nof 200 keeps a single request bounded even when callers explicitly ask\nfor more."},"SquadronIntentSummary":{"properties":{"identifier":{"$ref":"#/components/schemas/WaveIdentifier"},"software":{"items":{"$ref":"#/components/schemas/SoftwareItem"},"type":"array","minItems":1,"title":"Software"},"policy":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Policy"},"has_drift":{"type":"boolean","title":"Has Drift","default":false},"device_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Device Count"},"group_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Group Count"},"drifted_device_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Drifted Device Count"}},"type":"object","required":["identifier","software"],"title":"SquadronIntentSummary","description":"Squadron intent enriched with pre-computed cache summary.\n\n``has_drift`` is True when at least one :class:`MDMGroupCache` row\nmatched to this intent's wave identifier has ``last_config_delta.has_drift\n== true``. ``device_count`` is the total number of devices across all\nMDM groups for this wave. ``group_count`` is how many MDM groups are\ncached for this wave — the same number the squadron report modal shows.\nAll three are derived from a single GROUP BY query so the Device GitOps\nlist view can show status without extra round-trips.\n\n``group_count`` is None rather than 0 when no cache rows exist: the cache\nis rebuilt wholesale by the sync cron, so an absent row means \"no groups\ncached\" — which may be a genuinely empty squadron, a wave that has never\nbeen refreshed, or a read landing mid-sync. Callers should render that\nas unknown, not as zero."},"StartSodaRequest":{"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"additionalProperties":false,"type":"object","title":"StartSodaRequest","description":"Optional request body. supportal-be always sends the constant reason."},"StartSodaResponse":{"properties":{"message_id":{"type":"string","format":"uuid","title":"Message Id"},"status":{"type":"string","const":"DELIVERED_TO_MQTT_CLIENT","title":"Status","default":"DELIVERED_TO_MQTT_CLIENT"},"requested_at":{"type":"string","title":"Requested At"},"delivered_at":{"type":"string","title":"Delivered At"},"expires_at":{"type":"string","title":"Expires At"}},"additionalProperties":false,"type":"object","required":["message_id","requested_at","delivered_at","expires_at"],"title":"StartSodaResponse","description":"202 body returned to supportal-be (§8.1)."},"StationsResponse":{"properties":{"subvendors":{"items":{"$ref":"#/components/schemas/SubVendor"},"type":"array","title":"Subvendors"},"vendors":{"items":{"$ref":"#/components/schemas/Vendor"},"type":"array","title":"Vendors"}},"type":"object","required":["subvendors","vendors"],"title":"StationsResponse"},"StatusRequest":{"properties":{"identifier":{"$ref":"#/components/schemas/WaveIdentifier"}},"type":"object","required":["identifier"],"title":"StatusRequest","description":"Request body for GitOps status endpoint."},"SubVendor":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"SubVendor"},"SyncRequest":{"properties":{"identifier":{"$ref":"#/components/schemas/WaveIdentifier"}},"type":"object","required":["identifier"],"title":"SyncRequest","description":"Request body for sync/refresh-cache endpoints."},"SyncRustdeskUserRequest":{"properties":{"email":{"type":"string","title":"Email"},"parent_group_name":{"type":"string","title":"Parent Group Name"},"agent_ids":{"items":{"type":"string"},"type":"array","title":"Agent Ids","default":[]}},"type":"object","required":["email","parent_group_name"],"title":"SyncRustdeskUserRequest"},"SyncRustdeskUserResult":{"properties":{"in_rustdesk":{"type":"boolean","title":"In Rustdesk"},"parent_group_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Group Name"}},"type":"object","required":["in_rustdesk"],"title":"SyncRustdeskUserResult"},"TaskAcceptedResponse":{"properties":{"task_run_id":{"type":"string","title":"Task Run Id"}},"type":"object","required":["task_run_id"],"title":"TaskAcceptedResponse"},"TaskRunStatusResponse":{"properties":{"id":{"type":"string","title":"Id"},"task_type":{"type":"string","title":"Task Type"},"task_args":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Task Args"},"status":{"type":"string","title":"Status"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"error_detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Detail"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","task_type","status","created_at","updated_at"],"title":"TaskRunStatusResponse"},"TerminalDetails":{"properties":{"terminal_id":{"type":"string","title":"Terminal Id"},"terminal_name":{"type":"string","title":"Terminal Name"},"hardware_sn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hardware Sn"},"merchant_id":{"type":"string","title":"Merchant Id"},"merchant_name":{"type":"string","title":"Merchant Name"},"tenant_id":{"type":"string","title":"Tenant Id"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Name"},"active":{"type":"integer","title":"Active"},"block_status":{"type":"integer","title":"Block Status"},"connected":{"type":"boolean","title":"Connected"},"kitting":{"type":"boolean","title":"Kitting"},"created_at":{"type":"string","title":"Created At"},"last_connected_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Connected At"},"memo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memo"},"self_defined_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Self Defined Id"},"groups":{"items":{"$ref":"#/components/schemas/TerminalGroup"},"type":"array","title":"Groups"},"tags":{"items":{"$ref":"#/components/schemas/TerminalTag"},"type":"array","title":"Tags"}},"type":"object","required":["terminal_id","terminal_name","merchant_id","merchant_name","tenant_id","active","block_status","connected","kitting","created_at"],"title":"TerminalDetails","description":"Terminal item in list response."},"TerminalDiagnosticData":{"properties":{"report_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Time"},"confidence":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Confidence"},"battery_power":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Battery Power"},"free_memory":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Free Memory"},"free_storage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Free Storage"},"sensor_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sensor Status"},"application":{"items":{"$ref":"#/components/schemas/DiagnosticApplication"},"type":"array","title":"Application"},"network":{"anyOf":[{"$ref":"#/components/schemas/DiagnosticNetwork"},{"type":"null"}]},"setting":{"items":{"$ref":"#/components/schemas/DiagnosticSettingItem"},"type":"array","title":"Setting"},"system":{"items":{"$ref":"#/components/schemas/DiagnosticSystemItem"},"type":"array","title":"System"},"total_space_memory":{"items":{"$ref":"#/components/schemas/DiagnosticMemoryEntry"},"type":"array","title":"Total Space Memory"},"usage_space_memory":{"items":{"$ref":"#/components/schemas/DiagnosticMemoryEntry"},"type":"array","title":"Usage Space Memory"}},"type":"object","title":"TerminalDiagnosticData","description":"Terminal diagnostic data."},"TerminalGroup":{"properties":{"group_id":{"type":"integer","title":"Group Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["group_id","name"],"title":"TerminalGroup","description":"Terminal group information."},"TerminalTag":{"properties":{"tag_id":{"type":"integer","title":"Tag Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["tag_id","name"],"title":"TerminalTag","description":"Terminal tag information."},"TimeZone":{"properties":{"region":{"type":"string","title":"Region"}},"type":"object","required":["region"],"title":"TimeZone","description":"Pydantic model for the time zone setting."},"TopologyDetailWithSignature":{"properties":{"merchant_id":{"$ref":"#/components/schemas/MerchantID"},"corporate_id":{"type":"integer","title":"Corporate Id"},"venue_id":{"type":"integer","title":"Venue Id"},"vendor_id":{"type":"integer","title":"Vendor Id"},"shard_id":{"$ref":"#/components/schemas/ShardID"},"signature":{"type":"string","title":"Signature"},"name":{"type":"string","title":"Name"},"address":{"$ref":"#/components/schemas/Address"},"business_location_id":{"anyOf":[{"$ref":"#/components/schemas/BLID"},{"type":"string","const":""}],"title":"Business Location Id"},"is_test":{"type":"boolean","title":"Is Test","default":false},"is_demo":{"type":"boolean","title":"Is Demo","default":false}},"type":"object","required":["merchant_id","corporate_id","venue_id","vendor_id","shard_id","signature","name","address","business_location_id"],"title":"TopologyDetailWithSignature"},"TopologyWithBLID":{"properties":{"merchant_id":{"$ref":"#/components/schemas/MerchantID"},"corporate_id":{"type":"integer","title":"Corporate Id"},"venue_id":{"type":"integer","title":"Venue Id"},"vendor_id":{"type":"integer","title":"Vendor Id"},"shard_id":{"$ref":"#/components/schemas/ShardID"},"signature":{"type":"string","title":"Signature"},"business_location_id":{"anyOf":[{"$ref":"#/components/schemas/BLID"},{"type":"string","const":""}],"title":"Business Location Id"}},"type":"object","required":["merchant_id","corporate_id","venue_id","vendor_id","shard_id","signature","business_location_id"],"title":"TopologyWithBLID"},"TouchSound":{"properties":{"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"rev":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rev"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"TouchSound"},"UninstallAppRequest":{"properties":{"package_name":{"type":"string","title":"Package Name"}},"type":"object","required":["package_name"],"title":"UninstallAppRequest","description":"Request to uninstall an app from a device via its MDM."},"UsageType":{"type":"string","enum":["DATA","SMS","VOICE"],"title":"UsageType","description":"API-level usage type enum."},"UsageZone":{"properties":{"devices":{"items":{"$ref":"#/components/schemas/DeviceWithUsage"},"type":"array","title":"Devices"},"zone":{"type":"string","title":"Zone"}},"type":"object","required":["devices","zone"],"title":"UsageZone","description":"Zone containing devices and their usage."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"Vendor":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"Vendor"},"VersionCheck":{"properties":{"GitVersion":{"type":"string","title":"Gitversion"},"ReleaseVersion":{"type":"string","title":"Releaseversion"}},"type":"object","required":["GitVersion","ReleaseVersion"],"title":"VersionCheck"},"WaveIdentifier":{"properties":{"mdm_type":{"$ref":"#/components/schemas/MDMType"},"device_type":{"$ref":"#/components/schemas/DeviceType"},"cell":{"type":"string","title":"Cell"},"wave":{"type":"string","title":"Wave"}},"type":"object","required":["mdm_type","device_type","cell","wave"],"title":"WaveIdentifier"},"device_management__entities__device__Wave":{"type":"string","enum":["general","early","late"],"title":"Wave"},"device_management__entities__locations__Wave":{"type":"string","enum":["general","early","late"],"title":"Wave","description":"Location-level (merchant-level) deployment wave.\n\nDuplicated from the device-level ``entities.device.Wave`` so the\nlocation feature stands alone while the device-level wave is phased out."}},"securitySchemes":{"Registration Bearer Token":{"type":"http","description":"Click the Generate button if in localdev, or paste a device registration token here. This token is necessary for:\n- api/v1/enroll\n- api/v1/merchants\n- api/v1/venues","scheme":"bearer"},"S2S Bearer Token":{"type":"http","description":"Click the Generate button if in localdev, or paste a device management S2S token here. This token is necessary for most endpoints.","scheme":"bearer"},"mTLS Device Serial Number":{"type":"apiKey","description":"Device serial number (may include 'serialNumber=' prefix)","in":"header","name":"X-Device-Serial-Number"},"mTLS Certificate Fingerprint":{"type":"apiKey","description":"SHA256 fingerprint of the client certificate","in":"header","name":"X-Certificate-Fingerprint"},"mTLS Certificate Serial Number":{"type":"apiKey","description":"Serial number from the client certificate","in":"header","name":"X-Certificate-Serial-Number"},"Device API Key":{"type":"apiKey","description":"API key for endpoints that are hit directly by devices","in":"header","name":"Device-API-Key"}}}}