{
    "openapi": "3.0.3",
    "info": {
        "title": "MQ Insights API",
        "version": "1.0.0",
        "description": "Internal API spec"
    },
    "paths": {
        "/asset/": {
            "get": {
                "operationId": "asset_list",
                "description": "Returns a paginated list of assets from the `Asset` table (as opposed to `/asset-search`, which reads from a denormalized search view). Each asset nests its currently-paired `asset_device` list, `related_assets`, `status` (UNPAIRED/ACTIVE/IN_USE/NOT_IN_USE/MISSING), and `paired_display_properties` (freeform JSON keyed by device_id, used to drive e-ink display templates on MQdisplay-class devices).\n\nSupports the documented filters plus a special, non-model `status` query parameter value of `unassigned` (assets with no linked device) or `assigned` (assets with at least one linked device); this is distinct from the `status__in` field filter, which filters on the asset's actual `status` field. Supports free-text `search` across description, customer_reference, type, owner, manufacturer, model_number, and serial_number.\n\nScopes results to the campuses/buildings/floors/rooms/zones the authenticated user has permission to view.",
                "summary": "Retrieves a list of assets",
                "parameters": [
                    {
                        "in": "query",
                        "name": "building_db_id",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to assets whose current location's building ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "building_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Alias for building_db_id. Filters to assets whose current location's building ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "campus_db_id",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to assets whose current location's campus ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "campus_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Alias for campus_db_id. Filters to assets whose current location's campus ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "floor_db_id",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to assets whose current location's floor ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "floor_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Alias for floor_db_id. Filters to assets whose current location's floor ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "format",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "csv",
                                "json"
                            ]
                        },
                        "description": "Response format override. Optional. Allowed values: csv, json."
                    },
                    {
                        "in": "query",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to the asset with this exact numeric ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        },
                        "description": "Multiple values may be separated by commas.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "in": "query",
                        "name": "owner",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to assets with this exact owner name. Optional."
                    },
                    {
                        "in": "query",
                        "name": "owner__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "description": "Filters to assets whose owner name is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "in": "query",
                        "name": "room_db_id",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to assets whose current location's room ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "room_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Alias for room_db_id. Filters to assets whose current location's room ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "search",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Free-text search across description, customer_reference, type, owner, manufacturer, model_number, serial_number, and customer_properties. Optional."
                    },
                    {
                        "in": "query",
                        "name": "status",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "assigned",
                                "unassigned"
                            ]
                        },
                        "description": "Filters to assets with (`assigned`) or without (`unassigned`) at least one linked device. Distinct from the status__in field filter, which filters on the asset's actual status field. Optional."
                    },
                    {
                        "in": "query",
                        "name": "status__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "description": "Filters to assets whose status (UNPAIRED, ACTIVE, IN_USE, NOT_IN_USE, MISSING) is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "type",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to assets with this exact type name. Optional."
                    },
                    {
                        "in": "query",
                        "name": "type__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "description": "Filters to assets whose type name is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "zone_db_id",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to assets whose current location's zone ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "zone_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Alias for zone_db_id. Filters to assets whose current location's zone ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    }
                ],
                "tags": [
                    "Assets"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedAssetViewList"
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedAssetViewList"
                                }
                            }
                        },
                        "description": "A paginated list of assets."
                    }
                }
            }
        },
        "/asset-led-request-history": {
            "get": {
                "operationId": "asset_led_request_history_list",
                "description": "Returns a paginated list of asset LED activation request history records, each nesting the asset (`SimpleAssetAndAssetLocationSerializer`) and the underlying `led_request_history` fields (`device_id`, `monitor_id`, `is_led_enabled`, `led_event_type`).\n\nThis history is append-only; there are no create/update/delete operations on this endpoint.\n\nSupports filtering by `asset_db_id` and `created` range (`created__gte`/`created__lte`). Scopes results to the campuses/buildings/floors/rooms the authenticated user has permission to view.",
                "summary": "Retrieves a list of asset LED request history records",
                "parameters": [
                    {
                        "in": "query",
                        "name": "asset_db_id",
                        "schema": {
                            "type": "number"
                        },
                        "description": "Filters to LED requests for this asset ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "created__gte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Filters to LED requests created at or after this timestamp, in RFC 3339 format. Optional."
                    },
                    {
                        "in": "query",
                        "name": "created__lte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Filters to LED requests created at or before this timestamp, in RFC 3339 format. Optional."
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "tags": [
                    "Asset Led Request Histories"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedAssetLedRequestHistoryList"
                                }
                            }
                        },
                        "description": "A paginated list of asset LED request history records."
                    }
                }
            }
        },
        "/asset-owner/": {
            "get": {
                "operationId": "asset_owner_list",
                "description": "Returns a paginated list of asset owners. An asset owner is a simple named entity (`name`, e.g. a department or organization) that an asset can be assigned to. It has no other configuration.",
                "summary": "Retrieves a list of asset owners",
                "parameters": [
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "tags": [
                    "Asset Owners"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedAssetOwnerList"
                                }
                            }
                        },
                        "description": "A paginated list of asset owners."
                    }
                }
            },
            "post": {
                "operationId": "asset_owner_create",
                "description": "Creates a new asset owner record with a `name`.",
                "summary": "Creates an asset owner",
                "tags": [
                    "Asset Owners"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AssetOwner"
                            }
                        }
                    },
                    "required": true
                },
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "201": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AssetOwner"
                                }
                            }
                        },
                        "description": "The newly created asset owner."
                    }
                }
            }
        },
        "/asset-owner/{id}/": {
            "get": {
                "operationId": "asset_owner_retrieve",
                "description": "Returns a single asset owner by its numeric ID.",
                "summary": "Retrieves an asset owner by ID",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this asset owner.",
                        "required": true
                    }
                ],
                "tags": [
                    "Asset Owners"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AssetOwner"
                                }
                            }
                        },
                        "description": "The requested asset owner."
                    }
                }
            },
            "put": {
                "operationId": "asset_owner_update",
                "description": "Replaces an existing asset owner's `name`.",
                "summary": "Replaces an asset owner",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this asset owner.",
                        "required": true
                    }
                ],
                "tags": [
                    "Asset Owners"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AssetOwner"
                            }
                        }
                    },
                    "required": true
                },
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AssetOwner"
                                }
                            }
                        },
                        "description": "The updated asset owner."
                    }
                }
            },
            "delete": {
                "operationId": "asset_owner_destroy",
                "description": "Deletes an asset owner. Deletes any `AssetNotificationCondition` records that reference this owner first, so notification rules scoped to this owner are silently removed along with it.",
                "summary": "Deletes an asset owner",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this asset owner.",
                        "required": true
                    }
                ],
                "tags": [
                    "Asset Owners"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No response body"
                    }
                }
            }
        },
        "/asset-search": {
            "get": {
                "operationId": "asset_search_list",
                "description": "Returns a paginated list of assets matching search and filter criteria, backed by the read-only `asset_search_view` database view rather than the `Asset` table directly.\n\nEach result includes `asset_locations` — a list built from the asset's current (and historical, if present) location rows, each with `{last_updated_at, location: {campus/building/floor/room/zone as {id, xxx_id, xxx_description}}, confidence}` — and arbitrary customer-supplied `customer_properties` JSON.\n\nSupports free-text `search` across description, customer_reference, type, owner, manufacturer, model_number, serial_number, and `customer_properties`; exact/`__in` filters on campus/building/floor/room/zone (by DB ID or text ID), `type`, `owner`, and `status` (one of UNPAIRED, ACTIVE, IN_USE, NOT_IN_USE, MISSING); and `ordering`, which accepts `last_updated_at` as an alias for `last_reported_at`, the field's actual name on this view.\n\nThis endpoint does not support CSV export — use `/asset-search-csv` instead, which serves the same filtered result set with additional fields.\n\nScopes results to the campuses/buildings/floors/rooms the authenticated user has permission to view.",
                "summary": "Searches for assets",
                "parameters": [
                    {
                        "in": "query",
                        "name": "building_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to assets in this building ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "building_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648
                            }
                        },
                        "description": "Filters to assets in these building IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "building_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to assets in the building with this exact text code. Optional."
                    },
                    {
                        "in": "query",
                        "name": "campus_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to assets in this campus ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "campus_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648
                            }
                        },
                        "description": "Filters to assets in these campus IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "campus_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to assets in the campus with this exact text code. Optional."
                    },
                    {
                        "in": "query",
                        "name": "floor_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to assets on this floor ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "floor_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648
                            }
                        },
                        "description": "Filters to assets on these floor IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "floor_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to assets on the floor with this exact text code. Optional."
                    },
                    {
                        "in": "query",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to the asset with this exact numeric ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        },
                        "description": "Filters to assets with these numeric IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "ordering",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Comma-separated field name(s) to sort by, prefixed with \"-\" for descending. Accepts last_updated_at as an alias for last_reported_at. Optional; defaults to description."
                    },
                    {
                        "in": "query",
                        "name": "owner",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to assets with this exact owner name. Optional."
                    },
                    {
                        "in": "query",
                        "name": "owner__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "description": "Filters to assets whose owner name is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "in": "query",
                        "name": "room_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to assets in this room ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "room_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648
                            }
                        },
                        "description": "Filters to assets in these room IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "room_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to assets in the room with this exact text code. Optional."
                    },
                    {
                        "in": "query",
                        "name": "search",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Free-text search across description, customer_reference, type, owner, manufacturer, model_number, serial_number, and customer_properties. Optional."
                    },
                    {
                        "in": "query",
                        "name": "status",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to assets with this exact status (UNPAIRED, ACTIVE, IN_USE, NOT_IN_USE, MISSING). Optional."
                    },
                    {
                        "in": "query",
                        "name": "status__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string",
                                "enum": [
                                    "ACTIVE",
                                    "IN_USE",
                                    "MISSING",
                                    "NOT_IN_USE",
                                    "UNPAIRED"
                                ]
                            }
                        },
                        "description": "Filters to assets whose status is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "type",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to assets with this exact type name. Optional."
                    },
                    {
                        "in": "query",
                        "name": "type__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "description": "Filters to assets whose type name is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "zone_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to assets in this zone ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "zone_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648
                            }
                        },
                        "description": "Filters to assets in these zone IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "zone_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to assets in the zone with this exact text code. Optional."
                    }
                ],
                "tags": [
                    "Asset Searches"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedAssetSearchList"
                                }
                            }
                        },
                        "description": "A paginated list of matching assets."
                    }
                }
            }
        },
        "/asset-search-csv": {
            "post": {
                "operationId": "asset_search_csv_create",
                "description": "Starts an asynchronous CSV export of assets matching the current search/filter criteria (same parameters as this endpoint's `list` action) and emails the resulting file.\n\nRequires `view_asset` permission and either an `email` field in the request body or an email address on the requesting user's account.",
                "summary": "Requests an asset search CSV export",
                "parameters": [
                    {
                        "in": "query",
                        "name": "format",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "csv",
                                "json"
                            ]
                        },
                        "description": "Response format override. Optional. Allowed values: csv, json."
                    }
                ],
                "tags": [
                    "Asset Search CSVs"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AssetSearchCSV"
                            }
                        }
                    }
                },
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AssetSearchCsvRequestResponse"
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "$ref": "#/components/schemas/AssetSearchCsvRequestResponse"
                                }
                            }
                        },
                        "description": "The CSV export was requested (or failed to queue); see message for details."
                    }
                }
            }
        },
        "/asset-type/": {
            "get": {
                "operationId": "asset_type_list",
                "description": "Returns a paginated list of asset types. An asset type is a simple named category (`name`) with an `is_displayed` flag controlling whether it appears as a selectable option in the UI. It has no other configuration.",
                "summary": "Retrieves a list of asset types",
                "parameters": [
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "tags": [
                    "Asset Types"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedAssetTypeList"
                                }
                            }
                        },
                        "description": "A paginated list of asset types."
                    }
                }
            },
            "post": {
                "operationId": "asset_type_create",
                "description": "Creates a new asset type record with a `name` and optional `is_displayed` flag.",
                "summary": "Creates an asset type",
                "tags": [
                    "Asset Types"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AssetType"
                            }
                        }
                    },
                    "required": true
                },
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "201": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AssetType"
                                }
                            }
                        },
                        "description": "The newly created asset type."
                    }
                }
            }
        },
        "/asset-type/{id}/": {
            "get": {
                "operationId": "asset_type_retrieve",
                "description": "Returns a single asset type by its numeric ID.",
                "summary": "Retrieves an asset type by ID",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this asset type.",
                        "required": true
                    }
                ],
                "tags": [
                    "Asset Types"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AssetType"
                                }
                            }
                        },
                        "description": "The requested asset type."
                    }
                }
            },
            "put": {
                "operationId": "asset_type_update",
                "description": "Replaces an existing asset type's `name`/`is_displayed` fields.",
                "summary": "Replaces an asset type",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this asset type.",
                        "required": true
                    }
                ],
                "tags": [
                    "Asset Types"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AssetType"
                            }
                        }
                    },
                    "required": true
                },
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AssetType"
                                }
                            }
                        },
                        "description": "The updated asset type."
                    }
                }
            },
            "delete": {
                "operationId": "asset_type_destroy",
                "description": "Deletes an asset type. Deletes any `AssetNotificationCondition` records that reference this type first, so notification rules scoped to this type are silently removed along with it.",
                "summary": "Deletes an asset type",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this asset type.",
                        "required": true
                    }
                ],
                "tags": [
                    "Asset Types"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No response body"
                    }
                }
            }
        },
        "/asset/{id}/": {
            "get": {
                "operationId": "asset_retrieve",
                "description": "Returns details for a single asset by its numeric ID, with the same shape as the list endpoint.",
                "summary": "Retrieves an asset by ID",
                "parameters": [
                    {
                        "in": "query",
                        "name": "format",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "csv",
                                "json"
                            ]
                        },
                        "description": "Response format override. Optional. Allowed values: csv, json."
                    },
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this asset.",
                        "required": true
                    }
                ],
                "tags": [
                    "Assets"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AssetView"
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "$ref": "#/components/schemas/AssetView"
                                }
                            }
                        },
                        "description": "The requested asset."
                    }
                }
            }
        },
        "/asset/bulk-update/": {
            "put": {
                "operationId": "asset_bulk_update_update",
                "description": "Updates one or more fields on every asset that matches the **current query filters** (the same filters documented on `list`, e.g. `campus_db_id`, `type__in`, `status__in`, `search`, etc.).\n\n**Important:** the API accepts the `asset_ids` field in the request body but does NOT use it to select which assets to update — only the active filter query parameters determine the target set; `asset_ids` has no effect on this endpoint today.\n\n`update_fields` is a list of `{field_name, value}` pairs, where `field_name` is one of:\n- `description`\n- `type`\n- `owner`\n- `manufacturer`\n- `model_number`\n\nFor `type`/`owner`, the API resolves `value` by name to the matching `AssetType`/`AssetOwner` and returns 400 if no match is found; duplicate `field_name` entries are rejected. The API always skips (rather than updates) any asset with `is_integrations=True` (managed by an external integration) and reports skipped assets in `skipped`.\n\nReturns 400 if the filtered target set is empty or exceeds the configured maximum (`ASSET_BULK_UPDATE_MAX_NUMBER`), and 409 if every matched asset was skipped (i.e. nothing was actually updated).",
                "summary": "Updates multiple assets",
                "parameters": [
                    {
                        "in": "query",
                        "name": "format",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "csv",
                                "json"
                            ]
                        },
                        "description": "Response format override. Optional. Allowed values: csv, json."
                    }
                ],
                "tags": [
                    "Assets"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AssetBulkUpdate"
                            }
                        }
                    },
                    "required": true
                },
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/BulkUpdateAssetResponse"
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "$ref": "#/components/schemas/BulkUpdateAssetResponse"
                                }
                            }
                        },
                        "description": "Assets were updated (integration-managed matches, if any, are listed in `skipped`)."
                    },
                    "409": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/BulkUpdateAssetAllSkippedResponse"
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "$ref": "#/components/schemas/BulkUpdateAssetAllSkippedResponse"
                                }
                            }
                        },
                        "description": "No assets were updated because every matched asset is integration-managed."
                    }
                }
            }
        },
        "/asset/customer-reference/{customer_reference}/": {
            "get": {
                "operationId": "asset_customer_reference_retrieve",
                "description": "Returns a single asset for the provided `customer_reference` — the unique, customer/SAP-supplied identifier used as the external join key for integration workflows (as opposed to the internal numeric ID used by `/asset/{id}`). Returns the same response shape as `retrieve`, or a 404 if no asset has that customer_reference.",
                "summary": "Retrieves an asset by customer reference",
                "parameters": [
                    {
                        "in": "path",
                        "name": "customer_reference",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Unique, customer/SAP-supplied identifier of the asset.",
                        "required": true
                    },
                    {
                        "in": "query",
                        "name": "format",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "csv",
                                "json"
                            ]
                        },
                        "description": "Response format override. Optional. Allowed values: csv, json."
                    }
                ],
                "tags": [
                    "Assets"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AssetView"
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "$ref": "#/components/schemas/AssetView"
                                }
                            }
                        },
                        "description": "The requested asset."
                    }
                }
            }
        },
        "/asset/unique-description-count/": {
            "get": {
                "operationId": "asset_unique_description_count_retrieve",
                "description": "Returns a paginated list of `{description, description_count}` pairs — the distinct asset descriptions currently matching the active filters, each with a count of how many assets share that description, ordered by count descending.\n\nAccepts the same filters as `list`, plus a `search` query parameter that performs a full-text match against `description` before grouping. This `search` performs a full-text search, distinct from the icontains-style `search` used elsewhere in this API.",
                "summary": "Retrieves asset counts by unique description",
                "parameters": [
                    {
                        "in": "query",
                        "name": "format",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "csv",
                                "json"
                            ]
                        },
                        "description": "Response format override. Optional. Allowed values: csv, json."
                    }
                ],
                "tags": [
                    "Assets"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/UniqueAssetDescription"
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "$ref": "#/components/schemas/UniqueAssetDescription"
                                }
                            }
                        },
                        "description": "A paginated list of description/count pairs."
                    }
                }
            }
        },
        "/building/": {
            "get": {
                "operationId": "building_list",
                "description": "Returns a paginated list of buildings as GeoJSON `Feature` objects (geometry is a `polygon`), each nesting a summary `campus` object.\n\n`pause_alerts`/`pause_integrations` reflect whether an active maintenance-window `BuildingProfile` currently has that flag set for the building.\n\nSupports filtering by `campus` in addition to the documented filterset fields. Sorts results naturally by `building_description` unless the `ordering` parameter is supplied. Scopes results to the campuses/buildings the authenticated user has permission to view.",
                "summary": "Retrieves a list of buildings",
                "parameters": [
                    {
                        "in": "query",
                        "name": "campus",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to buildings belonging to this campus's numeric ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "campus_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to buildings belonging to these campus IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "format",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "csv",
                                "json"
                            ]
                        },
                        "description": "Response format override. Optional. Allowed values: csv, json."
                    },
                    {
                        "in": "query",
                        "name": "id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        },
                        "description": "Filters to buildings with these numeric IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "last_sync_status__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "description": "Filters to buildings with these last external sync outcomes (SUCCESS, FAILURE, NOT_SYNCED). Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "in": "query",
                        "name": "pause_alerts",
                        "schema": {
                            "type": "boolean"
                        },
                        "description": "Filters to buildings whose active maintenance-window BuildingProfile has alerts paused (true) or not (false). Optional."
                    },
                    {
                        "in": "query",
                        "name": "pause_integrations",
                        "schema": {
                            "type": "boolean"
                        },
                        "description": "Filters to buildings whose active maintenance-window BuildingProfile has integrations paused (true) or not (false). Optional."
                    },
                    {
                        "name": "search",
                        "required": false,
                        "in": "query",
                        "description": "A search term.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "tags": [
                    "Buildings"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedBuildingGeoJsonList"
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedBuildingGeoJsonList"
                                }
                            }
                        },
                        "description": "A paginated list of buildings."
                    }
                }
            }
        },
        "/building-roll-up/": {
            "get": {
                "operationId": "building_roll_up_list",
                "description": "Returns a paginated, read-only list of denormalized per-building metric rollups as GeoJSON `Feature` objects (geometry is a `polygon`). Includes building identity/address fields (`building_id`, `building_description`, `street1`/`street2`, `city`, `state`, `zip_code`, `country`, `campus_id`, `campus_db_id`, `campus_description`, `rotation`, `is_floor_plan_enabled`) plus the same sensor/alert, occupancy/people-count, asset-status, and device-status aggregate metrics as the campus roll-up (`asset_count`, `in_use_asset_count`, `missing_asset_count`, `offline_device_count`, etc).\n\nThis is a materialized/precomputed read model with no create/update/delete operations.\n\nSorts results naturally by `building_description` unless the `ordering` parameter is supplied.\n\nScopes results to the campuses/buildings the authenticated user has permission to view.",
                "summary": "Retrieves a list of building roll-ups",
                "parameters": [
                    {
                        "in": "query",
                        "name": "campus_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to building roll-ups belonging to this campus ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to the building roll-up with this exact numeric ID. Optional."
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "search",
                        "required": false,
                        "in": "query",
                        "description": "A search term.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "tags": [
                    "Building Roll Ups"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedBuildingRollUpGeoJsonList"
                                }
                            }
                        },
                        "description": "A paginated list of building roll-ups."
                    }
                }
            }
        },
        "/building/{id}/": {
            "get": {
                "operationId": "building_retrieve",
                "description": "Returns a single building by its numeric ID, as a GeoJSON `Feature` object with the same shape as the list endpoint, including `last_sync_status` (SUCCESS/FAILURE/NOT_SYNCED) and `is_floor_plan_enabled`, which controls whether this building's floors use drawn floor plans or flat, manually-defined room/zone locations.",
                "summary": "Retrieves a building by ID",
                "parameters": [
                    {
                        "in": "query",
                        "name": "format",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "csv",
                                "json"
                            ]
                        },
                        "description": "Response format override. Optional. Allowed values: csv, json."
                    },
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this building.",
                        "required": true
                    }
                ],
                "tags": [
                    "Buildings"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/BuildingGeoJson"
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "$ref": "#/components/schemas/BuildingGeoJson"
                                }
                            }
                        },
                        "description": "The requested building."
                    }
                }
            }
        },
        "/campus/": {
            "get": {
                "operationId": "campus_list",
                "description": "Returns a paginated list of campuses as GeoJSON `Feature` objects (geometry is a `multi_polygon`).\n\nEach campus includes live-computed `building_count` and `room_count` fields (non-deleted children only) plus people-count/occupancy/sensor rollup fields.\n\nSorts results naturally by `campus_description` unless the `ordering` parameter is supplied. Scopes results to the campuses the authenticated user has permission to view.",
                "summary": "Retrieves a list of campuses",
                "parameters": [
                    {
                        "in": "query",
                        "name": "id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        },
                        "description": "Filters to campuses with these numeric IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "search",
                        "required": false,
                        "in": "query",
                        "description": "A search term.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "tags": [
                    "Campuses"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedCampusGeoJsonList"
                                }
                            }
                        },
                        "description": "A paginated list of campuses."
                    }
                }
            }
        },
        "/campus-roll-up/": {
            "get": {
                "operationId": "campus_roll_up_list",
                "description": "Returns a paginated, read-only list of denormalized per-campus metric rollups as GeoJSON `Feature` objects (geometry is a `multi_polygon`).\n\nEach row aggregates:\n- sensor/alert counts (`sensor_count`, `active_alert_count`)\n- occupancy/people-count fields (`people_count`, `is_occupied`, `occupancy_last_reported_at`, etc.)\n- asset-status breakdown counts (`asset_count`, `in_use_asset_count`, `unpaired_asset_count`, `active_asset_count`, `not_in_use_asset_count`, `missing_asset_count`, `missing_asset_count_last_24_hours`)\n- device-status breakdown counts (`device_count`, `offline_device_count`, `active_device_count`, `ready_to_connect_device_count`)\n\nThis is a materialized/precomputed read model with no create/update/delete operations.\n\nSorts results naturally by `campus_description` unless the `ordering` parameter is supplied.\n\nScopes results to the campuses the authenticated user has permission to view.",
                "summary": "Retrieves a list of campus roll-ups",
                "parameters": [
                    {
                        "in": "query",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to the campus roll-up with this exact numeric ID. Optional."
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "search",
                        "required": false,
                        "in": "query",
                        "description": "A search term.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "tags": [
                    "Campus Roll Ups"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedCampusRollUpGeoJsonList"
                                }
                            }
                        },
                        "description": "A paginated list of campus roll-ups."
                    }
                }
            }
        },
        "/campus/{id}/": {
            "get": {
                "operationId": "campus_retrieve",
                "description": "Returns a single campus by its numeric ID, as a GeoJSON `Feature` object with the same shape as the list endpoint.",
                "summary": "Retrieves a campus by ID",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this campus.",
                        "required": true
                    }
                ],
                "tags": [
                    "Campuses"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/CampusGeoJson"
                                }
                            }
                        },
                        "description": "The requested campus."
                    }
                }
            }
        },
        "/device/": {
            "get": {
                "operationId": "device_list",
                "description": "Returns a paginated list of devices — the physical, serialized MQFlex hardware units (as opposed to `DeviceModel`, the catalog/SKU-level definition each device references).\n\nEach device nests its `device_model`, attached `sensors`, paired `asset` (if any, via the Device↔Asset many-to-many `AssetDevice` link), installation notes/photos, and `device_location` (the currently-active location, i.e. the `DeviceLocation` row with a null `end_date`).\n\nKey fields: `confidence` (a `LocationHierarchy` enum — CAMPUS/BUILDING/FLOOR/ROOM/ZONE — indicating location precision), `status` (OFFLINE/ACTIVE/READY_TO_CONNECT/UNKNOWN), and `properties` (free-form JSON, validated against the device model's `properties_schema`).\n\nSupports rich filtering (`device_id`, `asset_db_id`(`__isnull`), `battery_level__lte`, `installed_date` range, `status__in`, `device_model_db_id__in`, `sensor_type__in`, campus/building/floor/room/zone DB ID — location filters match the device's currently-active location only) and free-text `search` across device_id, description, model name, status, last_reported_at, and active location descriptions.\n\nScopes results to the campuses/buildings/floors/rooms/zones the authenticated user has permission to view.",
                "summary": "Retrieves a list of devices",
                "parameters": [
                    {
                        "in": "query",
                        "name": "asset_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to devices paired to this asset ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "asset_db_id__isnull",
                        "schema": {
                            "type": "boolean"
                        },
                        "description": "Filters to devices with (false) or without (true) a paired asset. Optional."
                    },
                    {
                        "in": "query",
                        "name": "battery_level__lte",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to devices with a battery level at or below this value. Optional."
                    },
                    {
                        "in": "query",
                        "name": "building_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to devices whose currently-active location's building ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "campus_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to devices whose currently-active location's campus ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "device_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to the device with this hardware identifier (case-insensitive, normalized to uppercase). Optional."
                    },
                    {
                        "in": "query",
                        "name": "device_model_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        },
                        "description": "Filters to devices belonging to these device model IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "floor_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to devices whose currently-active location's floor ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "format",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "csv",
                                "json"
                            ]
                        },
                        "description": "Response format override. Optional. Allowed values: csv, json."
                    },
                    {
                        "in": "query",
                        "name": "id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        },
                        "description": "Filters to devices with these numeric IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "installed_date__gte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Filters to devices installed at or after this timestamp, in RFC 3339 format. Optional."
                    },
                    {
                        "in": "query",
                        "name": "installed_date__lte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Filters to devices installed at or before this timestamp, in RFC 3339 format. Optional."
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "in": "query",
                        "name": "room_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to devices whose currently-active location's room ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "search",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Free-text search across device_id, description, device model name, status, last_reported_at, and active location descriptions. Optional."
                    },
                    {
                        "in": "query",
                        "name": "sensor_type__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "description": "Filters to devices with an attached sensor whose sensor type name is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "status__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "description": "Filters to devices whose status (OFFLINE, ACTIVE, READY_TO_CONNECT, UNKNOWN) is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "zone_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to devices whose currently-active location's zone ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    }
                ],
                "tags": [
                    "Devices"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedDeviceList"
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedDeviceList"
                                }
                            }
                        },
                        "description": "A paginated list of devices."
                    }
                }
            }
        },
        "/device-model/": {
            "get": {
                "operationId": "device_model_list",
                "description": "Returns a paginated list of device models — catalog/SKU-level definitions of an MQFlex hardware device type (as opposed to `Device`, which is a physical, serialized instance referencing a model).\n\nEach model includes a computed `sensor_models` field listing the `SensorModel`s this device model supports (sourced from the `DeviceModelSensorModel` through-table), each annotated with `is_default_selection`.\n\n`setup_action_type` (`TAG` vs `DEVICE`) controls which installation/pairing workflow the frontend uses for devices of this model.\n\n`properties_schema` is a JSON schema (field name → allowable values) that validates the free-form `properties` JSON set on individual `Device` records of this model.",
                "summary": "Retrieves a list of device models",
                "parameters": [
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "tags": [
                    "Device Models"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedDeviceModelList"
                                }
                            }
                        },
                        "description": "A paginated list of device models."
                    }
                }
            }
        },
        "/device-model-sensor-model/": {
            "get": {
                "operationId": "device_model_sensor_model_list",
                "description": "Returns a paginated list of `DeviceModelSensorModel` records — a pure join table describing which `SensorModel`s a given `DeviceModel` supports. Each row nests the full `device_model` and `sensor_model` objects and carries one additional flag, `is_default_selection`, indicating whether that sensor model should be pre-selected in the UI when a device of this model is provisioned. The `(device_model, sensor_model)` pair is unique.\n\nSupports filtering by `device_model_id`.",
                "summary": "Retrieves a list of device model sensor models",
                "parameters": [
                    {
                        "in": "query",
                        "name": "device_model_id",
                        "schema": {
                            "type": "number"
                        },
                        "description": "Filters to associations for this device model ID. Optional."
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "tags": [
                    "Device Model Sensor Models"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedDeviceModelSensorModelList"
                                }
                            }
                        },
                        "description": "A paginated list of device model sensor model associations."
                    }
                }
            }
        },
        "/device-model-sensor-model/{id}/": {
            "get": {
                "operationId": "device_model_sensor_model_retrieve",
                "description": "Returns a single device-model/sensor-model association by its numeric ID.",
                "summary": "Retrieves a device model sensor model by ID",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this device model sensor model.",
                        "required": true
                    }
                ],
                "tags": [
                    "Device Model Sensor Models"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/DeviceModelSensorModel"
                                }
                            }
                        },
                        "description": "The requested device model sensor model association."
                    }
                }
            }
        },
        "/device-model/{id}/": {
            "get": {
                "operationId": "device_model_retrieve",
                "description": "Returns a single device model by its numeric ID, with the same shape as the list endpoint.",
                "summary": "Retrieves a device model by ID",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this device model.",
                        "required": true
                    }
                ],
                "tags": [
                    "Device Models"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/DeviceModel"
                                }
                            }
                        },
                        "description": "The requested device model."
                    }
                }
            }
        },
        "/device-model/dev-eui/{dev_eui}": {
            "get": {
                "operationId": "device_model_dev_eui_retrieve",
                "description": "Resolves a hardware Dev EUI to the `DeviceModel` it belongs to — used during device installation/provisioning to determine a not-yet-installed device's model before creating its `Device` record.\n\nNormalizes and uppercases the EUI, and requires it to be no more than 16 characters (returns 400 otherwise).\n\nResolution order:\n- (1) if a `Device` already exists with that `device_id`, the API returns its `device_model` directly, but raises a 400 `ValidationError` if that device is already marked installed.\n- (2) otherwise the API parses the EUI as a hex integer and looks it up in `DeviceModelIdentifierRange`, a table mapping hex-value ranges to `DeviceModel`s (manufacturer EUI blocks pre-assigned to specific models), returning 404 if no range matches.",
                "summary": "Retrieves a device model by Dev EUI",
                "parameters": [
                    {
                        "in": "path",
                        "name": "dev_eui",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Hardware Dev EUI to resolve, normalized/uppercased and no more than 16 characters.",
                        "required": true
                    }
                ],
                "tags": [
                    "Device Models"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/DeviceModel"
                                }
                            }
                        },
                        "description": "The device model matching the given Dev EUI."
                    }
                }
            }
        },
        "/device/{id}/": {
            "get": {
                "operationId": "device_retrieve",
                "description": "Returns a single device by its numeric ID, with the same shape as the list endpoint.",
                "summary": "Retrieves a device by ID",
                "parameters": [
                    {
                        "in": "query",
                        "name": "format",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "csv",
                                "json"
                            ]
                        },
                        "description": "Response format override. Optional. Allowed values: csv, json."
                    },
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this device.",
                        "required": true
                    }
                ],
                "tags": [
                    "Devices"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Device"
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "$ref": "#/components/schemas/Device"
                                }
                            }
                        },
                        "description": "The requested device."
                    }
                }
            }
        },
        "/endpoint/": {
            "get": {
                "operationId": "endpoint_list",
                "description": "Returns a paginated list of webhook/notification endpoint subscriptions. Each `Endpoint` row subscribes to exactly one `event_type` (see the field's enum for the full list, e.g. ASSET_ARRIVED_ROOM, DEVICE_BATTERY_LOW, LED_ACTIVATED, SENSOR_THRESHOLD_TRIGGER); one row is one event-type subscription, not a subscribe-to-everything config.\n\nWhen that event fires and `enabled` is true, the platform POSTs to the URL formed by concatenating `base_url` + `extended_url`.\n\n`is_sap=True` switches delivery to mTLS client-certificate authentication plus HTTP Basic Auth, both configured via **global** application settings (not per-row credentials); `is_sap=False` sends a plain unauthenticated POST. The model has no per-row header/auth-config fields despite otherwise resembling a generic webhook config.\n\nSupports exact filtering by `event_type`.",
                "summary": "Retrieves a list of webhook endpoints",
                "parameters": [
                    {
                        "in": "query",
                        "name": "event_type",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to endpoint subscriptions for this exact event type. Optional."
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "tags": [
                    "Endpoints"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedEndpointList"
                                }
                            }
                        },
                        "description": "A paginated list of webhook endpoint subscriptions."
                    }
                }
            },
            "post": {
                "operationId": "endpoint_create",
                "description": "Creates a new webhook endpoint subscription for a single `event_type`. See `list` for field semantics, in particular the `is_sap` delivery-mode flag.",
                "summary": "Creates a webhook endpoint",
                "tags": [
                    "Endpoints"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Endpoint"
                            }
                        }
                    },
                    "required": true
                },
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "201": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Endpoint"
                                }
                            }
                        },
                        "description": "The newly created webhook endpoint subscription."
                    }
                }
            }
        },
        "/endpoint/{id}/": {
            "get": {
                "operationId": "endpoint_retrieve",
                "description": "Returns a single webhook endpoint subscription by its numeric ID.",
                "summary": "Retrieves a webhook endpoint by ID",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this endpoint.",
                        "required": true
                    }
                ],
                "tags": [
                    "Endpoints"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Endpoint"
                                }
                            }
                        },
                        "description": "The requested webhook endpoint subscription."
                    }
                }
            },
            "put": {
                "operationId": "endpoint_update",
                "description": "Replaces an existing webhook endpoint subscription's fields.",
                "summary": "Replaces a webhook endpoint",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this endpoint.",
                        "required": true
                    }
                ],
                "tags": [
                    "Endpoints"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Endpoint"
                            }
                        }
                    },
                    "required": true
                },
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Endpoint"
                                }
                            }
                        },
                        "description": "The updated webhook endpoint subscription."
                    }
                }
            },
            "delete": {
                "operationId": "endpoint_destroy",
                "description": "Deletes a webhook endpoint subscription.",
                "summary": "Deletes a webhook endpoint",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this endpoint.",
                        "required": true
                    }
                ],
                "tags": [
                    "Endpoints"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No response body"
                    }
                }
            }
        },
        "/floor/": {
            "get": {
                "operationId": "floor_list",
                "description": "Returns a paginated list of floors as GeoJSON `Feature` objects (geometry is a `polygon`), each nesting a summary `building` object and `building_rotation`.\n\n`room_count`, `zone_count`, `bridge_count` (installed bridge hardware), and `bil_count` (available bridge-installation-location slots) are live-computed and exclude soft-deleted children.\n\nSupports filtering by `building` or `room` (integer IDs) in addition to the documented filterset fields. Scopes results to the campuses/buildings/floors the authenticated user has permission to view.",
                "summary": "Retrieves a list of floors",
                "parameters": [
                    {
                        "in": "query",
                        "name": "building",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to floors belonging to this building ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "building_db_id",
                        "schema": {
                            "type": "number"
                        },
                        "description": "Filters to floors belonging to this building ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "building_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to floors belonging to these building IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "floor_description",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to the floor with this exact human-readable name. Optional."
                    },
                    {
                        "in": "query",
                        "name": "floor_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to the floor with this exact text code. Optional."
                    },
                    {
                        "in": "query",
                        "name": "format",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "csv",
                                "json"
                            ]
                        },
                        "description": "Response format override. Optional. Allowed values: csv, json."
                    },
                    {
                        "in": "query",
                        "name": "id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        },
                        "description": "Filters to floors with these numeric IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "in": "query",
                        "name": "room",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to the floor containing this room ID. Optional."
                    },
                    {
                        "name": "search",
                        "required": false,
                        "in": "query",
                        "description": "A search term.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "tags": [
                    "Floors"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedFloorGeoJsonList"
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedFloorGeoJsonList"
                                }
                            }
                        },
                        "description": "A paginated list of floors."
                    }
                }
            }
        },
        "/floor-roll-up/": {
            "get": {
                "operationId": "floor_roll_up_list",
                "description": "Returns a paginated, read-only list of denormalized per-floor metric rollups as GeoJSON `Feature` objects (geometry is a `polygon`). Includes floor/building identity fields (`floor_id`, `floor_description`, `building_id`, `building_db_id`, `building_description`, `campus_db_id`) plus the same sensor/alert, occupancy/people-count, asset-status, and device-status aggregate metrics as the campus/building roll-ups.\n\nThis is a materialized/precomputed read model with no create/update/delete operations, and unlike the campus/building roll-ups this endpoint does not support the AI-summary sub-action.\n\nSorts results naturally by `floor_description` unless the `ordering` parameter is supplied.\n\nScopes results to the campuses/buildings/floors the authenticated user has permission to view.",
                "summary": "Retrieves a list of floor roll-ups",
                "parameters": [
                    {
                        "in": "query",
                        "name": "building_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to floor roll-ups belonging to this building ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to the floor roll-up with this exact numeric ID. Optional."
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "search",
                        "required": false,
                        "in": "query",
                        "description": "A search term.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "tags": [
                    "Floor Roll Ups"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedFloorRollUpGeoJsonList"
                                }
                            }
                        },
                        "description": "A paginated list of floor roll-ups."
                    }
                }
            }
        },
        "/floor/{id}/": {
            "get": {
                "operationId": "floor_retrieve",
                "description": "Returns a single floor by its numeric ID, as a GeoJSON `Feature` object with the same shape as the list endpoint.",
                "summary": "Retrieves a floor by ID",
                "parameters": [
                    {
                        "in": "query",
                        "name": "format",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "csv",
                                "json"
                            ]
                        },
                        "description": "Response format override. Optional. Allowed values: csv, json."
                    },
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this floor.",
                        "required": true
                    }
                ],
                "tags": [
                    "Floors"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/FloorGeoJson"
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "$ref": "#/components/schemas/FloorGeoJson"
                                }
                            }
                        },
                        "description": "The requested floor."
                    }
                }
            }
        },
        "/gateway/": {
            "get": {
                "operationId": "gateway_list",
                "description": "Returns a paginated list of gateways — the LoRa/cellular hardware units that relay tag/device signals back to the platform (the infrastructure counterpart to `Device`). Each row is annotated with its **latest** reported location (`campus`/`building`/`floor`/`room`/`zone` description and DB ID); unlike Device, which reflects the currently-open location interval, Gateway location tracking uses a most-recent-timestamp model rather than an open/closed date range.\n\nKey fields:\n- `status` (OFFLINE/ACTIVE/READY_TO_CONNECT/UNKNOWN, runtime connectivity)\n- `install_status` (AWAITING_PHOTOS/COMPLETED/UNKNOWN, installation workflow state)\n- `backhaul` (CELLULAR/ETHERNET/UNKNOWN, how the gateway reaches the internet)\n- `battery_level` (nullable, since many gateways are mains/PoE powered)\n- `imei` (relevant when `backhaul=CELLULAR`)\n\nSupports rich filtering (`node_id`, `mac_address`, `region`, `description` icontains, `install_status__in`, `status__in`, `backhaul__in`, `gateway_model_db_id__in`, `is_installed`, battery/installed-date/last-reported-at ranges, campus/building/floor/room/zone DB ID) and free-text `search`.\n\nScopes results to the campuses/buildings/floors/rooms/zones the authenticated user has permission to view.",
                "summary": "Retrieves a list of gateways",
                "parameters": [
                    {
                        "in": "query",
                        "name": "backhaul__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "description": "Filters to gateways whose backhaul (CELLULAR, ETHERNET, UNKNOWN) is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "battery_level_max",
                        "schema": {
                            "type": "integer",
                            "maximum": 2147483647,
                            "minimum": -2147483648,
                            "nullable": true
                        },
                        "description": "Filters to gateways with a battery level within this range (min,max). Optional."
                    },
                    {
                        "in": "query",
                        "name": "battery_level_min",
                        "schema": {
                            "type": "integer",
                            "maximum": 2147483647,
                            "minimum": -2147483648,
                            "nullable": true
                        },
                        "description": "Filters to gateways with a battery level within this range (min,max). Optional."
                    },
                    {
                        "in": "query",
                        "name": "building_db_id",
                        "schema": {
                            "type": "number"
                        },
                        "description": "Filters to gateways whose latest reported building ID matches. Optional."
                    },
                    {
                        "in": "query",
                        "name": "building_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to gateways whose latest reported building ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "campus_db_id",
                        "schema": {
                            "type": "number"
                        },
                        "description": "Filters to gateways whose latest reported campus ID matches. Optional."
                    },
                    {
                        "in": "query",
                        "name": "campus_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to gateways whose latest reported campus ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "description",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to gateways whose description contains this text (case-insensitive). Optional."
                    },
                    {
                        "in": "query",
                        "name": "description__icontains",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to gateways whose description contains this text (case-insensitive). Optional. Equivalent to description."
                    },
                    {
                        "in": "query",
                        "name": "floor_db_id",
                        "schema": {
                            "type": "number"
                        },
                        "description": "Filters to gateways whose latest reported floor ID matches. Optional."
                    },
                    {
                        "in": "query",
                        "name": "floor_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to gateways whose latest reported floor ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "format",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "csv",
                                "json"
                            ]
                        },
                        "description": "Response format override. Optional. Allowed values: csv, json."
                    },
                    {
                        "in": "query",
                        "name": "gateway_model_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to gateways belonging to these gateway model IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "gateway_model_id",
                        "schema": {
                            "type": "number"
                        },
                        "description": "Filters to gateways belonging to this exact gateway model ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        },
                        "description": "Filters to gateways with these numeric IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "install_status__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "description": "Filters to gateways whose install_status (AWAITING_PHOTOS, COMPLETED, UNKNOWN) is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "installed_date__gte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Filters to gateways installed at or after this timestamp, in RFC 3339 format. Optional."
                    },
                    {
                        "in": "query",
                        "name": "installed_date__lte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Filters to gateways installed at or before this timestamp, in RFC 3339 format. Optional."
                    },
                    {
                        "in": "query",
                        "name": "is_installed",
                        "schema": {
                            "type": "boolean"
                        },
                        "description": "Filters to gateways that have (true) or have not (false) completed the installation flow. Optional."
                    },
                    {
                        "in": "query",
                        "name": "last_reported_at__gte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Filters to gateways that last reported at or after this timestamp, in RFC 3339 format. Optional."
                    },
                    {
                        "in": "query",
                        "name": "last_reported_at__lte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Filters to gateways that last reported at or before this timestamp, in RFC 3339 format. Optional."
                    },
                    {
                        "in": "query",
                        "name": "mac_address",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to gateways whose MAC address contains this text (case-insensitive). Optional."
                    },
                    {
                        "in": "query",
                        "name": "mac_address__icontains",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to gateways whose MAC address contains this text (case-insensitive). Optional. Equivalent to mac_address."
                    },
                    {
                        "in": "query",
                        "name": "node_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to gateways whose node_id contains this text (case-insensitive). Optional."
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "in": "query",
                        "name": "region",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to gateways whose region contains this text (case-insensitive). Optional."
                    },
                    {
                        "in": "query",
                        "name": "region__icontains",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to gateways whose region contains this text (case-insensitive). Optional. Equivalent to region."
                    },
                    {
                        "in": "query",
                        "name": "room_db_id",
                        "schema": {
                            "type": "number"
                        },
                        "description": "Filters to gateways whose latest reported room ID matches. Optional."
                    },
                    {
                        "in": "query",
                        "name": "room_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to gateways whose latest reported room ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "name": "search",
                        "required": false,
                        "in": "query",
                        "description": "A search term.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "in": "query",
                        "name": "status__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "description": "Filters to gateways whose status (OFFLINE, ACTIVE, READY_TO_CONNECT, UNKNOWN) is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "zone_db_id",
                        "schema": {
                            "type": "number"
                        },
                        "description": "Filters to gateways whose latest reported zone ID matches. Optional."
                    },
                    {
                        "in": "query",
                        "name": "zone_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to gateways whose latest reported zone ID is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    }
                ],
                "tags": [
                    "Gateways"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedGatewayList"
                                }
                            },
                            "text/csv": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedGatewayList"
                                }
                            }
                        },
                        "description": "A paginated list of gateways."
                    }
                }
            }
        },
        "/integrations/asset-utilization-lite/": {
            "get": {
                "operationId": "integrations_asset_utilization_lite_list",
                "description": "Returns a paginated, read-only, denormalized list of `AssetUtilization` intervals — periods during which an asset was actively 'in use' per its configured utilization sensor thresholds — enriched with the asset's identity and location so integration clients don't need extra joins.\n\n`is_utilization=True` means the asset was in active use during `[start_date, end_date]`; a `null` `end_date` means the interval is still ongoing. `asset_device` lists the asset's attached devices.\n\nAll location fields (`campus_description`/`campus_id`, `building_description`/`building_id`, `floor_description`/`floor_id`, `room_description`/`room_id`, `zone_description`) reflect the asset's **current** location only (its open `AssetLocation` row), not the location at the time of the utilization interval.\n\nSupports filtering by `start_date`/`end_date` ranges, `customer_reference` (icontains), and current-location fields (`campus_id`/`campus_description`, `building_id`/`building_description`, `floor_id`/`floor_description`, `room_id`/`room_description`).\n\nScopes results to the campuses/buildings/floors/rooms the authenticated user has permission to view.",
                "summary": "Retrieves a list of lightweight asset utilization records",
                "parameters": [
                    {
                        "in": "query",
                        "name": "building_description",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to intervals whose asset's current building name contains this text (case-insensitive). Optional."
                    },
                    {
                        "in": "query",
                        "name": "building_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to intervals whose asset's current building text code matches exactly (case-insensitive). Optional."
                    },
                    {
                        "in": "query",
                        "name": "campus_description",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to intervals whose asset's current campus name contains this text (case-insensitive). Optional."
                    },
                    {
                        "in": "query",
                        "name": "campus_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to intervals whose asset's current campus text code matches exactly (case-insensitive). Optional."
                    },
                    {
                        "in": "query",
                        "name": "customer_reference",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to intervals whose asset's customer_reference contains this text (case-insensitive). Optional."
                    },
                    {
                        "in": "query",
                        "name": "end_date__gte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Filters to utilization intervals ending at or after this timestamp, in RFC 3339 format. Optional."
                    },
                    {
                        "in": "query",
                        "name": "end_date__lte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Filters to utilization intervals ending at or before this timestamp, in RFC 3339 format. Optional."
                    },
                    {
                        "in": "query",
                        "name": "floor_description",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to intervals whose asset's current floor name contains this text (case-insensitive). Optional."
                    },
                    {
                        "in": "query",
                        "name": "floor_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to intervals whose asset's current floor text code matches exactly (case-insensitive). Optional."
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "in": "query",
                        "name": "room_description",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to intervals whose asset's current room name contains this text (case-insensitive). Optional."
                    },
                    {
                        "in": "query",
                        "name": "room_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to intervals whose asset's current room text code matches exactly (case-insensitive). Optional."
                    },
                    {
                        "in": "query",
                        "name": "start_date__gte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Filters to utilization intervals starting at or after this timestamp, in RFC 3339 format. Optional."
                    },
                    {
                        "in": "query",
                        "name": "start_date__lte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Filters to utilization intervals starting at or before this timestamp, in RFC 3339 format. Optional."
                    }
                ],
                "tags": [
                    "Integrations"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedAssetUtilizationLiteList"
                                }
                            }
                        },
                        "description": "A paginated list of asset utilization intervals."
                    }
                }
            }
        },
        "/integrations/asset/{customer_reference}": {
            "delete": {
                "operationId": "integrations_asset_destroy",
                "description": "Soft-deletes every asset matching the given `customer_reference` (normally exactly one, since customer_reference is unique).\n\nThis is a soft delete (via django-softdelete): it sets the asset's `deleted_at` field, so the asset disappears from normal queries/endpoints, but the API does not physically remove the row and can restore it later — including automatically, if `upsert` is subsequently called with the same customer_reference.",
                "summary": "Deletes an asset (integration)",
                "parameters": [
                    {
                        "in": "path",
                        "name": "customer_reference",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Unique, customer/SAP-supplied identifier of the asset(s) to delete.",
                        "required": true
                    }
                ],
                "tags": [
                    "Integrations"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "All matching assets were soft-deleted."
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SapErrorResponse"
                                }
                            }
                        },
                        "description": "No asset with that customer_reference."
                    }
                }
            }
        },
        "/integrations/asset/{customer_reference}/led/activate": {
            "post": {
                "operationId": "integrations_asset_led_activate_create",
                "description": "Triggers the physical LED on the asset's location-tracking device so it can be visually located, identified by `customer_reference` in the path. Resolves the best device to light (preferring an LED-enabled location device, most-recently-reporting), then the nearest `Bridge` by RSSI/shared location if one exists.\n\nDebounces activation per device: if an LED request for that device started less than `LED_TIMEOUT_SECONDS` ago, the API sends no new hardware message and the response reports the remaining cooldown instead. Otherwise the API creates a new `LedRequest` and, if messaging is enabled, dispatches it asynchronously to the device.",
                "summary": "Activates an asset LED (integration)",
                "parameters": [
                    {
                        "in": "path",
                        "name": "customer_reference",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Unique, customer/SAP-supplied identifier of the asset.",
                        "required": true
                    }
                ],
                "tags": [
                    "Integrations"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "201": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SapActivateLedResponse"
                                }
                            }
                        },
                        "description": "A new LED activation request was created and dispatched; `timeout` is the configured `LED_TIMEOUT_SECONDS` cooldown window."
                    },
                    "202": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SapActivateLedResponse"
                                }
                            }
                        },
                        "description": "An LED request for this device is already active/cooling down; `timeout` is the number of seconds remaining before it can be retriggered."
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SapErrorResponse"
                                }
                            }
                        },
                        "description": "No asset with that customer_reference, or the asset has no device eligible for LED activation."
                    }
                }
            }
        },
        "/integrations/asset/{customer_reference}/location": {
            "get": {
                "operationId": "integrations_asset_location_retrieve",
                "description": "Returns current location data for a single asset, identified by `customer_reference`.\n\n`tag_identifier` lists the dash-formatted device IDs of every device currently paired to the asset (via `AssetDevice`).\n\nThe API populates `campus_id`/`building_id`/`room_id`/`zone_id` and `confidence` from the asset's current (open-ended) `AssetLocation` row; these are `null` if the asset has no current location. `location_updated_at` reflects when that location was recorded.",
                "summary": "Retrieves an asset's location (integration)",
                "parameters": [
                    {
                        "in": "path",
                        "name": "customer_reference",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Unique, customer/SAP-supplied identifier of the asset.",
                        "required": true
                    }
                ],
                "tags": [
                    "Integrations"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SapAssetLocationSearchResponse"
                                }
                            }
                        },
                        "description": "Asset found."
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SapErrorResponse"
                                }
                            }
                        },
                        "description": "No asset with that customer_reference."
                    }
                }
            }
        },
        "/integrations/asset/upsert": {
            "post": {
                "operationId": "integrations_asset_upsert_create",
                "description": "Creates or updates an asset by `customer_reference` — the unique external join key used for integration workflows. If an asset (including a previously soft-deleted one) already has this `customer_reference`, the API overwrites only the fields present as keys in the request body and un-deletes the asset if needed (200 response); otherwise it creates a new asset directly from the payload (201 response).\n\nSupply `asset_type`/`asset_owner` as plain name strings (not IDs): the API resolves each case-insensitively against existing records, auto-creates it if no match exists, or rejects the request with 409 if the name ambiguously matches more than one existing record.",
                "summary": "Upserts an asset (integration)",
                "tags": [
                    "Integrations"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SapUpsertRequest"
                            }
                        }
                    },
                    "required": true
                },
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SapUpsertResponse"
                                }
                            }
                        },
                        "description": "An existing asset with this customer_reference was found and updated (un-deleted if it had been soft-deleted)."
                    },
                    "201": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SapUpsertResponse"
                                }
                            }
                        },
                        "description": "No asset with this customer_reference existed; a new one was created."
                    },
                    "409": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SapErrorResponse"
                                }
                            }
                        },
                        "description": "The supplied asset_type or asset_owner name matches more than one existing record."
                    }
                }
            }
        },
        "/integrations/sensor-data-lite": {
            "get": {
                "operationId": "integrations_sensor_data_lite_list",
                "description": "Returns a paginated, denormalized/flattened list of sensor readings intended for lightweight integration consumption, joining device/asset/location context into a single row per reading so clients don't need to perform their own joins.\n\nNotable response behavior (in `to_representation`): converts `data` from Celsius if the sensor type is TEMPERATURE and the requesting user prefers Fahrenheit; converts `data` from kPa if the sensor type is PIPE_PRESSURE and the user prefers PSI; and, when rendering the response as CSV, flattens `data` from an object down to a single scalar value (overriding DAILY_ENERGY_USAGE with its `daily_energy_usage` value in that case).\n\nSupports filtering by `device_db_id`, `device_id`, `asset_db_id`, `sensor_type__in`, `timestamp` range, `is_alert_state`, campus/building/floor/room description or DB ID, and `customer_reference`.\n\nScopes results to the campuses/buildings/floors/rooms the authenticated user has permission to view.",
                "summary": "Retrieves a list of lightweight sensor data",
                "parameters": [
                    {
                        "in": "query",
                        "name": "asset_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to readings associated with this asset ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "building_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to readings in this building ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "building_description",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to readings with this exact building name. Optional."
                    },
                    {
                        "in": "query",
                        "name": "campus_description",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to readings with this exact campus name. Optional."
                    },
                    {
                        "in": "query",
                        "name": "campus_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to readings with this exact campus text code. Optional."
                    },
                    {
                        "in": "query",
                        "name": "customer_reference",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to readings whose associated asset has this exact customer_reference. Optional."
                    },
                    {
                        "in": "query",
                        "name": "device_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to readings from this device ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "device_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to readings from the device with this exact hardware identifier. Optional."
                    },
                    {
                        "in": "query",
                        "name": "floor_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to readings on this floor ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "floor_description",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to readings with this exact floor name. Optional."
                    },
                    {
                        "in": "query",
                        "name": "is_alert_state",
                        "schema": {
                            "type": "boolean"
                        },
                        "description": "Filters to readings in (true) or not in (false) an alert state. Optional."
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "in": "query",
                        "name": "room_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to readings in this room ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "room_description",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to readings with this exact room name. Optional."
                    },
                    {
                        "name": "search",
                        "required": false,
                        "in": "query",
                        "description": "A search term.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "in": "query",
                        "name": "sensor_type__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "description": "Filters to readings whose sensor type name is in this comma-separated list. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "timestamp__gte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Filters to readings recorded at or after this timestamp, in RFC 3339 format. Optional."
                    },
                    {
                        "in": "query",
                        "name": "timestamp__lte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Filters to readings recorded at or before this timestamp, in RFC 3339 format. Optional."
                    }
                ],
                "tags": [
                    "Integrations"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedSensorDataLiteResponseList"
                                }
                            }
                        },
                        "description": "A paginated list of sensor readings."
                    }
                }
            }
        },
        "/integrations/sync-asset-location": {
            "post": {
                "operationId": "integrations_sync_asset_location_create",
                "description": "Asynchronously re-syncs asset locations by dispatching a Celery task and returning immediately — a 200 response only means the API queued the sync, not that it completed.\n\nAccepts either `customer_references` (a list of specific assets to sync) or `from_date` (sync assets updated since this date); if `customer_references` is present it takes priority over `from_date`.\n\nThe API does not validate or require either field — omitting both still returns 200 and queues the task with empty criteria.",
                "summary": "Syncs asset locations (integration)",
                "tags": [
                    "Integrations"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SapSyncAssetLocationRequest"
                            }
                        }
                    }
                },
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Sync was queued."
                    }
                }
            }
        },
        "/related-asset/": {
            "get": {
                "operationId": "related_asset_list",
                "description": "Returns a paginated list of asset-to-asset relationships. Each row nests `from_asset` and `to_asset` as simplified asset objects (`id`, `description`, `customer_reference`).\n\nRelationships are undirected in effect: creating a relationship from asset A to asset B automatically creates the mirrored row from B to A (see `create`), so both directions typically appear in this list.\n\nSupports exact filtering by `from_asset`/`to_asset` (numeric IDs). Scopes results to relationships where the authenticated user has permission to view at least the current location of both linked assets.",
                "summary": "Retrieves a list of related assets",
                "parameters": [
                    {
                        "in": "query",
                        "name": "from_asset",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to relationships with this exact source asset ID. Optional."
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "search",
                        "required": false,
                        "in": "query",
                        "description": "A search term.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "in": "query",
                        "name": "to_asset",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to relationships with this exact target asset ID. Optional."
                    }
                ],
                "tags": [
                    "Related Assets"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedRelatedAssetList"
                                }
                            }
                        },
                        "description": "A paginated list of related-asset links."
                    }
                }
            },
            "post": {
                "operationId": "related_asset_create",
                "description": "Creates a relationship between two assets, supplied as `from_asset_id`/`to_asset_id`.\n\nAn asset cannot be related to itself, and a given `(from_asset, to_asset)` pair must be unique; returns 400 if a relationship between the two already exists.\n\nCreating one relationship row automatically creates its mirrored reverse row (B→A) as a side effect at the model level — the mirrored row does not itself appear as a separate object in the response.",
                "summary": "Creates a related asset link",
                "tags": [
                    "Related Assets"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RelatedAsset"
                            }
                        }
                    },
                    "required": true
                },
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "201": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RelatedAsset"
                                }
                            }
                        },
                        "description": "The newly created related-asset link."
                    }
                }
            }
        },
        "/related-asset/{id}/": {
            "delete": {
                "operationId": "related_asset_destroy",
                "description": "Deletes a single asset-to-asset relationship row by its numeric ID. Like `create`, this cascades: deleting one direction of the relationship automatically deletes its mirrored reverse row (B→A) as well, so a single DELETE removes the relationship in both directions.",
                "summary": "Deletes a related asset link",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this related asset.",
                        "required": true
                    }
                ],
                "tags": [
                    "Related Assets"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No response body"
                    }
                }
            }
        },
        "/room/": {
            "get": {
                "operationId": "room_list",
                "description": "Returns a paginated list of rooms as GeoJSON `Feature` objects (geometry is a `polygon`), each nesting a summary `floor` object plus people-count/occupancy fields.\n\nSupports filtering by `floor` or `building` (integer IDs; `floor` takes priority if both are supplied) in addition to the documented filterset fields. Sorts results naturally by `room_description` unless the `ordering` parameter is supplied. Scopes results to the campuses/buildings/floors/rooms the authenticated user has permission to view.",
                "summary": "Retrieves a list of rooms",
                "parameters": [
                    {
                        "in": "query",
                        "name": "building",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to rooms belonging to this building ID. Ignored if floor is also supplied. Optional."
                    },
                    {
                        "in": "query",
                        "name": "building_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to rooms belonging to these building IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "floor",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to rooms belonging to this floor ID. Takes priority over building if both are supplied. Optional."
                    },
                    {
                        "in": "query",
                        "name": "floor_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to rooms belonging to these floor IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        },
                        "description": "Filters to rooms with these numeric IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "in": "query",
                        "name": "room_description",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to the room with this exact human-readable name. Optional."
                    },
                    {
                        "in": "query",
                        "name": "room_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to the room with this exact text code. Optional."
                    },
                    {
                        "name": "search",
                        "required": false,
                        "in": "query",
                        "description": "A search term.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "tags": [
                    "Rooms"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedRoomGeoJsonList"
                                }
                            }
                        },
                        "description": "A paginated list of rooms."
                    }
                }
            }
        },
        "/room-occupancy/history/": {
            "get": {
                "operationId": "room_occupancy_history_retrieve",
                "description": "Returns raw `{timestamp, room_occupancy_history}` snapshots for a single room, ordered ascending by timestamp, where `room_occupancy_history` is a boolean occupied/unoccupied state (distinct from the numeric people-count history returned by `/room-people-count/history`).\n\nRequires both `room_db_id` and `timestamp__gte` as query parameters; raises a 400 `ValidationError` if either is missing and a 404 if `room_db_id` doesn't match an existing room.",
                "summary": "Retrieves room occupancy history",
                "parameters": [
                    {
                        "in": "query",
                        "name": "room_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Numeric ID of the room to fetch occupancy history for. Required.",
                        "required": true
                    },
                    {
                        "in": "query",
                        "name": "timestamp__gte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Includes only records at or after this timestamp, in RFC 3339 format. Required.",
                        "required": true
                    }
                ],
                "tags": [
                    "Room Occupancies"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/RoomOccupancyHistory"
                                    }
                                }
                            }
                        },
                        "description": "The occupancy history for the room."
                    }
                }
            }
        },
        "/room-people-count/": {
            "get": {
                "operationId": "room_people_count_list",
                "description": "Returns a paginated list of raw `RoomPeopleCount` records — periodic snapshots of people traffic in a room derived from sensor readings. Each record includes running totals (`total`, `total_counter_in`, `total_counter_out`) and the counts for just that period (`periodic_total`, `periodic_counter_in`, `periodic_counter_out`), plus a `room_count_history` snapshot value.\n\n`room_id` here is the numeric foreign key to the `Room` model, not the room's human-readable `room_id` text code used elsewhere.\n\nSupports filtering by `room_id` (numeric). Scopes results to the campuses/buildings/floors/rooms the authenticated user has permission to view.",
                "summary": "Retrieves a list of room people counts",
                "parameters": [
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "in": "query",
                        "name": "room_id",
                        "schema": {
                            "type": "number"
                        },
                        "description": "Filters to people-count records for this room ID (the numeric foreign key, not the text room_id code). Optional."
                    }
                ],
                "tags": [
                    "Room People Counts"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedRoomPeopleCountList"
                                }
                            }
                        },
                        "description": "A paginated list of room people count records."
                    }
                }
            }
        },
        "/room-people-count/history/": {
            "get": {
                "operationId": "room_people_count_history_retrieve",
                "description": "Returns raw `{timestamp, room_count_history}` snapshots for a single room, ordered ascending by timestamp.\n\nRequires both `room_db_id` and `timestamp__gte` as query parameters; raises a 400 `ValidationError` if either is missing (enforced in the view body, not via a filterset) and a 404 if `room_db_id` doesn't match an existing room.",
                "summary": "Retrieves room people count history",
                "parameters": [
                    {
                        "in": "query",
                        "name": "room_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Numeric ID of the room to fetch history for. Required.",
                        "required": true
                    },
                    {
                        "in": "query",
                        "name": "timestamp__gte",
                        "schema": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "description": "Includes only records at or after this timestamp, in RFC 3339 format. Required.",
                        "required": true
                    }
                ],
                "tags": [
                    "Room People Counts"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/RoomPeopleCountHistory"
                                    }
                                }
                            }
                        },
                        "description": "The people-count history for the room."
                    }
                }
            }
        },
        "/room-people-count/stats/": {
            "get": {
                "operationId": "room_people_count_stats_retrieve",
                "description": "Returns `{date, total}` records for a single room: the sum of `periodic_counter_in` grouped by day or month, ordered ascending by date.\n\nRequires `room_db_id` and `length_of_time` as query parameters; returns 400 if either is missing or if `length_of_time` isn't `day`/`month`, and 404 if `room_db_id` doesn't match an existing room.\n\n`timezone`, if supplied, must be a valid IANA timezone name (e.g. `America/New_York`) used when truncating timestamps to day/month boundaries; the API does not validate an invalid value and raises a raw error rather than a friendly 400.",
                "summary": "Retrieves room people count stats",
                "parameters": [
                    {
                        "in": "query",
                        "name": "length_of_time",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "day",
                                "month"
                            ]
                        },
                        "description": "Granularity to group and sum counts by. Required. Allowed values: day, month.",
                        "required": true
                    },
                    {
                        "in": "query",
                        "name": "room_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Numeric ID of the room to fetch stats for. Required.",
                        "required": true
                    },
                    {
                        "in": "query",
                        "name": "timezone",
                        "schema": {
                            "type": "string"
                        },
                        "description": "IANA timezone name used when truncating timestamps to day/month boundaries. Optional; uses the default Django server timezone if omitted."
                    }
                ],
                "tags": [
                    "Room People Counts"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/RoomPeopleCountStat"
                                    }
                                }
                            }
                        },
                        "description": "The daily or monthly people-count stats for the room."
                    }
                }
            }
        },
        "/room-roll-up/": {
            "get": {
                "operationId": "room_roll_up_list",
                "description": "Returns a paginated, read-only list of denormalized per-room metric rollups as GeoJSON `Feature` objects (geometry is a `polygon`). Includes room/floor identity fields (`room_id`, `room_description`, `floor_id`, `floor_db_id`, `floor_description`, `campus_db_id`), room size fields unique to this roll-up (`sq_feet`, `sq_meters`), plus the same sensor/alert, occupancy/people-count, asset-status, and device-status aggregate metrics as the other location roll-ups.\n\nThis is a materialized/precomputed read model with no create/update/delete operations, and no AI-summary sub-action.\n\nSorts results naturally by `room_description` unless the `ordering` parameter is supplied.\n\nScopes results to the campuses/buildings/floors/rooms the authenticated user has permission to view.",
                "summary": "Retrieves a list of room roll-ups",
                "parameters": [
                    {
                        "in": "query",
                        "name": "floor_db_id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to room roll-ups belonging to this floor ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Filters to the room roll-up with this exact numeric ID. Optional."
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "search",
                        "required": false,
                        "in": "query",
                        "description": "A search term.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "tags": [
                    "Room Roll Ups"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedRoomRollUpGeoJsonList"
                                }
                            }
                        },
                        "description": "A paginated list of room roll-ups."
                    }
                }
            }
        },
        "/room/{id}/": {
            "get": {
                "operationId": "room_retrieve",
                "description": "Returns a single room by its numeric ID, as a GeoJSON `Feature` object with the same shape as the list endpoint.",
                "summary": "Retrieves a room by ID",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this room.",
                        "required": true
                    }
                ],
                "tags": [
                    "Rooms"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RoomGeoJson"
                                }
                            }
                        },
                        "description": "The requested room."
                    }
                }
            }
        },
        "/sensor-model/": {
            "get": {
                "operationId": "sensor_model_list",
                "description": "Returns a paginated list of sensor models. A sensor model is a specific, configurable sensor implementation tied to one `sensor_type` (referenced by name via a slug field, not ID) and associated with one or more `DeviceModel`s through the `DeviceModelSensorModel` join table.\n\nNotable fields:\n- `data_key` (the JSON key this sensor's readings live under in raw sensor data payloads)\n- `data_type` (BOOLEAN/NUMERIC/COORDINATES/STRING/UNKNOWN)\n- `allowable_values` (JSON, enumerates valid values for e.g. a door sensor's OPEN/CLOSED states)\n- `is_displayed` (show in UI)\n- `is_utilization_enabled` (whether this sensor can drive an asset's in-use/utilization state)\n- `properties_schema` (JSON schema describing custom per-`Sensor` configuration fields required for this sensor model, e.g. Isl/Ish/Osl/Osh scaling values for an analog input; validated against each `Sensor`'s `properties`)",
                "summary": "Retrieves a list of sensor models",
                "parameters": [
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "tags": [
                    "Sensor Models"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedSensorModelList"
                                }
                            }
                        },
                        "description": "A paginated list of sensor models."
                    }
                }
            }
        },
        "/sensor-model/{id}/": {
            "get": {
                "operationId": "sensor_model_retrieve",
                "description": "Returns a single sensor model by its numeric ID.",
                "summary": "Retrieves a sensor model by ID",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this sensor model.",
                        "required": true
                    }
                ],
                "tags": [
                    "Sensor Models"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SensorModel"
                                }
                            }
                        },
                        "description": "The requested sensor model."
                    }
                }
            }
        },
        "/sensor-type/": {
            "get": {
                "operationId": "sensor_type_list",
                "description": "Returns a paginated list of sensor types. A sensor type is a category of measurement (e.g. temperature, humidity, door-open) with a `display_name`, an optional `unit_of_measurement`, and an `is_alertable` flag indicating whether readings of this type support threshold-based alerting. `SensorModel` records reference a sensor type to describe a concrete, configurable sensor implementation.",
                "summary": "Retrieves a list of sensor types",
                "parameters": [
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "tags": [
                    "Sensor Types"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedSensorTypeList"
                                }
                            }
                        },
                        "description": "A paginated list of sensor types."
                    }
                }
            }
        },
        "/sensor-type/{id}/": {
            "get": {
                "operationId": "sensor_type_retrieve",
                "description": "Returns a single sensor type by its numeric ID.",
                "summary": "Retrieves a sensor type by ID",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this sensor type.",
                        "required": true
                    }
                ],
                "tags": [
                    "Sensor Types"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SensorType"
                                }
                            }
                        },
                        "description": "The requested sensor type."
                    }
                }
            }
        },
        "/zone/": {
            "get": {
                "operationId": "zone_list",
                "description": "Returns a paginated list of zones as GeoJSON `Feature` objects (geometry is a `polygon`), each nesting a summary `room` object and a read-only `location_set` (the IDs of the denormalized `Location` row(s) tied to this zone; each zone maintains exactly one paired `Location` record).\n\nScopes results to the campuses/buildings/floors/rooms/zones the authenticated user has permission to view.",
                "summary": "Retrieves a list of zones",
                "parameters": [
                    {
                        "in": "query",
                        "name": "floor_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to zones belonging to the floor with this exact text code. Optional."
                    },
                    {
                        "in": "query",
                        "name": "id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        },
                        "description": "Filters to zones with these numeric IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "name": "ordering",
                        "required": false,
                        "in": "query",
                        "description": "Which field to use when ordering the results.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page_num",
                        "required": false,
                        "in": "query",
                        "description": "A page number within the paginated result set.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page_size",
                        "required": false,
                        "in": "query",
                        "description": "Number of results to return per page.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "in": "query",
                        "name": "room_db_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to zones belonging to this room ID. Optional."
                    },
                    {
                        "in": "query",
                        "name": "room_db_id__in",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "number"
                            }
                        },
                        "description": "Filters to zones belonging to these room IDs. Comma-separated. Optional.",
                        "explode": false,
                        "style": "form"
                    },
                    {
                        "in": "query",
                        "name": "room_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to zones belonging to the room with this exact text code. Optional."
                    },
                    {
                        "name": "search",
                        "required": false,
                        "in": "query",
                        "description": "A search term.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "in": "query",
                        "name": "zone_description",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to the zone with this human-readable name (case-insensitive exact match). Optional."
                    },
                    {
                        "in": "query",
                        "name": "zone_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filters to the zone with this exact text code. Optional."
                    }
                ],
                "tags": [
                    "Zones"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PaginatedZoneGeoJsonList"
                                }
                            }
                        },
                        "description": "A paginated list of zones."
                    }
                }
            }
        },
        "/zone/{id}/": {
            "get": {
                "operationId": "zone_retrieve",
                "description": "Returns a single zone by its numeric ID, as a GeoJSON `Feature` object with the same shape as the list endpoint.",
                "summary": "Retrieves a zone by ID",
                "parameters": [
                    {
                        "in": "path",
                        "name": "id",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "A unique integer value identifying this zone.",
                        "required": true
                    }
                ],
                "tags": [
                    "Zones"
                ],
                "security": [
                    {
                        "jwtAuth": []
                    },
                    {
                        "cookieAuth": []
                    },
                    {
                        "basicAuth": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ZoneGeoJson"
                                }
                            }
                        },
                        "description": "The requested zone."
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "AssetBulkUpdate": {
                "type": "object",
                "description": "A request to update one or more fields on every asset matching the current query filters.",
                "properties": {
                    "asset_ids": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "nullable": true,
                        "description": "Optional list of asset IDs. NOT currently used to select update targets — only the active query filters determine which assets are updated."
                    },
                    "update_fields": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/AssetField"
                        },
                        "description": "List of field-name/value pairs to apply to every matched asset. Required; must not contain duplicate field_name entries."
                    }
                },
                "required": [
                    "update_fields"
                ]
            },
            "AssetDeviceDeviceOnly": {
                "type": "object",
                "description": "A device-to-asset pairing, nested under Asset responses as `asset_device`.",
                "properties": {
                    "device": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/DeviceView"
                            }
                        ],
                        "description": "The paired device."
                    },
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the device-to-asset pairing."
                    },
                    "location_snapshot": {
                        "readOnly": true,
                        "nullable": true,
                        "description": "Snapshot of the location hierarchy at the time the device was paired. Null if not captured."
                    }
                },
                "required": [
                    "device",
                    "id",
                    "location_snapshot"
                ]
            },
            "AssetDeviceLite": {
                "type": "object",
                "description": "A lightweight reference to a device paired to an asset, nested under AssetUtilizationLite responses.",
                "properties": {
                    "device_id": {
                        "type": "string",
                        "description": "Hardware identifier of the paired device."
                    }
                },
                "required": [
                    "device_id"
                ]
            },
            "AssetField": {
                "type": "object",
                "description": "A single field-name/value pair to apply to every matched asset in a bulk update.",
                "properties": {
                    "field_name": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/FieldNameEnum"
                            }
                        ],
                        "description": "Asset field to update. Required. Allowed values: description, type, owner, manufacturer, model_number. For type/owner, value is resolved by name to the matching AssetType/AssetOwner.\n\n* `description` - description\n* `type` - type\n* `owner` - owner\n* `manufacturer` - manufacturer\n* `model_number` - model_number"
                    },
                    "value": {
                        "type": "string",
                        "nullable": true,
                        "description": "New value to set for field_name. Required; may be null or blank."
                    }
                },
                "required": [
                    "field_name",
                    "value"
                ]
            },
            "AssetLedRequestHistory": {
                "type": "object",
                "description": "A record of an LED activation request made for an asset's tracking device.",
                "properties": {
                    "asset_id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "ID of the asset this LED request was made for."
                    },
                    "led_request_history_id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the underlying LED request history record."
                    },
                    "device_id": {
                        "type": "string",
                        "description": "Hardware identifier of the device the LED request targeted."
                    },
                    "monitor_id": {
                        "type": "string",
                        "description": "Identifier of the bridge that relayed the LED request, if any."
                    },
                    "is_led_enabled": {
                        "type": "boolean",
                        "description": "Whether the target device's model supports an LED. True means LED-capable."
                    },
                    "led_event_type": {
                        "type": "string",
                        "description": "Type of LED event recorded: LED_ACTIVATED, LED_ACTIVATION_FAILED, LED_REQUEST, LED_REQUEST_FAILED, LED_REQUEST_TIMEOUT, MONITOR_LED_REQUEST, or MONITOR_LED_REQUEST_FAILED."
                    },
                    "created": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Timestamp the LED request was recorded, in RFC 3339 format."
                    },
                    "asset": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/SimpleAssetAndAssetLocation"
                            }
                        ],
                        "readOnly": true,
                        "description": "The asset this LED request was made for."
                    }
                },
                "required": [
                    "asset",
                    "asset_id",
                    "created",
                    "device_id",
                    "is_led_enabled",
                    "led_event_type",
                    "led_request_history_id",
                    "monitor_id"
                ]
            },
            "AssetOwner": {
                "type": "object",
                "description": "A named entity, such as a department or organization, that an asset can be assigned to.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the asset owner."
                    },
                    "name": {
                        "type": "string",
                        "description": "Name of the asset owner. Required."
                    }
                },
                "required": [
                    "id",
                    "name"
                ]
            },
            "AssetSearch": {
                "type": "object",
                "description": "A denormalized, search-optimized view of an asset, backed by the asset_search_view database view.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the asset."
                    },
                    "customer_reference": {
                        "type": "string",
                        "readOnly": true,
                        "description": "Unique, customer/SAP-supplied identifier for the asset."
                    },
                    "description": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Human-readable description of the asset. Null if not set."
                    },
                    "manufacturer": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Manufacturer of the asset. Null if not set."
                    },
                    "model_number": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Manufacturer model number of the asset. Null if not set."
                    },
                    "serial_number": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Manufacturer serial number of the asset. Null if not set."
                    },
                    "status": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/StatusB86Enum"
                            }
                        ],
                        "readOnly": true,
                        "description": "Current status of the asset: UNPAIRED, ACTIVE, IN_USE, NOT_IN_USE, or MISSING.\n\n* `UNPAIRED` - Unpaired\n* `ACTIVE` - Active\n* `IN_USE` - In Use\n* `NOT_IN_USE` - Not In Use\n* `MISSING` - Missing"
                    },
                    "type": {
                        "type": "string",
                        "readOnly": true,
                        "description": "Name of the asset type."
                    },
                    "is_integrations": {
                        "type": "boolean",
                        "readOnly": true,
                        "description": "Whether this asset is managed by an external integration."
                    },
                    "owner": {
                        "type": "string",
                        "readOnly": true,
                        "description": "Name of the asset owner."
                    },
                    "location_last_reported_at": {
                        "type": "string",
                        "format": "date-time",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Timestamp of the last location report, in RFC 3339 format. Null if never reported."
                    },
                    "asset_locations": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "additionalProperties": {}
                        },
                        "readOnly": true,
                        "description": "List of the asset's current location entries, each with last_updated_at, location hierarchy, and confidence. Computed live from denormalized columns, not stored. Empty if the asset has no current location."
                    },
                    "customer_properties": {
                        "default": {},
                        "description": "Arbitrary customer-defined JSON properties for the asset."
                    }
                },
                "required": [
                    "asset_locations",
                    "customer_reference",
                    "description",
                    "id",
                    "is_integrations",
                    "location_last_reported_at",
                    "manufacturer",
                    "model_number",
                    "owner",
                    "serial_number",
                    "status",
                    "type"
                ]
            },
            "AssetSearchAssetLocation": {
                "type": "object",
                "description": "A single current location entry for an asset, with a location hierarchy and confidence.",
                "properties": {
                    "location": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/LocationDescriptionOnly"
                            }
                        ],
                        "description": "The asset's location hierarchy at this entry."
                    },
                    "confidence": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/ConfidenceEnum"
                            }
                        ],
                        "description": "Precision of this location entry: CAMPUS, BUILDING, FLOOR, ROOM, or ZONE.\n\n* `CAMPUS` - Campus\n* `BUILDING` - Building\n* `FLOOR` - Floor\n* `ROOM` - Room\n* `ZONE` - Zone"
                    }
                },
                "required": [
                    "location"
                ]
            },
            "AssetSearchCSV": {
                "type": "object",
                "description": "A denormalized, wide view of an asset for CSV export, backed by the asset_search_csv_view database view.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the asset."
                    },
                    "customer_reference": {
                        "type": "string",
                        "readOnly": true,
                        "description": "Unique, customer/SAP-supplied identifier for the asset."
                    },
                    "description": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Human-readable description of the asset. Null if not set."
                    },
                    "manufacturer": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Manufacturer of the asset. Null if not set."
                    },
                    "model_number": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Manufacturer model number of the asset. Null if not set."
                    },
                    "serial_number": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Manufacturer serial number of the asset. Null if not set."
                    },
                    "status": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/StatusB86Enum"
                            }
                        ],
                        "readOnly": true,
                        "description": "Current status of the asset: UNPAIRED, ACTIVE, IN_USE, NOT_IN_USE, or MISSING.\n\n* `UNPAIRED` - Unpaired\n* `ACTIVE` - Active\n* `IN_USE` - In Use\n* `NOT_IN_USE` - Not In Use\n* `MISSING` - Missing"
                    },
                    "type": {
                        "type": "string",
                        "readOnly": true,
                        "description": "Name of the asset type."
                    },
                    "is_integrations": {
                        "type": "boolean",
                        "readOnly": true,
                        "description": "Whether this asset is managed by an external integration."
                    },
                    "owner": {
                        "type": "string",
                        "readOnly": true,
                        "description": "Name of the asset owner."
                    },
                    "location_last_reported_at": {
                        "type": "string",
                        "format": "date-time",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Timestamp of the last location report, in RFC 3339 format. Null if never reported."
                    },
                    "asset_locations": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "additionalProperties": {}
                        },
                        "readOnly": true,
                        "description": "List containing exactly one location entry built from this row's columns (last_updated_at, location hierarchy including building local_timezone, and confidence). Computed live, not stored."
                    },
                    "device": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "integer"
                        },
                        "readOnly": true,
                        "description": "device_id and battery_level for the asset's paired device, if any. Computed live, not stored."
                    },
                    "customer_properties": {
                        "default": {},
                        "description": "Arbitrary customer-defined JSON properties for the asset."
                    }
                },
                "required": [
                    "asset_locations",
                    "customer_reference",
                    "description",
                    "device",
                    "id",
                    "is_integrations",
                    "location_last_reported_at",
                    "manufacturer",
                    "model_number",
                    "owner",
                    "serial_number",
                    "status",
                    "type"
                ]
            },
            "AssetSearchCsvRequestResponse": {
                "type": "object",
                "description": "The result of requesting a CSV export.",
                "properties": {
                    "message": {
                        "type": "string",
                        "description": "Human-readable summary of the export request result."
                    }
                },
                "required": [
                    "message"
                ]
            },
            "AssetSimpleView": {
                "type": "object",
                "description": "A simplified asset reference, nested under Device responses.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the asset."
                    },
                    "description": {
                        "type": "string",
                        "readOnly": true,
                        "description": "Human-readable description of the asset."
                    },
                    "customer_reference": {
                        "type": "string",
                        "readOnly": true,
                        "description": "Unique, customer/SAP-supplied identifier for the asset."
                    },
                    "manufacturer": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Manufacturer of the asset. Null if not set."
                    },
                    "model_number": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Manufacturer model number of the asset. Null if not set."
                    },
                    "serial_number": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Manufacturer serial number of the asset. Null if not set."
                    },
                    "image": {
                        "type": "string",
                        "format": "uri",
                        "readOnly": true,
                        "nullable": true,
                        "description": "URL of the asset image. Null if not set."
                    },
                    "customer_properties": {
                        "readOnly": true,
                        "nullable": true,
                        "description": "Arbitrary customer-defined JSON properties for the asset. Null if not set."
                    },
                    "version": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Optimistic-locking revision counter, incremented on every update."
                    }
                },
                "required": [
                    "customer_properties",
                    "customer_reference",
                    "description",
                    "id",
                    "image",
                    "manufacturer",
                    "model_number",
                    "serial_number",
                    "version"
                ]
            },
            "AssetType": {
                "type": "object",
                "description": "A named category that an asset can be classified as.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the asset type."
                    },
                    "name": {
                        "type": "string",
                        "description": "Name of the asset type. Required."
                    },
                    "is_displayed": {
                        "type": "boolean",
                        "description": "Whether this asset type appears as a selectable option in the UI. True means it is shown."
                    }
                },
                "required": [
                    "id",
                    "name"
                ]
            },
            "AssetUtilizationLite": {
                "type": "object",
                "description": "A denormalized asset utilization interval, enriched with the asset's identity and current location.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the asset utilization interval."
                    },
                    "customer_reference": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Unique, customer/SAP-supplied identifier for the asset. Computed live from the related asset, not stored."
                    },
                    "asset_description": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Human-readable description of the asset. Computed live from the related asset, not stored."
                    },
                    "asset_device": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/AssetDeviceLite"
                        },
                        "readOnly": true,
                        "description": "Devices attached to the asset."
                    },
                    "campus_description": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Human-readable name of the asset's current campus. Computed live from the asset's current (open-ended) location, not stored. Null if the asset has no current location."
                    },
                    "campus_id": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Unique text code of the asset's current campus. Computed live, not stored. Null if the asset has no current location."
                    },
                    "building_description": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Human-readable name of the asset's current building. Computed live, not stored. Null if the asset has no current location."
                    },
                    "building_id": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Unique text code of the asset's current building. Computed live, not stored. Null if the asset has no current location."
                    },
                    "floor_description": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Human-readable name of the asset's current floor. Computed live, not stored. Null if the asset has no current location."
                    },
                    "floor_id": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Unique text code of the asset's current floor. Computed live, not stored. Null if the asset has no current location."
                    },
                    "room_description": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Human-readable name of the asset's current room. Computed live, not stored. Null if the asset has no current location."
                    },
                    "room_id": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Unique text code of the asset's current room. Computed live, not stored. Null if the asset has no current location."
                    },
                    "zone_description": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Human-readable name of the asset's current zone. Computed live, not stored. Null if the asset has no current location."
                    },
                    "local_timezone": {
                        "type": "string",
                        "nullable": true,
                        "description": "IANA timezone name of the asset's current building (e.g. \"America/New_York\"). Computed live, not stored. Null if the asset has no current location.",
                        "readOnly": true
                    },
                    "start_date": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Timestamp the utilization interval began, in RFC 3339 format."
                    },
                    "end_date": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "Timestamp the utilization interval ended, in RFC 3339 format. Null if the interval is still ongoing."
                    },
                    "is_utilization": {
                        "type": "boolean",
                        "description": "Whether the asset was actively in use during this interval. True means in use."
                    }
                },
                "required": [
                    "asset_description",
                    "asset_device",
                    "building_description",
                    "building_id",
                    "campus_description",
                    "campus_id",
                    "customer_reference",
                    "floor_description",
                    "floor_id",
                    "id",
                    "local_timezone",
                    "room_description",
                    "room_id",
                    "zone_description"
                ]
            },
            "AssetView": {
                "type": "object",
                "description": "A tracked physical asset.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the asset."
                    },
                    "description": {
                        "type": "string",
                        "readOnly": true,
                        "description": "Human-readable description of the asset."
                    },
                    "customer_reference": {
                        "type": "string",
                        "readOnly": true,
                        "description": "Unique, customer/SAP-supplied identifier for the asset, used as the external join key for integration workflows."
                    },
                    "manufacturer": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Manufacturer of the asset. Null if not set."
                    },
                    "model_number": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Manufacturer model number of the asset. Null if not set."
                    },
                    "serial_number": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Manufacturer serial number of the asset. Null if not set."
                    },
                    "image": {
                        "type": "string",
                        "format": "uri",
                        "readOnly": true,
                        "nullable": true,
                        "description": "URL of the asset image. Null if not set."
                    },
                    "customer_properties": {
                        "readOnly": true,
                        "nullable": true,
                        "description": "Arbitrary customer-defined JSON properties for the asset. Null if not set."
                    },
                    "type": {
                        "type": "string",
                        "nullable": true,
                        "description": "Name of the asset type. Optional; null if not classified."
                    },
                    "owner": {
                        "type": "string",
                        "nullable": true,
                        "description": "Name of the asset owner. Optional; null if not assigned."
                    },
                    "asset_device": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/AssetDeviceDeviceOnly"
                        },
                        "description": "Devices currently paired to this asset."
                    },
                    "version": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Optimistic-locking revision counter, incremented on every update."
                    },
                    "is_integrations": {
                        "type": "boolean",
                        "readOnly": true,
                        "description": "Whether this asset is managed by an external integration. True means integration-managed writes take precedence and bulk-update skips it."
                    },
                    "is_location_stable": {
                        "type": "boolean",
                        "readOnly": true,
                        "description": "Whether the asset's location has been stable (not recently changing) based on incoming location reports."
                    },
                    "status": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/StatusB86Enum"
                            }
                        ],
                        "readOnly": true,
                        "description": "Current status of the asset: UNPAIRED, ACTIVE, IN_USE, NOT_IN_USE, or MISSING.\n\n* `UNPAIRED` - Unpaired\n* `ACTIVE` - Active\n* `IN_USE` - In Use\n* `NOT_IN_USE` - Not In Use\n* `MISSING` - Missing"
                    },
                    "last_reported_at": {
                        "type": "string",
                        "format": "date-time",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Timestamp of the last report from any paired device, in RFC 3339 format. Null if never reported."
                    },
                    "location_last_reported_at": {
                        "type": "string",
                        "format": "date-time",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Timestamp of the last location report, in RFC 3339 format. Null if never reported."
                    },
                    "related_assets": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/RelatedAssetSimple"
                        },
                        "readOnly": true,
                        "description": "Assets related to this asset via a RelatedAsset link."
                    },
                    "paired_display_properties": {
                        "readOnly": true,
                        "nullable": true,
                        "description": "Freeform JSON, keyed by device_id, used to drive e-ink display templates on MQdisplay-class paired devices. Null if not set."
                    }
                },
                "required": [
                    "customer_properties",
                    "customer_reference",
                    "description",
                    "id",
                    "image",
                    "is_integrations",
                    "is_location_stable",
                    "last_reported_at",
                    "location_last_reported_at",
                    "manufacturer",
                    "model_number",
                    "paired_display_properties",
                    "related_assets",
                    "serial_number",
                    "status",
                    "version"
                ]
            },
            "BackhaulEnum": {
                "enum": [
                    "CELLULAR",
                    "ETHERNET",
                    "UNKNOWN"
                ],
                "type": "string",
                "description": "* `CELLULAR` - Cellular\n* `ETHERNET` - Ethernet\n* `UNKNOWN` - Unknown"
            },
            "BlankEnum": {
                "enum": [
                    ""
                ]
            },
            "BuildingDescription": {
                "type": "object",
                "description": "The building name and timezone only, nested under a location hierarchy summary.",
                "properties": {
                    "building_description": {
                        "type": "string",
                        "description": "Human-readable name of the building."
                    },
                    "local_timezone": {
                        "type": "string",
                        "nullable": true,
                        "description": "IANA timezone name for the building (e.g. \"America/New_York\"). Null if not set."
                    }
                },
                "required": [
                    "building_description"
                ]
            },
            "BuildingGeoJson": {
                "type": "object",
                "description": "A building location, represented as a GeoJSON Feature with a polygon geometry.",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureEnum"
                    },
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the building."
                    },
                    "geometry": {
                        "type": "object",
                        "properties": {
                            "type": {
                                "type": "string",
                                "enum": [
                                    "Polygon"
                                ]
                            },
                            "coordinates": {
                                "type": "array",
                                "items": {
                                    "type": "array",
                                    "items": {
                                        "type": "array",
                                        "items": {
                                            "type": "number",
                                            "format": "float"
                                        },
                                        "example": [
                                            12.9721,
                                            77.5933
                                        ],
                                        "minItems": 2,
                                        "maxItems": 3
                                    },
                                    "example": [
                                        [
                                            22.4707,
                                            70.0577
                                        ],
                                        [
                                            12.9721,
                                            77.5933
                                        ]
                                    ],
                                    "minItems": 4
                                },
                                "example": [
                                    [
                                        [
                                            0.0,
                                            0.0
                                        ],
                                        [
                                            0.0,
                                            50.0
                                        ],
                                        [
                                            50.0,
                                            50.0
                                        ],
                                        [
                                            50.0,
                                            0.0
                                        ],
                                        [
                                            0.0,
                                            0.0
                                        ]
                                    ]
                                ]
                            }
                        }
                    },
                    "properties": {
                        "type": "object",
                        "properties": {
                            "building_id": {
                                "type": "string",
                                "description": "Unique text code for the building. Required."
                            },
                            "building_description": {
                                "type": "string",
                                "description": "Human-readable name of the building. Required."
                            },
                            "campus": {
                                "allOf": [
                                    {
                                        "$ref": "#/components/schemas/CampusBuildingView"
                                    }
                                ],
                                "description": "Summary of the campus this building belongs to."
                            },
                            "street1": {
                                "type": "string",
                                "nullable": true,
                                "description": "First line of the building street address. Optional; null if not set."
                            },
                            "street2": {
                                "type": "string",
                                "nullable": true,
                                "description": "Second line of the building street address. Optional; null if not set."
                            },
                            "city": {
                                "type": "string",
                                "nullable": true,
                                "description": "City of the building address. Optional; null if not set."
                            },
                            "state": {
                                "type": "string",
                                "nullable": true,
                                "description": "State or province of the building address. Optional; null if not set."
                            },
                            "zip_code": {
                                "type": "string",
                                "nullable": true,
                                "description": "Postal code of the building address. Optional; null if not set."
                            },
                            "country": {
                                "type": "string",
                                "nullable": true,
                                "description": "Country of the building address. Optional; null if not set."
                            },
                            "version": {
                                "type": "integer",
                                "description": "Optimistic-locking revision counter, incremented on every update."
                            },
                            "created": {
                                "type": "string",
                                "format": "date-time",
                                "readOnly": true,
                                "description": "Timestamp the building record was created, in RFC 3339 format."
                            },
                            "rotation": {
                                "type": "number",
                                "format": "double",
                                "nullable": true,
                                "description": "Rotation of the building floor plan, in degrees. Optional; null if not set."
                            },
                            "pause_alerts": {
                                "type": "boolean",
                                "readOnly": true,
                                "description": "Whether an active maintenance-window BuildingProfile currently has alerts paused for this building. Computed live, not stored."
                            },
                            "pause_integrations": {
                                "type": "boolean",
                                "readOnly": true,
                                "description": "Whether an active maintenance-window BuildingProfile currently has integrations paused for this building. Computed live, not stored."
                            },
                            "is_occupied": {
                                "type": "boolean",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Whether the building currently has detected occupancy."
                            },
                            "is_people_count_enabled": {
                                "type": "boolean",
                                "readOnly": true,
                                "description": "Whether people-counting sensors are configured for this building."
                            },
                            "people_count": {
                                "type": "integer",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Most recently reported total people count for the building. Null if never reported."
                            },
                            "people_count_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Timestamp of the last people-count reading, in RFC 3339 format. Null if never reported."
                            },
                            "sensor_count": {
                                "type": "integer",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Number of sensors reporting for this building. Null if unknown."
                            },
                            "occupancy_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Timestamp of the last occupancy reading, in RFC 3339 format. Null if never reported."
                            },
                            "local_timezone": {
                                "type": "string",
                                "nullable": true,
                                "description": "IANA timezone name for the building (e.g. \"America/New_York\"). Optional; null if not set."
                            },
                            "is_floor_plan_enabled": {
                                "type": "boolean",
                                "description": "Whether this building uses drawn floor plans (true) or flat, manually-defined room/zone locations (false)."
                            },
                            "last_synced_at": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "Timestamp of the last external sync attempt, in RFC 3339 format. Null if never synced."
                            },
                            "last_sync_status": {
                                "enum": [
                                    "SUCCESS",
                                    "FAILURE",
                                    "NOT_SYNCED"
                                ],
                                "type": "string",
                                "description": "Outcome of the last external sync attempt: SUCCESS, FAILURE, or NOT_SYNCED.\n\n* `SUCCESS` - Success\n* `FAILURE` - Failure\n* `NOT_SYNCED` - Not Synced"
                            }
                        }
                    }
                }
            },
            "BuildingGeoJsonList": {
                "type": "object",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureCollectionEnum"
                    },
                    "features": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/BuildingGeoJson"
                        }
                    }
                }
            },
            "BuildingLocationView": {
                "type": "object",
                "description": "A summary of a building, nested under Location responses.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the building."
                    },
                    "building_id": {
                        "type": "string",
                        "description": "Unique text code for the building."
                    },
                    "building_description": {
                        "type": "string",
                        "description": "Human-readable name of the building."
                    },
                    "street1": {
                        "type": "string",
                        "nullable": true,
                        "description": "First line of the building street address. Null if not set."
                    },
                    "street2": {
                        "type": "string",
                        "nullable": true,
                        "description": "Second line of the building street address. Null if not set."
                    },
                    "city": {
                        "type": "string",
                        "nullable": true,
                        "description": "City of the building address. Null if not set."
                    },
                    "state": {
                        "type": "string",
                        "nullable": true,
                        "description": "State or province of the building address. Null if not set."
                    },
                    "zip_code": {
                        "type": "string",
                        "nullable": true,
                        "description": "Postal code of the building address. Null if not set."
                    },
                    "country": {
                        "type": "string",
                        "nullable": true,
                        "description": "Country of the building address. Null if not set."
                    },
                    "local_timezone": {
                        "type": "string",
                        "nullable": true,
                        "description": "IANA timezone name for the building (e.g. \"America/New_York\"). Null if not set."
                    },
                    "is_floor_plan_enabled": {
                        "type": "boolean",
                        "description": "Whether this building uses drawn floor plans (true) or flat, manually-defined room/zone locations (false)."
                    },
                    "last_synced_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "Timestamp of the last external sync attempt, in RFC 3339 format. Null if never synced."
                    },
                    "last_sync_status": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/LastSyncStatusEnum"
                            }
                        ],
                        "description": "Outcome of the last external sync attempt: SUCCESS, FAILURE, or NOT_SYNCED.\n\n* `SUCCESS` - Success\n* `FAILURE` - Failure\n* `NOT_SYNCED` - Not Synced"
                    }
                },
                "required": [
                    "building_description",
                    "building_id",
                    "id"
                ]
            },
            "BuildingRollUpGeoJson": {
                "type": "object",
                "description": "A denormalized, precomputed rollup of metrics for a building, represented as a GeoJSON Feature.",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureEnum"
                    },
                    "id": {
                        "type": "integer",
                        "maximum": 2147483647,
                        "minimum": -2147483648,
                        "description": "Unique identifier of the building."
                    },
                    "geometry": {
                        "type": "object",
                        "properties": {
                            "type": {
                                "type": "string",
                                "enum": [
                                    "Polygon"
                                ]
                            },
                            "coordinates": {
                                "type": "array",
                                "items": {
                                    "type": "array",
                                    "items": {
                                        "type": "array",
                                        "items": {
                                            "type": "number",
                                            "format": "float"
                                        },
                                        "example": [
                                            12.9721,
                                            77.5933
                                        ],
                                        "minItems": 2,
                                        "maxItems": 3
                                    },
                                    "example": [
                                        [
                                            22.4707,
                                            70.0577
                                        ],
                                        [
                                            12.9721,
                                            77.5933
                                        ]
                                    ],
                                    "minItems": 4
                                },
                                "example": [
                                    [
                                        [
                                            0.0,
                                            0.0
                                        ],
                                        [
                                            0.0,
                                            50.0
                                        ],
                                        [
                                            50.0,
                                            50.0
                                        ],
                                        [
                                            50.0,
                                            0.0
                                        ],
                                        [
                                            0.0,
                                            0.0
                                        ]
                                    ]
                                ]
                            }
                        }
                    },
                    "properties": {
                        "type": "object",
                        "properties": {
                            "building_id": {
                                "type": "string",
                                "nullable": true,
                                "description": "Unique text code for the building."
                            },
                            "building_description": {
                                "type": "string",
                                "nullable": true,
                                "description": "Human-readable name of the building."
                            },
                            "street1": {
                                "type": "string",
                                "nullable": true,
                                "description": "First line of the building street address. Null if not set."
                            },
                            "street2": {
                                "type": "string",
                                "nullable": true,
                                "description": "Second line of the building street address. Null if not set."
                            },
                            "city": {
                                "type": "string",
                                "nullable": true,
                                "description": "City of the building address. Null if not set."
                            },
                            "state": {
                                "type": "string",
                                "nullable": true,
                                "description": "State or province of the building address. Null if not set."
                            },
                            "zip_code": {
                                "type": "string",
                                "nullable": true,
                                "description": "Postal code of the building address. Null if not set."
                            },
                            "country": {
                                "type": "string",
                                "nullable": true,
                                "description": "Country of the building address. Null if not set."
                            },
                            "campus_id": {
                                "type": "string",
                                "nullable": true,
                                "description": "Unique text code of the parent campus. Null if unknown."
                            },
                            "campus_db_id": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Unique identifier of the parent campus. Null if unknown."
                            },
                            "campus_description": {
                                "type": "string",
                                "nullable": true,
                                "description": "Human-readable name of the parent campus. Null if unknown."
                            },
                            "sensor_count": {
                                "type": "integer",
                                "maximum": 9223372036854775807,
                                "minimum": -9223372036854775808,
                                "format": "int64",
                                "nullable": true,
                                "description": "Number of sensors reporting in this location. Null if unknown."
                            },
                            "rotation": {
                                "type": "number",
                                "format": "double",
                                "nullable": true,
                                "description": "Rotation of the building floor plan, in degrees. Null if not set."
                            },
                            "active_alert_count": {
                                "type": "integer",
                                "maximum": 9223372036854775807,
                                "minimum": -9223372036854775808,
                                "format": "int64",
                                "nullable": true,
                                "description": "Number of currently active alerts in this location. Null if unknown."
                            },
                            "people_count": {
                                "type": "integer",
                                "maximum": 9223372036854775807,
                                "minimum": -9223372036854775808,
                                "format": "int64",
                                "nullable": true,
                                "description": "Most recently reported total people count for this location. Null if never reported."
                            },
                            "is_people_count_enabled": {
                                "type": "boolean",
                                "description": "Whether people-counting sensors are configured for this location."
                            },
                            "people_count_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "Timestamp of the last people-count reading, in RFC 3339 format. Null if never reported."
                            },
                            "is_occupied": {
                                "type": "boolean",
                                "nullable": true,
                                "description": "Whether this location currently has detected occupancy."
                            },
                            "occupancy_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "Timestamp of the last occupancy reading, in RFC 3339 format. Null if never reported."
                            },
                            "is_floor_plan_enabled": {
                                "type": "boolean",
                                "description": "Whether this building uses drawn floor plans (true) or flat, manually-defined room/zone locations (false)."
                            },
                            "asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Total number of assets in this location. Null if unknown."
                            },
                            "in_use_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status IN_USE in this location. Null if unknown."
                            },
                            "unpaired_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status UNPAIRED in this location. Null if unknown."
                            },
                            "active_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status ACTIVE in this location. Null if unknown."
                            },
                            "not_in_use_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status NOT_IN_USE in this location. Null if unknown."
                            },
                            "missing_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status MISSING in this location. Null if unknown."
                            },
                            "missing_asset_count_last_24_hours": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets that became MISSING in the last 24 hours in this location. Null if unknown."
                            },
                            "device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Total number of devices in this location. Null if unknown."
                            },
                            "offline_device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of devices with status OFFLINE in this location. Null if unknown."
                            },
                            "active_device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of devices with status ACTIVE in this location. Null if unknown."
                            },
                            "ready_to_connect_device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of devices with status READY_TO_CONNECT in this location. Null if unknown."
                            },
                            "device_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "Timestamp of the most recent report from any device in this location, in RFC 3339 format. Null if no device has ever reported."
                            }
                        }
                    }
                }
            },
            "BuildingRollUpGeoJsonList": {
                "type": "object",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureCollectionEnum"
                    },
                    "features": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/BuildingRollUpGeoJson"
                        }
                    }
                }
            },
            "BulkUpdateAssetAllSkippedAsset": {
                "type": "object",
                "description": "A matched asset that was skipped because it is integration-managed.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "Unique identifier of the skipped asset."
                    },
                    "customer_reference": {
                        "type": "string",
                        "description": "Unique, customer/SAP-supplied identifier for the skipped asset."
                    }
                },
                "required": [
                    "customer_reference",
                    "id"
                ]
            },
            "BulkUpdateAssetAllSkippedResponse": {
                "type": "object",
                "description": "The result when every matched asset was skipped because it is integration-managed.",
                "properties": {
                    "message": {
                        "type": "string",
                        "description": "Human-readable summary explaining that no assets were updated."
                    },
                    "skipped": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/BulkUpdateAssetAllSkippedAsset"
                        },
                        "description": "Every asset that matched the filters, all skipped because they are integration-managed."
                    }
                },
                "required": [
                    "message",
                    "skipped"
                ]
            },
            "BulkUpdateAssetResponse": {
                "type": "object",
                "description": "The result of a bulk update, including any assets skipped because they are integration-managed.",
                "properties": {
                    "message": {
                        "type": "string",
                        "description": "Human-readable summary of the update result."
                    },
                    "updated_count": {
                        "type": "integer",
                        "description": "Number of assets updated. Optional; present on success."
                    },
                    "skipped": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/BulkUpdateAssetSkippedAsset"
                        },
                        "description": "Assets that matched the filters but were skipped because they are integration-managed. Present only if any were skipped."
                    }
                },
                "required": [
                    "message"
                ]
            },
            "BulkUpdateAssetSkippedAsset": {
                "type": "object",
                "description": "A matched asset that was skipped because it is integration-managed.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "Unique identifier of the skipped asset."
                    },
                    "customer_reference": {
                        "type": "string",
                        "description": "Unique, customer/SAP-supplied identifier for the skipped asset."
                    }
                },
                "required": [
                    "customer_reference",
                    "id"
                ]
            },
            "CampusBuildingView": {
                "type": "object",
                "description": "A summary of the parent campus for a building, nested under Building responses.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the campus."
                    },
                    "campus_id": {
                        "type": "string",
                        "readOnly": true,
                        "description": "Unique text code for the campus."
                    },
                    "campus_description": {
                        "type": "string",
                        "readOnly": true,
                        "description": "Human-readable name of the campus."
                    }
                },
                "required": [
                    "campus_description",
                    "campus_id",
                    "id"
                ]
            },
            "CampusDescription": {
                "type": "object",
                "description": "The campus name only, nested under a location hierarchy summary.",
                "properties": {
                    "campus_description": {
                        "type": "string",
                        "description": "Human-readable name of the campus."
                    }
                },
                "required": [
                    "campus_description"
                ]
            },
            "CampusGeoJson": {
                "type": "object",
                "description": "A campus location, represented as a GeoJSON Feature with a multi-polygon geometry.",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureEnum"
                    },
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the campus."
                    },
                    "geometry": {
                        "type": "object",
                        "properties": {
                            "type": {
                                "type": "string",
                                "enum": [
                                    "MultiPolygon"
                                ]
                            },
                            "coordinates": {
                                "type": "array",
                                "items": {
                                    "type": "array",
                                    "items": {
                                        "type": "array",
                                        "items": {
                                            "type": "array",
                                            "items": {
                                                "type": "number",
                                                "format": "float"
                                            },
                                            "example": [
                                                12.9721,
                                                77.5933
                                            ],
                                            "minItems": 2,
                                            "maxItems": 3
                                        },
                                        "example": [
                                            [
                                                22.4707,
                                                70.0577
                                            ],
                                            [
                                                12.9721,
                                                77.5933
                                            ]
                                        ],
                                        "minItems": 4
                                    },
                                    "example": [
                                        [
                                            [
                                                0.0,
                                                0.0
                                            ],
                                            [
                                                0.0,
                                                50.0
                                            ],
                                            [
                                                50.0,
                                                50.0
                                            ],
                                            [
                                                50.0,
                                                0.0
                                            ],
                                            [
                                                0.0,
                                                0.0
                                            ]
                                        ]
                                    ]
                                }
                            }
                        }
                    },
                    "properties": {
                        "type": "object",
                        "properties": {
                            "campus_id": {
                                "type": "string",
                                "description": "Unique text code for the campus. Required."
                            },
                            "campus_description": {
                                "type": "string",
                                "description": "Human-readable name of the campus. Required."
                            },
                            "version": {
                                "type": "integer",
                                "description": "Optimistic-locking revision counter, incremented on every update."
                            },
                            "created": {
                                "type": "string",
                                "format": "date-time",
                                "readOnly": true,
                                "description": "Timestamp the campus record was created, in RFC 3339 format."
                            },
                            "is_occupied": {
                                "type": "boolean",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Whether the campus currently has detected occupancy. True means at least one room is occupied."
                            },
                            "is_people_count_enabled": {
                                "type": "boolean",
                                "readOnly": true,
                                "description": "Whether people-counting sensors are configured for this campus."
                            },
                            "people_count": {
                                "type": "integer",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Most recently reported total people count across the campus. Null if never reported."
                            },
                            "people_count_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Timestamp of the last people-count reading, in RFC 3339 format. Null if never reported."
                            },
                            "sensor_count": {
                                "type": "integer",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Number of sensors reporting for this campus. Null if unknown."
                            },
                            "occupancy_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Timestamp of the last occupancy reading, in RFC 3339 format. Null if never reported."
                            },
                            "building_count": {
                                "type": "integer",
                                "readOnly": true,
                                "description": "Number of non-deleted buildings on this campus. Computed live, not stored."
                            },
                            "room_count": {
                                "type": "integer",
                                "readOnly": true,
                                "description": "Number of non-deleted rooms on this campus. Computed live, not stored."
                            }
                        }
                    }
                }
            },
            "CampusGeoJsonList": {
                "type": "object",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureCollectionEnum"
                    },
                    "features": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/CampusGeoJson"
                        }
                    }
                }
            },
            "CampusLocationView": {
                "type": "object",
                "description": "A summary of a campus, nested under Location responses.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the campus."
                    },
                    "campus_id": {
                        "type": "string",
                        "description": "Unique text code for the campus."
                    },
                    "campus_description": {
                        "type": "string",
                        "description": "Human-readable name of the campus."
                    }
                },
                "required": [
                    "campus_description",
                    "campus_id",
                    "id"
                ]
            },
            "CampusRollUpGeoJson": {
                "type": "object",
                "description": "A denormalized, precomputed rollup of metrics for a campus, represented as a GeoJSON Feature.",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureEnum"
                    },
                    "id": {
                        "type": "integer",
                        "maximum": 2147483647,
                        "minimum": -2147483648,
                        "description": "Unique identifier of the campus."
                    },
                    "geometry": {
                        "type": "object",
                        "properties": {
                            "type": {
                                "type": "string",
                                "enum": [
                                    "MultiPolygon"
                                ]
                            },
                            "coordinates": {
                                "type": "array",
                                "items": {
                                    "type": "array",
                                    "items": {
                                        "type": "array",
                                        "items": {
                                            "type": "array",
                                            "items": {
                                                "type": "number",
                                                "format": "float"
                                            },
                                            "example": [
                                                12.9721,
                                                77.5933
                                            ],
                                            "minItems": 2,
                                            "maxItems": 3
                                        },
                                        "example": [
                                            [
                                                22.4707,
                                                70.0577
                                            ],
                                            [
                                                12.9721,
                                                77.5933
                                            ]
                                        ],
                                        "minItems": 4
                                    },
                                    "example": [
                                        [
                                            [
                                                0.0,
                                                0.0
                                            ],
                                            [
                                                0.0,
                                                50.0
                                            ],
                                            [
                                                50.0,
                                                50.0
                                            ],
                                            [
                                                50.0,
                                                0.0
                                            ],
                                            [
                                                0.0,
                                                0.0
                                            ]
                                        ]
                                    ]
                                }
                            }
                        }
                    },
                    "properties": {
                        "type": "object",
                        "properties": {
                            "campus_id": {
                                "type": "string",
                                "nullable": true,
                                "description": "Unique text code for the campus."
                            },
                            "campus_description": {
                                "type": "string",
                                "nullable": true,
                                "description": "Human-readable name of the campus."
                            },
                            "sensor_count": {
                                "type": "integer",
                                "maximum": 9223372036854775807,
                                "minimum": -9223372036854775808,
                                "format": "int64",
                                "nullable": true,
                                "description": "Number of sensors reporting in this location. Null if unknown."
                            },
                            "active_alert_count": {
                                "type": "integer",
                                "maximum": 9223372036854775807,
                                "minimum": -9223372036854775808,
                                "format": "int64",
                                "nullable": true,
                                "description": "Number of currently active alerts in this location. Null if unknown."
                            },
                            "people_count": {
                                "type": "integer",
                                "maximum": 9223372036854775807,
                                "minimum": -9223372036854775808,
                                "format": "int64",
                                "nullable": true,
                                "description": "Most recently reported total people count for this location. Null if never reported."
                            },
                            "is_people_count_enabled": {
                                "type": "boolean",
                                "description": "Whether people-counting sensors are configured for this location."
                            },
                            "people_count_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "Timestamp of the last people-count reading, in RFC 3339 format. Null if never reported."
                            },
                            "is_occupied": {
                                "type": "boolean",
                                "nullable": true,
                                "description": "Whether this location currently has detected occupancy."
                            },
                            "occupancy_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "Timestamp of the last occupancy reading, in RFC 3339 format. Null if never reported."
                            },
                            "asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Total number of assets in this location. Null if unknown."
                            },
                            "in_use_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status IN_USE in this location. Null if unknown."
                            },
                            "unpaired_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status UNPAIRED in this location. Null if unknown."
                            },
                            "active_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status ACTIVE in this location. Null if unknown."
                            },
                            "not_in_use_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status NOT_IN_USE in this location. Null if unknown."
                            },
                            "missing_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status MISSING in this location. Null if unknown."
                            },
                            "missing_asset_count_last_24_hours": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets that became MISSING in the last 24 hours in this location. Null if unknown."
                            },
                            "device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Total number of devices in this location. Null if unknown."
                            },
                            "offline_device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of devices with status OFFLINE in this location. Null if unknown."
                            },
                            "active_device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of devices with status ACTIVE in this location. Null if unknown."
                            },
                            "ready_to_connect_device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of devices with status READY_TO_CONNECT in this location. Null if unknown."
                            },
                            "device_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "Timestamp of the most recent report from any device in this location, in RFC 3339 format. Null if no device has ever reported."
                            }
                        }
                    }
                }
            },
            "CampusRollUpGeoJsonList": {
                "type": "object",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureCollectionEnum"
                    },
                    "features": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/CampusRollUpGeoJson"
                        }
                    }
                }
            },
            "ConfidenceEnum": {
                "enum": [
                    "CAMPUS",
                    "BUILDING",
                    "FLOOR",
                    "ROOM",
                    "ZONE"
                ],
                "type": "string",
                "description": "* `CAMPUS` - Campus\n* `BUILDING` - Building\n* `FLOOR` - Floor\n* `ROOM` - Room\n* `ZONE` - Zone"
            },
            "DataTypeEnum": {
                "enum": [
                    "BOOLEAN",
                    "NUMERIC",
                    "COORDINATES",
                    "STRING",
                    "UNKNOWN"
                ],
                "type": "string",
                "description": "* `BOOLEAN` - Boolean\n* `NUMERIC` - Numeric\n* `COORDINATES` - Coordinates\n* `STRING` - String\n* `UNKNOWN` - Unknown"
            },
            "Device": {
                "type": "object",
                "description": "A physical, serialized MQFlex hardware device instance.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the device."
                    },
                    "device_id": {
                        "type": "string",
                        "description": "Hardware identifier of the device (e.g. Dev EUI). Required."
                    },
                    "description": {
                        "type": "string",
                        "description": "Human-readable description of the device. Required."
                    },
                    "mac_address": {
                        "type": "string",
                        "nullable": true,
                        "description": "MAC address of the device. Optional; auto-generated from device_id if not supplied."
                    },
                    "battery_level": {
                        "type": "integer",
                        "maximum": 2147483647,
                        "minimum": -2147483648,
                        "nullable": true,
                        "description": "Most recently reported battery level. Optional; null if not reported."
                    },
                    "last_reported_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "Timestamp of the last report from the device, in RFC 3339 format. Optional; null if never reported."
                    },
                    "installed_date": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "Timestamp the device was installed, in RFC 3339 format. Optional; null if not set."
                    },
                    "confidence": {
                        "nullable": true,
                        "description": "Precision of the device's last reported location: CAMPUS, BUILDING, FLOOR, ROOM, or ZONE. Optional; null if not located.\n\n* `CAMPUS` - Campus\n* `BUILDING` - Building\n* `FLOOR` - Floor\n* `ROOM` - Room\n* `ZONE` - Zone",
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/ConfidenceEnum"
                            },
                            {
                                "$ref": "#/components/schemas/BlankEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "status": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/Status07cEnum"
                            }
                        ],
                        "description": "Runtime connectivity state of the device: OFFLINE, ACTIVE, READY_TO_CONNECT, or UNKNOWN.\n\n* `OFFLINE` - Offline\n* `ACTIVE` - Active\n* `READY_TO_CONNECT` - Ready to Connect\n* `UNKNOWN` - Unknown"
                    },
                    "firmware_version": {
                        "type": "string",
                        "nullable": true,
                        "description": "Firmware version running on the device. Optional; null if unknown."
                    },
                    "device_model_id": {
                        "type": "integer",
                        "writeOnly": true,
                        "description": "ID of the catalog/SKU-level device model this device is an instance of. Required."
                    },
                    "device_model": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/DeviceModel"
                            }
                        ],
                        "readOnly": true,
                        "description": "Catalog/SKU-level device model this device is an instance of."
                    },
                    "sensors": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Sensor"
                        },
                        "readOnly": true,
                        "description": "Sensors attached to this device."
                    },
                    "version": {
                        "type": "integer",
                        "description": "Optimistic-locking revision counter, incremented on every update."
                    },
                    "asset": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/AssetSimpleView"
                        },
                        "readOnly": true,
                        "description": "Asset(s) this device is currently paired to."
                    },
                    "properties": {
                        "nullable": true,
                        "description": "Free-form JSON properties for the device, validated against the device model's properties_schema. Optional; null if not set."
                    },
                    "is_installed": {
                        "type": "boolean",
                        "readOnly": true,
                        "description": "Whether the device has completed the installation flow. True means installed."
                    },
                    "installer": {
                        "type": "string",
                        "nullable": true,
                        "description": "Name of the person who installed the device. Optional; null if not set."
                    },
                    "installation_notes": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/DeviceInstallationNoteSimple"
                        },
                        "readOnly": true,
                        "description": "Installation notes recorded for this device."
                    },
                    "installation_photos": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/DeviceInstallationPhotoSimple"
                        },
                        "readOnly": true,
                        "description": "Installation photos recorded for this device."
                    },
                    "device_location": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/DeviceLocationList"
                            }
                        ],
                        "readOnly": true,
                        "description": "The device's currently-active location interval (the DeviceLocation row with a null end_date). Computed live, not stored. Null if the device has no active location."
                    },
                    "last_synced_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "Timestamp of the last external sync attempt, in RFC 3339 format. Optional; null if never synced."
                    },
                    "last_sync_status": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/LastSyncStatusEnum"
                            }
                        ],
                        "description": "Outcome of the last external sync attempt: SUCCESS, FAILURE, or NOT_SYNCED.\n\n* `SUCCESS` - Success\n* `FAILURE` - Failure\n* `NOT_SYNCED` - Not Synced"
                    }
                },
                "required": [
                    "asset",
                    "description",
                    "device_id",
                    "device_location",
                    "device_model",
                    "device_model_id",
                    "id",
                    "installation_notes",
                    "installation_photos",
                    "is_installed",
                    "sensors"
                ]
            },
            "DeviceInstallationNoteSimple": {
                "type": "object",
                "description": "An installation note recorded for a device, nested under Device responses.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the installation note."
                    },
                    "installation_note": {
                        "type": "string",
                        "nullable": true,
                        "description": "Text of the installation note. Optional; null if not set."
                    },
                    "timestamp": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Timestamp the note applies to, in RFC 3339 format."
                    },
                    "user": {
                        "type": "string",
                        "nullable": true,
                        "description": "Username of the person who recorded the note. Optional; null if not set."
                    },
                    "created": {
                        "type": "string",
                        "format": "date-time",
                        "readOnly": true,
                        "description": "Timestamp the note record was created, in RFC 3339 format."
                    },
                    "updated": {
                        "type": "string",
                        "format": "date-time",
                        "readOnly": true,
                        "description": "Timestamp the note record was last updated, in RFC 3339 format."
                    }
                },
                "required": [
                    "created",
                    "id",
                    "updated"
                ]
            },
            "DeviceInstallationPhotoSimple": {
                "type": "object",
                "description": "An installation photo recorded for a device, nested under Device responses.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the installation photo."
                    },
                    "photo": {
                        "type": "string",
                        "format": "uri",
                        "description": "URL of the installation photo. Required."
                    },
                    "original_filename": {
                        "type": "string",
                        "nullable": true,
                        "description": "Original filename of the uploaded photo. Optional; null if not set."
                    },
                    "timestamp": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Timestamp the photo applies to, in RFC 3339 format."
                    },
                    "user": {
                        "type": "string",
                        "nullable": true,
                        "description": "Username of the person who uploaded the photo. Optional; null if not set."
                    },
                    "created": {
                        "type": "string",
                        "format": "date-time",
                        "readOnly": true,
                        "description": "Timestamp the photo record was created, in RFC 3339 format."
                    },
                    "updated": {
                        "type": "string",
                        "format": "date-time",
                        "readOnly": true,
                        "description": "Timestamp the photo record was last updated, in RFC 3339 format."
                    }
                },
                "required": [
                    "created",
                    "id",
                    "photo",
                    "updated"
                ]
            },
            "DeviceLocationList": {
                "type": "object",
                "description": "A device's location interval, intended for the device list endpoint (JSON + CSV).\n\nNote: We intentionally do NOT emit GeoJSON Feature format here because downstream\ncode (including `DeviceCsvRenderer`) expects `device_location.location.*` to be\na plain nested object.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the location interval."
                    },
                    "start_date": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Timestamp the location interval began, in RFC 3339 format."
                    },
                    "end_date": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "Timestamp the location interval ended, in RFC 3339 format. Null if the interval is still active (currently open)."
                    },
                    "confidence": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/ConfidenceEnum"
                            }
                        ],
                        "description": "Precision of this location: CAMPUS, BUILDING, FLOOR, ROOM, or ZONE.\n\n* `CAMPUS` - Campus\n* `BUILDING` - Building\n* `FLOOR` - Floor\n* `ROOM` - Room\n* `ZONE` - Zone"
                    },
                    "is_missing": {
                        "type": "boolean",
                        "description": "Whether the device was flagged missing during this interval. True means missing."
                    },
                    "is_user_defined": {
                        "type": "boolean",
                        "description": "Whether this location was manually set by a user rather than derived from sensor reports. True means user-defined."
                    },
                    "location": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/LocationView"
                            }
                        ],
                        "readOnly": true,
                        "description": "Campus/building/floor/room/zone hierarchy for this location interval."
                    },
                    "coordinates": {
                        "type": "object",
                        "nullable": true,
                        "description": "GeoJSON geometry (point) of the reported coordinates. Null if unavailable.",
                        "properties": {
                            "type": {
                                "type": "string",
                                "description": "GeoJSON geometry type.",
                                "enum": [
                                    "Point",
                                    "LineString",
                                    "Polygon",
                                    "MultiPoint",
                                    "MultiLineString",
                                    "MultiPolygon",
                                    "GeometryCollection"
                                ]
                            },
                            "coordinates": {
                                "type": "array",
                                "description": "GeoJSON coordinate array; nesting depth depends on the geometry type (e.g. [lng, lat] for a Point).",
                                "items": {
                                    "type": "number"
                                }
                            }
                        },
                        "readOnly": true
                    },
                    "version": {
                        "type": "integer",
                        "description": "Optimistic-locking revision counter, incremented on every update."
                    }
                },
                "required": [
                    "coordinates",
                    "id",
                    "location"
                ]
            },
            "DeviceModel": {
                "type": "object",
                "description": "A catalog/SKU-level definition of an MQFlex hardware device type.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the device model."
                    },
                    "name": {
                        "type": "string",
                        "description": "Name of the device model. Required."
                    },
                    "firmware_version": {
                        "type": "string",
                        "nullable": true,
                        "description": "Default firmware version for devices of this model. Optional; null if unset."
                    },
                    "sku": {
                        "type": "string",
                        "description": "Unique manufacturer SKU for the device model. Required."
                    },
                    "manufacturer": {
                        "type": "string",
                        "nullable": true,
                        "description": "Manufacturer of the device model. Optional; null if not set."
                    },
                    "model": {
                        "type": "string",
                        "nullable": true,
                        "description": "Manufacturer model name of the device model. Optional; null if not set."
                    },
                    "sensor_models": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/SensorModelWithDefault"
                        },
                        "readOnly": true,
                        "description": "Sensor models this device model supports, each annotated with is_default_selection. Computed live from the DeviceModelSensorModel through-table, not stored."
                    },
                    "setup_action_type": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/SetupActionTypeEnum"
                            }
                        ],
                        "description": "Installation/pairing workflow used for devices of this model: TAG or DEVICE.\n\n* `TAG` - Tag\n* `DEVICE` - Device"
                    },
                    "version": {
                        "type": "integer",
                        "description": "Optimistic-locking revision counter, incremented on every update."
                    },
                    "indoor_outdoor": {
                        "type": "string",
                        "nullable": true,
                        "description": "Whether the device model is rated for indoor or outdoor use. Optional; null if not set."
                    },
                    "led": {
                        "type": "boolean",
                        "description": "Whether devices of this model have an LED. True means LED-capable."
                    },
                    "sleep_function": {
                        "type": "boolean",
                        "description": "Whether devices of this model support a low-power sleep mode. True means supported."
                    },
                    "location_type": {
                        "type": "string",
                        "nullable": true,
                        "description": "Location-tracking method used by devices of this model. Optional; null if not set."
                    },
                    "sounder": {
                        "type": "boolean",
                        "description": "Whether devices of this model have an audible sounder. True means sounder-capable."
                    },
                    "tx_interval": {
                        "type": "string",
                        "nullable": true,
                        "description": "Default radio transmit interval for devices of this model. Optional; null if not set."
                    },
                    "tx_power_config": {
                        "type": "string",
                        "nullable": true,
                        "description": "Default radio transmit power configuration for devices of this model. Optional; null if not set."
                    },
                    "properties_schema": {
                        "nullable": true,
                        "description": "JSON schema (field name to allowable values) that validates the free-form properties JSON on individual Device records of this model. Optional; null if not set."
                    }
                },
                "required": [
                    "id",
                    "name",
                    "sensor_models",
                    "sku"
                ]
            },
            "DeviceModelSensorModel": {
                "type": "object",
                "description": "An association describing which sensor models a device model supports.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the association."
                    },
                    "device_model_id": {
                        "type": "integer",
                        "writeOnly": true,
                        "description": "ID of the device model in this association. Required."
                    },
                    "sensor_model_id": {
                        "type": "integer",
                        "writeOnly": true,
                        "description": "ID of the sensor model in this association. Required."
                    },
                    "device_model": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/DeviceModel"
                            }
                        ],
                        "readOnly": true,
                        "description": "Full device model in this association."
                    },
                    "sensor_model": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/SensorModel"
                            }
                        ],
                        "readOnly": true,
                        "description": "Full sensor model in this association."
                    },
                    "is_default_selection": {
                        "type": "boolean",
                        "description": "Whether this sensor model is pre-selected in the UI when a device of this model is provisioned. True means pre-selected."
                    }
                },
                "required": [
                    "device_model",
                    "device_model_id",
                    "id",
                    "sensor_model",
                    "sensor_model_id"
                ]
            },
            "DeviceView": {
                "type": "object",
                "description": "A device paired to an asset, nested under Asset responses.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the device."
                    },
                    "device_id": {
                        "type": "string",
                        "description": "Hardware identifier of the device (e.g. Dev EUI). Required."
                    },
                    "description": {
                        "type": "string",
                        "description": "Human-readable description of the device. Required."
                    },
                    "mac_address": {
                        "type": "string",
                        "nullable": true,
                        "description": "MAC address of the device. Optional; null if not set."
                    },
                    "battery_level": {
                        "type": "integer",
                        "maximum": 2147483647,
                        "minimum": -2147483648,
                        "nullable": true,
                        "description": "Most recently reported battery level. Optional; null if not reported."
                    },
                    "last_reported_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "Timestamp of the last report from the device, in RFC 3339 format. Optional; null if never reported."
                    },
                    "confidence": {
                        "nullable": true,
                        "description": "Precision of the device's last reported location: CAMPUS, BUILDING, FLOOR, ROOM, or ZONE. Optional; null if not located.\n\n* `CAMPUS` - Campus\n* `BUILDING` - Building\n* `FLOOR` - Floor\n* `ROOM` - Room\n* `ZONE` - Zone",
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/ConfidenceEnum"
                            },
                            {
                                "$ref": "#/components/schemas/BlankEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "status": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/Status07cEnum"
                            }
                        ],
                        "description": "Runtime connectivity state of the device: OFFLINE, ACTIVE, READY_TO_CONNECT, or UNKNOWN.\n\n* `OFFLINE` - Offline\n* `ACTIVE` - Active\n* `READY_TO_CONNECT` - Ready to Connect\n* `UNKNOWN` - Unknown"
                    },
                    "firmware_version": {
                        "type": "string",
                        "nullable": true,
                        "description": "Firmware version running on the device. Optional; null if unknown."
                    },
                    "device_model_id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "ID of the catalog/SKU-level device model this device is an instance of."
                    },
                    "device_model": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/DeviceModel"
                            }
                        ],
                        "readOnly": true,
                        "description": "Catalog/SKU-level device model this device is an instance of."
                    },
                    "sensors": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Sensor"
                        },
                        "readOnly": true,
                        "description": "Sensors attached to this device."
                    },
                    "version": {
                        "type": "integer",
                        "description": "Optimistic-locking revision counter, incremented on every update."
                    }
                },
                "required": [
                    "description",
                    "device_id",
                    "device_model",
                    "device_model_id",
                    "id",
                    "sensors"
                ]
            },
            "Endpoint": {
                "type": "object",
                "description": "A webhook/notification subscription for a single event type.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the endpoint subscription."
                    },
                    "base_url": {
                        "type": "string",
                        "description": "Base URL the platform POSTs to when the subscribed event fires; concatenated with extended_url to form the full delivery URL. Required."
                    },
                    "extended_url": {
                        "type": "string",
                        "nullable": true,
                        "description": "URL path appended to base_url to form the full delivery URL. Optional; may be blank."
                    },
                    "is_sap": {
                        "type": "boolean",
                        "description": "Whether delivery uses mTLS client-certificate authentication plus HTTP Basic Auth, both configured via global application settings, instead of a plain unauthenticated POST. True means mTLS+Basic Auth."
                    },
                    "event_type": {
                        "nullable": true,
                        "description": "The single event type this endpoint subscribes to. Optional; null means the endpoint will not receive any events.\n\n* `ASSET_LEFT_ROOM` - Asset left room\n* `ASSET_ARRIVED_ROOM` - Asset arrived at room\n* `ASSET_LEFT_FLOOR` - Asset left floor\n* `ASSET_ARRIVED_FLOOR` - Asset arrived at floor\n* `ASSET_LEFT_BUILDING` - Asset left building\n* `ASSET_ARRIVED_BUILDING` - Asset arrived at building\n* `ASSET_LEFT_CAMPUS` - Asset left campus\n* `ASSET_ARRIVED_CAMPUS` - Asset arrived at campus\n* `ASSET_MOVED` - Asset moved\n* `TAG_BATTERY_LOW` - Tag battery low\n* `DEVICE_BATTERY_LOW` - Device battery low\n* `DEVICE_STATUS_CHANGE` - Device status change\n* `MISSING_ASSET` - Missing asset\n* `BRIDGE_MISSING` - Bridge missing\n* `LED_ACTIVATED` - Led activated\n* `LED_ACTIVATION_FAILED` - Led activation failed\n* `ASSET_UNTAGGED` - Asset untagged\n* `LED_REQUEST` - Led request\n* `CONFIGURATION` - configuration\n* `ASSET_LOCATION_SYNC` - Asset location sync\n* `DAISY_CHAIN_OFFLINE` - Daisy chain offline\n* `DEVICE_OFFLINE` - Device offline\n* `SENSOR_THRESHOLD_TRIGGER` - Sensor threshold trigger\n* `SENSOR_THRESHOLD_CLEAR` - Sensor threshold clear\n* `SENSOR_DATA` - Sensor data",
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/EventTypeEnum"
                            },
                            {
                                "$ref": "#/components/schemas/BlankEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "enabled": {
                        "type": "boolean",
                        "description": "Whether this endpoint currently receives events. True means active."
                    }
                },
                "required": [
                    "base_url",
                    "id"
                ]
            },
            "EventTypeEnum": {
                "enum": [
                    "ASSET_LEFT_ROOM",
                    "ASSET_ARRIVED_ROOM",
                    "ASSET_LEFT_FLOOR",
                    "ASSET_ARRIVED_FLOOR",
                    "ASSET_LEFT_BUILDING",
                    "ASSET_ARRIVED_BUILDING",
                    "ASSET_LEFT_CAMPUS",
                    "ASSET_ARRIVED_CAMPUS",
                    "ASSET_MOVED",
                    "TAG_BATTERY_LOW",
                    "DEVICE_BATTERY_LOW",
                    "DEVICE_STATUS_CHANGE",
                    "MISSING_ASSET",
                    "BRIDGE_MISSING",
                    "LED_ACTIVATED",
                    "LED_ACTIVATION_FAILED",
                    "ASSET_UNTAGGED",
                    "LED_REQUEST",
                    "CONFIGURATION",
                    "ASSET_LOCATION_SYNC",
                    "DAISY_CHAIN_OFFLINE",
                    "DEVICE_OFFLINE",
                    "SENSOR_THRESHOLD_TRIGGER",
                    "SENSOR_THRESHOLD_CLEAR",
                    "SENSOR_DATA"
                ],
                "type": "string",
                "description": "* `ASSET_LEFT_ROOM` - Asset left room\n* `ASSET_ARRIVED_ROOM` - Asset arrived at room\n* `ASSET_LEFT_FLOOR` - Asset left floor\n* `ASSET_ARRIVED_FLOOR` - Asset arrived at floor\n* `ASSET_LEFT_BUILDING` - Asset left building\n* `ASSET_ARRIVED_BUILDING` - Asset arrived at building\n* `ASSET_LEFT_CAMPUS` - Asset left campus\n* `ASSET_ARRIVED_CAMPUS` - Asset arrived at campus\n* `ASSET_MOVED` - Asset moved\n* `TAG_BATTERY_LOW` - Tag battery low\n* `DEVICE_BATTERY_LOW` - Device battery low\n* `DEVICE_STATUS_CHANGE` - Device status change\n* `MISSING_ASSET` - Missing asset\n* `BRIDGE_MISSING` - Bridge missing\n* `LED_ACTIVATED` - Led activated\n* `LED_ACTIVATION_FAILED` - Led activation failed\n* `ASSET_UNTAGGED` - Asset untagged\n* `LED_REQUEST` - Led request\n* `CONFIGURATION` - configuration\n* `ASSET_LOCATION_SYNC` - Asset location sync\n* `DAISY_CHAIN_OFFLINE` - Daisy chain offline\n* `DEVICE_OFFLINE` - Device offline\n* `SENSOR_THRESHOLD_TRIGGER` - Sensor threshold trigger\n* `SENSOR_THRESHOLD_CLEAR` - Sensor threshold clear\n* `SENSOR_DATA` - Sensor data"
            },
            "FieldNameEnum": {
                "enum": [
                    "description",
                    "type",
                    "owner",
                    "manufacturer",
                    "model_number"
                ],
                "type": "string",
                "description": "* `description` - description\n* `type` - type\n* `owner` - owner\n* `manufacturer` - manufacturer\n* `model_number` - model_number"
            },
            "FloorDescription": {
                "type": "object",
                "description": "The floor name only, nested under a location hierarchy summary.",
                "properties": {
                    "floor_description": {
                        "type": "string",
                        "description": "Human-readable name of the floor."
                    }
                },
                "required": [
                    "floor_description"
                ]
            },
            "FloorGeoJson": {
                "type": "object",
                "description": "A floor location, represented as a GeoJSON Feature with a polygon geometry.",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureEnum"
                    },
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the floor."
                    },
                    "geometry": {
                        "type": "object",
                        "properties": {
                            "type": {
                                "type": "string",
                                "enum": [
                                    "Polygon"
                                ]
                            },
                            "coordinates": {
                                "type": "array",
                                "items": {
                                    "type": "array",
                                    "items": {
                                        "type": "array",
                                        "items": {
                                            "type": "number",
                                            "format": "float"
                                        },
                                        "example": [
                                            12.9721,
                                            77.5933
                                        ],
                                        "minItems": 2,
                                        "maxItems": 3
                                    },
                                    "example": [
                                        [
                                            22.4707,
                                            70.0577
                                        ],
                                        [
                                            12.9721,
                                            77.5933
                                        ]
                                    ],
                                    "minItems": 4
                                },
                                "example": [
                                    [
                                        [
                                            0.0,
                                            0.0
                                        ],
                                        [
                                            0.0,
                                            50.0
                                        ],
                                        [
                                            50.0,
                                            50.0
                                        ],
                                        [
                                            50.0,
                                            0.0
                                        ],
                                        [
                                            0.0,
                                            0.0
                                        ]
                                    ]
                                ]
                            }
                        }
                    },
                    "properties": {
                        "type": "object",
                        "properties": {
                            "floor_id": {
                                "type": "string",
                                "description": "Unique text code for the floor. Required."
                            },
                            "floor_description": {
                                "type": "string",
                                "description": "Human-readable name of the floor. Required."
                            },
                            "version": {
                                "type": "integer",
                                "description": "Optimistic-locking revision counter, incremented on every update."
                            },
                            "created": {
                                "type": "string",
                                "format": "date-time",
                                "readOnly": true,
                                "description": "Timestamp the floor record was created, in RFC 3339 format."
                            },
                            "building": {
                                "allOf": [
                                    {
                                        "$ref": "#/components/schemas/BuildingLocationView"
                                    }
                                ],
                                "readOnly": true,
                                "description": "Summary of the building this floor belongs to."
                            },
                            "room_count": {
                                "type": "integer",
                                "readOnly": true,
                                "description": "Number of non-deleted rooms on this floor. Computed live, not stored."
                            },
                            "zone_count": {
                                "type": "integer",
                                "readOnly": true,
                                "description": "Number of non-deleted zones on this floor. Computed live, not stored."
                            },
                            "bridge_count": {
                                "type": "integer",
                                "readOnly": true,
                                "description": "Number of installed bridge hardware units on this floor. Computed live, not stored."
                            },
                            "bil_count": {
                                "type": "integer",
                                "readOnly": true,
                                "description": "Number of available bridge-installation-location slots on this floor. Computed live, not stored."
                            },
                            "building_rotation": {
                                "type": "number",
                                "format": "double",
                                "readOnly": true,
                                "description": "Rotation of the parent building's floor plan, in degrees. Null if not set."
                            },
                            "building_id": {
                                "type": "integer",
                                "writeOnly": true,
                                "description": "ID of the building this floor belongs to. Required on write."
                            },
                            "is_occupied": {
                                "type": "boolean",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Whether the floor currently has detected occupancy."
                            },
                            "is_people_count_enabled": {
                                "type": "boolean",
                                "readOnly": true,
                                "description": "Whether people-counting sensors are configured for this floor."
                            },
                            "people_count": {
                                "type": "integer",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Most recently reported total people count for the floor. Null if never reported."
                            },
                            "people_count_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Timestamp of the last people-count reading, in RFC 3339 format. Null if never reported."
                            },
                            "sensor_count": {
                                "type": "integer",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Number of sensors reporting for this floor. Null if unknown."
                            },
                            "occupancy_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Timestamp of the last occupancy reading, in RFC 3339 format. Null if never reported."
                            }
                        }
                    }
                }
            },
            "FloorGeoJsonList": {
                "type": "object",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureCollectionEnum"
                    },
                    "features": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/FloorGeoJson"
                        }
                    }
                }
            },
            "FloorLocationView": {
                "type": "object",
                "description": "A summary of a floor, nested under Location responses.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the floor."
                    },
                    "floor_id": {
                        "type": "string",
                        "description": "Unique text code for the floor."
                    },
                    "floor_description": {
                        "type": "string",
                        "description": "Human-readable name of the floor."
                    }
                },
                "required": [
                    "floor_description",
                    "floor_id",
                    "id"
                ]
            },
            "FloorRollUpGeoJson": {
                "type": "object",
                "description": "A denormalized, precomputed rollup of metrics for a floor, represented as a GeoJSON Feature.",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureEnum"
                    },
                    "id": {
                        "type": "integer",
                        "maximum": 2147483647,
                        "minimum": -2147483648,
                        "description": "Unique identifier of the floor."
                    },
                    "geometry": {
                        "type": "object",
                        "properties": {
                            "type": {
                                "type": "string",
                                "enum": [
                                    "Polygon"
                                ]
                            },
                            "coordinates": {
                                "type": "array",
                                "items": {
                                    "type": "array",
                                    "items": {
                                        "type": "array",
                                        "items": {
                                            "type": "number",
                                            "format": "float"
                                        },
                                        "example": [
                                            12.9721,
                                            77.5933
                                        ],
                                        "minItems": 2,
                                        "maxItems": 3
                                    },
                                    "example": [
                                        [
                                            22.4707,
                                            70.0577
                                        ],
                                        [
                                            12.9721,
                                            77.5933
                                        ]
                                    ],
                                    "minItems": 4
                                },
                                "example": [
                                    [
                                        [
                                            0.0,
                                            0.0
                                        ],
                                        [
                                            0.0,
                                            50.0
                                        ],
                                        [
                                            50.0,
                                            50.0
                                        ],
                                        [
                                            50.0,
                                            0.0
                                        ],
                                        [
                                            0.0,
                                            0.0
                                        ]
                                    ]
                                ]
                            }
                        }
                    },
                    "properties": {
                        "type": "object",
                        "properties": {
                            "floor_id": {
                                "type": "string",
                                "nullable": true,
                                "description": "Unique text code for the floor."
                            },
                            "floor_description": {
                                "type": "string",
                                "nullable": true,
                                "description": "Human-readable name of the floor."
                            },
                            "building_id": {
                                "type": "string",
                                "nullable": true,
                                "description": "Unique text code of the parent building. Null if unknown."
                            },
                            "building_db_id": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Unique identifier of the parent building. Null if unknown."
                            },
                            "building_description": {
                                "type": "string",
                                "nullable": true,
                                "description": "Human-readable name of the parent building. Null if unknown."
                            },
                            "campus_db_id": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Unique identifier of the parent campus. Null if unknown."
                            },
                            "sensor_count": {
                                "type": "integer",
                                "maximum": 9223372036854775807,
                                "minimum": -9223372036854775808,
                                "format": "int64",
                                "nullable": true,
                                "description": "Number of sensors reporting in this location. Null if unknown."
                            },
                            "active_alert_count": {
                                "type": "integer",
                                "maximum": 9223372036854775807,
                                "minimum": -9223372036854775808,
                                "format": "int64",
                                "nullable": true,
                                "description": "Number of currently active alerts in this location. Null if unknown."
                            },
                            "people_count": {
                                "type": "integer",
                                "maximum": 9223372036854775807,
                                "minimum": -9223372036854775808,
                                "format": "int64",
                                "nullable": true,
                                "description": "Most recently reported total people count for this location. Null if never reported."
                            },
                            "is_people_count_enabled": {
                                "type": "boolean",
                                "description": "Whether people-counting sensors are configured for this location."
                            },
                            "people_count_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "Timestamp of the last people-count reading, in RFC 3339 format. Null if never reported."
                            },
                            "is_occupied": {
                                "type": "boolean",
                                "nullable": true,
                                "description": "Whether this location currently has detected occupancy."
                            },
                            "occupancy_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "Timestamp of the last occupancy reading, in RFC 3339 format. Null if never reported."
                            },
                            "asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Total number of assets in this location. Null if unknown."
                            },
                            "in_use_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status IN_USE in this location. Null if unknown."
                            },
                            "unpaired_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status UNPAIRED in this location. Null if unknown."
                            },
                            "active_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status ACTIVE in this location. Null if unknown."
                            },
                            "not_in_use_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status NOT_IN_USE in this location. Null if unknown."
                            },
                            "missing_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status MISSING in this location. Null if unknown."
                            },
                            "missing_asset_count_last_24_hours": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets that became MISSING in the last 24 hours in this location. Null if unknown."
                            },
                            "device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Total number of devices in this location. Null if unknown."
                            },
                            "offline_device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of devices with status OFFLINE in this location. Null if unknown."
                            },
                            "active_device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of devices with status ACTIVE in this location. Null if unknown."
                            },
                            "ready_to_connect_device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of devices with status READY_TO_CONNECT in this location. Null if unknown."
                            },
                            "device_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "Timestamp of the most recent report from any device in this location, in RFC 3339 format. Null if no device has ever reported."
                            }
                        }
                    }
                }
            },
            "FloorRollUpGeoJsonList": {
                "type": "object",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureCollectionEnum"
                    },
                    "features": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/FloorRollUpGeoJson"
                        }
                    }
                }
            },
            "Gateway": {
                "type": "object",
                "description": "A physical LoRa/cellular gateway hardware unit that relays tag/device signals to the platform.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the gateway."
                    },
                    "node_id": {
                        "type": "string",
                        "description": "Unique 16-character alphanumeric hardware node identifier. Required."
                    },
                    "description": {
                        "type": "string",
                        "description": "Human-readable description of the gateway. Required."
                    },
                    "gateway_model": {
                        "type": "integer",
                        "description": "ID of the catalog/SKU-level gateway model this gateway is an instance of. Required."
                    },
                    "gateway_model_name": {
                        "type": "string",
                        "readOnly": true,
                        "description": "Name of the catalog/SKU-level gateway model this gateway is an instance of."
                    },
                    "mac_address": {
                        "type": "string",
                        "nullable": true,
                        "description": "MAC address of the gateway. Optional; inferred from node_id if not supplied."
                    },
                    "battery_level": {
                        "type": "integer",
                        "maximum": 2147483647,
                        "minimum": -2147483648,
                        "nullable": true,
                        "description": "Most recently reported battery level. Optional; null since most gateways are mains/PoE powered."
                    },
                    "last_reported_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "Timestamp of the last report from the gateway, in RFC 3339 format. Optional; null if never reported."
                    },
                    "installer": {
                        "type": "string",
                        "nullable": true,
                        "description": "Name of the person who installed the gateway. Optional; null if not set."
                    },
                    "status": {
                        "nullable": true,
                        "description": "Runtime connectivity state of the gateway: OFFLINE, ACTIVE, READY_TO_CONNECT, or UNKNOWN.\n\n* `OFFLINE` - Offline\n* `ACTIVE` - Active\n* `READY_TO_CONNECT` - Ready to Connect\n* `UNKNOWN` - Unknown",
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/Status07cEnum"
                            },
                            {
                                "$ref": "#/components/schemas/BlankEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "install_status": {
                        "nullable": true,
                        "description": "Installation workflow state of the gateway: AWAITING_PHOTOS or COMPLETED. Automatically becomes COMPLETED when the first installation photo is uploaded.\n\n* `AWAITING_PHOTOS` - Awaiting Photos\n* `COMPLETED` - Completed\n* `UNKNOWN` - Unknown",
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/InstallStatusEnum"
                            },
                            {
                                "$ref": "#/components/schemas/BlankEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "backhaul": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/BackhaulEnum"
                            }
                        ],
                        "description": "How the gateway reaches the internet: CELLULAR, ETHERNET, or UNKNOWN.\n\n* `CELLULAR` - Cellular\n* `ETHERNET` - Ethernet\n* `UNKNOWN` - Unknown"
                    },
                    "firmware_version": {
                        "type": "string",
                        "nullable": true,
                        "description": "Firmware version running on the gateway. Optional; null if unknown."
                    },
                    "imei": {
                        "type": "string",
                        "nullable": true,
                        "description": "Cellular modem hardware identifier, relevant when backhaul is CELLULAR. Optional; null if not applicable."
                    },
                    "region": {
                        "type": "string",
                        "nullable": true,
                        "description": "Regional/geographic designation for radio compliance. Optional; null if not set."
                    },
                    "is_installed": {
                        "type": "boolean",
                        "description": "Whether the gateway has completed the installation flow. True means installed."
                    },
                    "antenna_gain": {
                        "type": "integer",
                        "maximum": 2147483647,
                        "minimum": -2147483648,
                        "nullable": true,
                        "description": "Radio antenna gain value, an RF tuning parameter. Optional; null if not set."
                    },
                    "properties": {
                        "nullable": true,
                        "description": "Free-form JSON properties for the gateway, validated against the gateway model's properties_schema. Optional; null if not set."
                    },
                    "version": {
                        "type": "integer",
                        "description": "Optimistic-locking revision counter, incremented on every update."
                    },
                    "installed_date": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "Timestamp the gateway was installed, in RFC 3339 format. Optional; null if not set."
                    },
                    "campus_description": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Human-readable name of the gateway's latest reported campus. Computed live from the latest GatewayLocation, not stored. Null if never located."
                    },
                    "building_description": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Human-readable name of the gateway's latest reported building. Computed live, not stored. Null if never located."
                    },
                    "floor_description": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Human-readable name of the gateway's latest reported floor. Computed live, not stored. Null if never located."
                    },
                    "room_description": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Human-readable name of the gateway's latest reported room. Computed live, not stored. Null if never located."
                    },
                    "zone_description": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Human-readable name of the gateway's latest reported zone. Computed live, not stored. Null if never located."
                    },
                    "installation_photos": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/GatewayInstallationPhoto"
                        },
                        "readOnly": true,
                        "description": "Installation photos recorded for this gateway."
                    },
                    "installation_notes": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/GatewayInstallationNote"
                        },
                        "readOnly": true,
                        "description": "Installation notes recorded for this gateway."
                    },
                    "installation_notes_delta": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/InstallationNotesDelta"
                            }
                        ],
                        "writeOnly": true,
                        "description": "Add/delete delta for installation notes, applied atomically on update. Optional."
                    },
                    "installation_photos_delta": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/InstallationPhotosDelta"
                            }
                        ],
                        "writeOnly": true,
                        "description": "Delete delta for installation photos, applied atomically on update. Optional."
                    },
                    "last_synced_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "Timestamp of the last external sync attempt, in RFC 3339 format. Optional; null if never synced."
                    },
                    "last_sync_status": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/LastSyncStatusEnum"
                            }
                        ],
                        "description": "Outcome of the last external sync attempt: SUCCESS, FAILURE, or NOT_SYNCED.\n\n* `SUCCESS` - Success\n* `FAILURE` - Failure\n* `NOT_SYNCED` - Not Synced"
                    }
                },
                "required": [
                    "building_description",
                    "campus_description",
                    "description",
                    "floor_description",
                    "gateway_model",
                    "gateway_model_name",
                    "id",
                    "installation_notes",
                    "installation_photos",
                    "node_id",
                    "room_description",
                    "zone_description"
                ]
            },
            "GatewayInstallationNote": {
                "type": "object",
                "description": "An installation note recorded for a gateway, nested under Gateway responses.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the installation note."
                    },
                    "gateway": {
                        "type": "integer",
                        "description": "ID of the gateway this note applies to. Required."
                    },
                    "installation_note": {
                        "type": "string",
                        "nullable": true,
                        "description": "Text of the installation note. Optional; null if not set."
                    },
                    "timestamp": {
                        "type": "string",
                        "format": "date-time",
                        "readOnly": true,
                        "description": "Timestamp the note applies to, in RFC 3339 format."
                    },
                    "user": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Username of the person who recorded the note. Null if not set."
                    },
                    "version": {
                        "type": "integer",
                        "description": "Optimistic-locking revision counter, incremented on every update."
                    }
                },
                "required": [
                    "gateway",
                    "id",
                    "timestamp",
                    "user"
                ]
            },
            "GatewayInstallationPhoto": {
                "type": "object",
                "description": "An installation photo recorded for a gateway, nested under Gateway responses.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the installation photo."
                    },
                    "gateway": {
                        "type": "integer",
                        "description": "ID of the gateway this photo was taken for."
                    },
                    "photo_path": {
                        "type": "string",
                        "nullable": true,
                        "readOnly": true,
                        "description": "Storage path of the installation photo. Computed live from the photo file, not stored. Null if no photo file."
                    },
                    "timestamp": {
                        "type": "string",
                        "format": "date-time",
                        "readOnly": true,
                        "description": "Timestamp the photo applies to, in RFC 3339 format."
                    },
                    "user": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Username of the person who uploaded the photo. Null if not set."
                    },
                    "original_filename": {
                        "type": "string",
                        "readOnly": true,
                        "nullable": true,
                        "description": "Original filename of the uploaded photo. Null if not set."
                    },
                    "version": {
                        "type": "integer",
                        "description": "Optimistic-locking revision counter, incremented on every update."
                    }
                },
                "required": [
                    "gateway",
                    "id",
                    "original_filename",
                    "photo_path",
                    "timestamp",
                    "user"
                ]
            },
            "GisFeatureCollectionEnum": {
                "type": "string",
                "enum": [
                    "FeatureCollection"
                ]
            },
            "GisFeatureEnum": {
                "type": "string",
                "enum": [
                    "Feature"
                ]
            },
            "InstallStatusEnum": {
                "enum": [
                    "AWAITING_PHOTOS",
                    "COMPLETED",
                    "UNKNOWN"
                ],
                "type": "string",
                "description": "* `AWAITING_PHOTOS` - Awaiting Photos\n* `COMPLETED` - Completed\n* `UNKNOWN` - Unknown"
            },
            "InstallationNotesDelta": {
                "type": "object",
                "description": "A write-only add/delete delta for a gateway's installation notes, applied on update.",
                "properties": {
                    "add": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "New installation note text strings to add. Optional."
                    },
                    "delete_ids": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "description": "IDs of existing installation notes to delete. Optional."
                    }
                }
            },
            "InstallationPhotosDelta": {
                "type": "object",
                "description": "A write-only delete delta for a gateway's installation photos, applied on update.",
                "properties": {
                    "delete_ids": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "description": "IDs of existing installation photos to delete. Optional."
                    }
                }
            },
            "LastSyncStatusEnum": {
                "enum": [
                    "SUCCESS",
                    "FAILURE",
                    "NOT_SYNCED"
                ],
                "type": "string",
                "description": "* `SUCCESS` - Success\n* `FAILURE` - Failure\n* `NOT_SYNCED` - Not Synced"
            },
            "LocationDescriptionOnly": {
                "type": "object",
                "description": "A campus/building/floor/room/zone location hierarchy, with names only (no IDs).",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the location record."
                    },
                    "campus": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/CampusDescription"
                            }
                        ],
                        "description": "Name of the campus in this location hierarchy."
                    },
                    "building": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/BuildingDescription"
                            }
                        ],
                        "description": "Name and timezone of the building in this location hierarchy."
                    },
                    "floor": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/FloorDescription"
                            }
                        ],
                        "description": "Name of the floor in this location hierarchy."
                    },
                    "room": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/RoomDescription"
                            }
                        ],
                        "description": "Name of the room in this location hierarchy."
                    },
                    "zone": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/ZoneDescription"
                            }
                        ],
                        "description": "Name of the zone in this location hierarchy."
                    }
                },
                "required": [
                    "building",
                    "campus",
                    "floor",
                    "id",
                    "room",
                    "zone"
                ]
            },
            "LocationView": {
                "type": "object",
                "description": "The full campus/building/floor/room/zone location hierarchy for a device or gateway.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the location record."
                    },
                    "campus": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/CampusLocationView"
                            }
                        ],
                        "description": "Summary of the campus in this location hierarchy."
                    },
                    "building": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/BuildingLocationView"
                            }
                        ],
                        "description": "Summary of the building in this location hierarchy."
                    },
                    "floor": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/FloorLocationView"
                            }
                        ],
                        "description": "Summary of the floor in this location hierarchy."
                    },
                    "room": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/RoomLocationView"
                            }
                        ],
                        "description": "Summary of the room in this location hierarchy."
                    },
                    "zone": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/ZoneLocationView"
                            }
                        ],
                        "description": "Summary of the zone in this location hierarchy."
                    }
                },
                "required": [
                    "building",
                    "campus",
                    "floor",
                    "id",
                    "room",
                    "zone"
                ]
            },
            "NullEnum": {
                "enum": [
                    null
                ]
            },
            "PaginatedAssetLedRequestHistoryList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/AssetLedRequestHistory"
                        }
                    }
                }
            },
            "PaginatedAssetOwnerList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/AssetOwner"
                        }
                    }
                }
            },
            "PaginatedAssetSearchList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/AssetSearch"
                        }
                    }
                }
            },
            "PaginatedAssetTypeList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/AssetType"
                        }
                    }
                }
            },
            "PaginatedAssetUtilizationLiteList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/AssetUtilizationLite"
                        }
                    }
                }
            },
            "PaginatedAssetViewList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/AssetView"
                        }
                    }
                }
            },
            "PaginatedBuildingGeoJsonList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "$ref": "#/components/schemas/BuildingGeoJsonList"
                    }
                }
            },
            "PaginatedBuildingRollUpGeoJsonList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "$ref": "#/components/schemas/BuildingRollUpGeoJsonList"
                    }
                }
            },
            "PaginatedCampusGeoJsonList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "$ref": "#/components/schemas/CampusGeoJsonList"
                    }
                }
            },
            "PaginatedCampusRollUpGeoJsonList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "$ref": "#/components/schemas/CampusRollUpGeoJsonList"
                    }
                }
            },
            "PaginatedDeviceList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Device"
                        }
                    }
                }
            },
            "PaginatedDeviceModelList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/DeviceModel"
                        }
                    }
                }
            },
            "PaginatedDeviceModelSensorModelList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/DeviceModelSensorModel"
                        }
                    }
                }
            },
            "PaginatedEndpointList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Endpoint"
                        }
                    }
                }
            },
            "PaginatedFloorGeoJsonList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "$ref": "#/components/schemas/FloorGeoJsonList"
                    }
                }
            },
            "PaginatedFloorRollUpGeoJsonList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "$ref": "#/components/schemas/FloorRollUpGeoJsonList"
                    }
                }
            },
            "PaginatedGatewayList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Gateway"
                        }
                    }
                }
            },
            "PaginatedRelatedAssetList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/RelatedAsset"
                        }
                    }
                }
            },
            "PaginatedRoomGeoJsonList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "$ref": "#/components/schemas/RoomGeoJsonList"
                    }
                }
            },
            "PaginatedRoomPeopleCountList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/RoomPeopleCount"
                        }
                    }
                }
            },
            "PaginatedRoomRollUpGeoJsonList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "$ref": "#/components/schemas/RoomRollUpGeoJsonList"
                    }
                }
            },
            "PaginatedSensorDataLiteResponseList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/SensorDataLiteResponse"
                        }
                    }
                }
            },
            "PaginatedSensorModelList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/SensorModel"
                        }
                    }
                }
            },
            "PaginatedSensorTypeList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/SensorType"
                        }
                    }
                }
            },
            "PaginatedZoneGeoJsonList": {
                "type": "object",
                "required": [
                    "count",
                    "results"
                ],
                "properties": {
                    "count": {
                        "type": "integer",
                        "example": 123
                    },
                    "next": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=4"
                    },
                    "previous": {
                        "type": "string",
                        "nullable": true,
                        "format": "uri",
                        "example": "http://api.example.org/accounts/?page_num=2"
                    },
                    "results": {
                        "$ref": "#/components/schemas/ZoneGeoJsonList"
                    }
                }
            },
            "RelatedAsset": {
                "type": "object",
                "description": "A relationship between two assets.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the relationship row."
                    },
                    "from_asset": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/SimpleAsset"
                            }
                        ],
                        "readOnly": true,
                        "description": "The source asset in the relationship."
                    },
                    "to_asset": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/SimpleAsset"
                            }
                        ],
                        "readOnly": true,
                        "description": "The target asset in the relationship."
                    },
                    "from_asset_id": {
                        "type": "integer",
                        "writeOnly": true,
                        "description": "ID of the source asset. Required."
                    },
                    "to_asset_id": {
                        "type": "integer",
                        "writeOnly": true,
                        "description": "ID of the target asset. Required."
                    }
                },
                "required": [
                    "from_asset",
                    "from_asset_id",
                    "id",
                    "to_asset",
                    "to_asset_id"
                ]
            },
            "RelatedAssetSimple": {
                "type": "object",
                "description": "A simplified asset-to-asset relationship, nested under Asset responses as `related_assets`.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the relationship row."
                    },
                    "to_asset": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/SimpleAsset"
                            }
                        ],
                        "readOnly": true,
                        "description": "The related asset."
                    }
                },
                "required": [
                    "id",
                    "to_asset"
                ]
            },
            "RoomDescription": {
                "type": "object",
                "description": "The room name only, nested under a location hierarchy summary.",
                "properties": {
                    "room_description": {
                        "type": "string",
                        "description": "Human-readable name of the room."
                    }
                },
                "required": [
                    "room_description"
                ]
            },
            "RoomGeoJson": {
                "type": "object",
                "description": "A room location, represented as a GeoJSON Feature with a polygon geometry.",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureEnum"
                    },
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the room."
                    },
                    "geometry": {
                        "type": "object",
                        "properties": {
                            "type": {
                                "type": "string",
                                "enum": [
                                    "Polygon"
                                ]
                            },
                            "coordinates": {
                                "type": "array",
                                "items": {
                                    "type": "array",
                                    "items": {
                                        "type": "array",
                                        "items": {
                                            "type": "number",
                                            "format": "float"
                                        },
                                        "example": [
                                            12.9721,
                                            77.5933
                                        ],
                                        "minItems": 2,
                                        "maxItems": 3
                                    },
                                    "example": [
                                        [
                                            22.4707,
                                            70.0577
                                        ],
                                        [
                                            12.9721,
                                            77.5933
                                        ]
                                    ],
                                    "minItems": 4
                                },
                                "example": [
                                    [
                                        [
                                            0.0,
                                            0.0
                                        ],
                                        [
                                            0.0,
                                            50.0
                                        ],
                                        [
                                            50.0,
                                            50.0
                                        ],
                                        [
                                            50.0,
                                            0.0
                                        ],
                                        [
                                            0.0,
                                            0.0
                                        ]
                                    ]
                                ]
                            }
                        }
                    },
                    "properties": {
                        "type": "object",
                        "properties": {
                            "room_id": {
                                "type": "string",
                                "description": "Unique text code for the room. Required."
                            },
                            "room_description": {
                                "type": "string",
                                "description": "Human-readable name of the room. Required."
                            },
                            "version": {
                                "type": "integer",
                                "description": "Optimistic-locking revision counter, incremented on every update."
                            },
                            "created": {
                                "type": "string",
                                "format": "date-time",
                                "readOnly": true,
                                "description": "Timestamp the room record was created, in RFC 3339 format."
                            },
                            "floor_id": {
                                "type": "integer",
                                "writeOnly": true,
                                "description": "ID of the floor this room belongs to. Required on write."
                            },
                            "floor": {
                                "allOf": [
                                    {
                                        "$ref": "#/components/schemas/FloorLocationView"
                                    }
                                ],
                                "readOnly": true,
                                "description": "Summary of the floor this room belongs to."
                            },
                            "people_count": {
                                "type": "integer",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Most recently reported total people count for the room. Null if never reported."
                            },
                            "is_occupied": {
                                "type": "boolean",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Whether the room currently has detected occupancy."
                            },
                            "is_people_count_enabled": {
                                "type": "boolean",
                                "readOnly": true,
                                "description": "Whether people-counting sensors are configured for this room."
                            },
                            "people_count_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "readOnly": true,
                                "nullable": true,
                                "description": "Timestamp of the last people-count reading, in RFC 3339 format. Null if never reported."
                            }
                        }
                    }
                }
            },
            "RoomGeoJsonList": {
                "type": "object",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureCollectionEnum"
                    },
                    "features": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/RoomGeoJson"
                        }
                    }
                }
            },
            "RoomLocationView": {
                "type": "object",
                "description": "A summary of a room, nested under Location responses.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the room."
                    },
                    "room_id": {
                        "type": "string",
                        "description": "Unique text code for the room."
                    },
                    "room_description": {
                        "type": "string",
                        "description": "Human-readable name of the room."
                    }
                },
                "required": [
                    "id",
                    "room_description",
                    "room_id"
                ]
            },
            "RoomOccupancyHistory": {
                "type": "object",
                "description": "A single occupancy history data point for a room.",
                "properties": {
                    "timestamp": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Timestamp of the snapshot, in RFC 3339 format."
                    },
                    "room_occupancy_history": {
                        "type": "boolean",
                        "description": "Whether the room was occupied at this timestamp. True means occupied."
                    }
                },
                "required": [
                    "room_occupancy_history",
                    "timestamp"
                ]
            },
            "RoomPeopleCount": {
                "type": "object",
                "description": "A periodic snapshot of people traffic in a room, derived from sensor readings.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the people-count record."
                    },
                    "room_id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Numeric foreign key of the room this record applies to (not the room's human-readable room_id text code)."
                    },
                    "timestamp": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Timestamp the record was recorded, in RFC 3339 format."
                    },
                    "total": {
                        "type": "integer",
                        "maximum": 2147483647,
                        "minimum": -2147483648,
                        "description": "Running total people count as of this record."
                    },
                    "total_counter_in": {
                        "type": "integer",
                        "maximum": 2147483647,
                        "minimum": -2147483648,
                        "description": "Running total count of people who entered the room as of this record."
                    },
                    "total_counter_out": {
                        "type": "integer",
                        "maximum": 2147483647,
                        "minimum": -2147483648,
                        "description": "Running total count of people who exited the room as of this record."
                    },
                    "periodic_total": {
                        "type": "integer",
                        "maximum": 2147483647,
                        "minimum": -2147483648,
                        "description": "Net people count for just this period."
                    },
                    "periodic_counter_in": {
                        "type": "integer",
                        "maximum": 2147483647,
                        "minimum": -2147483648,
                        "description": "Count of people who entered the room during this period."
                    },
                    "periodic_counter_out": {
                        "type": "integer",
                        "maximum": 2147483647,
                        "minimum": -2147483648,
                        "description": "Count of people who exited the room during this period."
                    },
                    "room_count_history": {
                        "type": "integer",
                        "maximum": 2147483647,
                        "minimum": -2147483648,
                        "description": "Snapshot people-count value recorded for the room at this timestamp."
                    }
                },
                "required": [
                    "id",
                    "periodic_counter_in",
                    "periodic_counter_out",
                    "periodic_total",
                    "room_id",
                    "timestamp",
                    "total",
                    "total_counter_in",
                    "total_counter_out"
                ]
            },
            "RoomPeopleCountHistory": {
                "type": "object",
                "description": "A single people-count history data point for a room.",
                "properties": {
                    "timestamp": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Timestamp of the snapshot, in RFC 3339 format."
                    },
                    "room_count_history": {
                        "type": "integer",
                        "description": "People-count value recorded for the room at this timestamp."
                    }
                },
                "required": [
                    "room_count_history",
                    "timestamp"
                ]
            },
            "RoomPeopleCountStat": {
                "type": "object",
                "description": "A daily or monthly aggregated people-count statistic for a room.",
                "properties": {
                    "date": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Start of the day or month this statistic covers, in RFC 3339 format."
                    },
                    "total": {
                        "type": "integer",
                        "description": "Sum of periodic_counter_in values for the room over this period."
                    }
                },
                "required": [
                    "date",
                    "total"
                ]
            },
            "RoomRollUpGeoJson": {
                "type": "object",
                "description": "A denormalized, precomputed rollup of metrics for a room, represented as a GeoJSON Feature.",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureEnum"
                    },
                    "id": {
                        "type": "integer",
                        "maximum": 2147483647,
                        "minimum": -2147483648,
                        "description": "Unique identifier of the room."
                    },
                    "geometry": {
                        "type": "object",
                        "properties": {
                            "type": {
                                "type": "string",
                                "enum": [
                                    "Polygon"
                                ]
                            },
                            "coordinates": {
                                "type": "array",
                                "items": {
                                    "type": "array",
                                    "items": {
                                        "type": "array",
                                        "items": {
                                            "type": "number",
                                            "format": "float"
                                        },
                                        "example": [
                                            12.9721,
                                            77.5933
                                        ],
                                        "minItems": 2,
                                        "maxItems": 3
                                    },
                                    "example": [
                                        [
                                            22.4707,
                                            70.0577
                                        ],
                                        [
                                            12.9721,
                                            77.5933
                                        ]
                                    ],
                                    "minItems": 4
                                },
                                "example": [
                                    [
                                        [
                                            0.0,
                                            0.0
                                        ],
                                        [
                                            0.0,
                                            50.0
                                        ],
                                        [
                                            50.0,
                                            50.0
                                        ],
                                        [
                                            50.0,
                                            0.0
                                        ],
                                        [
                                            0.0,
                                            0.0
                                        ]
                                    ]
                                ]
                            }
                        }
                    },
                    "properties": {
                        "type": "object",
                        "properties": {
                            "room_id": {
                                "type": "string",
                                "nullable": true,
                                "description": "Unique text code for the room."
                            },
                            "room_description": {
                                "type": "string",
                                "nullable": true,
                                "description": "Human-readable name of the room."
                            },
                            "floor_id": {
                                "type": "string",
                                "nullable": true,
                                "description": "Unique text code of the parent floor. Null if unknown."
                            },
                            "floor_db_id": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Unique identifier of the parent floor. Null if unknown."
                            },
                            "floor_description": {
                                "type": "string",
                                "nullable": true,
                                "description": "Human-readable name of the parent floor. Null if unknown."
                            },
                            "campus_db_id": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Unique identifier of the parent campus. Null if unknown."
                            },
                            "sensor_count": {
                                "type": "integer",
                                "maximum": 9223372036854775807,
                                "minimum": -9223372036854775808,
                                "format": "int64",
                                "nullable": true,
                                "description": "Number of sensors reporting in this location. Null if unknown."
                            },
                            "active_alert_count": {
                                "type": "integer",
                                "maximum": 9223372036854775807,
                                "minimum": -9223372036854775808,
                                "format": "int64",
                                "nullable": true,
                                "description": "Number of currently active alerts in this location. Null if unknown."
                            },
                            "people_count": {
                                "type": "integer",
                                "maximum": 9223372036854775807,
                                "minimum": -9223372036854775808,
                                "format": "int64",
                                "nullable": true,
                                "description": "Most recently reported total people count for this location. Null if never reported."
                            },
                            "is_people_count_enabled": {
                                "type": "boolean",
                                "description": "Whether people-counting sensors are configured for this location."
                            },
                            "sq_feet": {
                                "type": "number",
                                "format": "double",
                                "nullable": true,
                                "description": "Floor area of the room in square feet. Null if not set."
                            },
                            "sq_meters": {
                                "type": "number",
                                "format": "double",
                                "nullable": true,
                                "description": "Floor area of the room in square meters. Null if not set."
                            },
                            "people_count_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "Timestamp of the last people-count reading, in RFC 3339 format. Null if never reported."
                            },
                            "is_occupied": {
                                "type": "boolean",
                                "nullable": true,
                                "description": "Whether this location currently has detected occupancy."
                            },
                            "occupancy_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "Timestamp of the last occupancy reading, in RFC 3339 format. Null if never reported."
                            },
                            "asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Total number of assets in this location. Null if unknown."
                            },
                            "in_use_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status IN_USE in this location. Null if unknown."
                            },
                            "unpaired_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status UNPAIRED in this location. Null if unknown."
                            },
                            "active_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status ACTIVE in this location. Null if unknown."
                            },
                            "not_in_use_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status NOT_IN_USE in this location. Null if unknown."
                            },
                            "missing_asset_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets with status MISSING in this location. Null if unknown."
                            },
                            "missing_asset_count_last_24_hours": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of assets that became MISSING in the last 24 hours in this location. Null if unknown."
                            },
                            "device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Total number of devices in this location. Null if unknown."
                            },
                            "offline_device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of devices with status OFFLINE in this location. Null if unknown."
                            },
                            "active_device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of devices with status ACTIVE in this location. Null if unknown."
                            },
                            "ready_to_connect_device_count": {
                                "type": "integer",
                                "maximum": 2147483647,
                                "minimum": -2147483648,
                                "nullable": true,
                                "description": "Number of devices with status READY_TO_CONNECT in this location. Null if unknown."
                            },
                            "device_last_reported_at": {
                                "type": "string",
                                "format": "date-time",
                                "nullable": true,
                                "description": "Timestamp of the most recent report from any device in this location, in RFC 3339 format. Null if no device has ever reported."
                            }
                        }
                    }
                }
            },
            "RoomRollUpGeoJsonList": {
                "type": "object",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureCollectionEnum"
                    },
                    "features": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/RoomRollUpGeoJson"
                        }
                    }
                }
            },
            "SapActivateLedResponse": {
                "type": "object",
                "description": "The cooldown window for an asset LED activation request.",
                "properties": {
                    "timeout": {
                        "type": "integer",
                        "description": "Seconds until the LED activation can be retriggered."
                    }
                },
                "required": [
                    "timeout"
                ]
            },
            "SapAssetLocationSearchResponse": {
                "type": "object",
                "description": "An asset's current location, for integration workflows.",
                "properties": {
                    "customer_reference": {
                        "type": "string",
                        "description": "Unique, customer/SAP-supplied identifier for the asset."
                    },
                    "room_id": {
                        "type": "string",
                        "nullable": true,
                        "description": "Unique text code of the asset's current room. Null if the asset has no current location."
                    },
                    "campus_id": {
                        "type": "string",
                        "nullable": true,
                        "description": "Unique text code of the asset's current campus. Null if the asset has no current location."
                    },
                    "building_id": {
                        "type": "string",
                        "nullable": true,
                        "description": "Unique text code of the asset's current building. Null if the asset has no current location."
                    },
                    "zone_id": {
                        "type": "string",
                        "nullable": true,
                        "description": "Unique text code of the asset's current zone. Null if the asset has no current location."
                    },
                    "status": {
                        "type": "string",
                        "description": "Current status of the asset."
                    },
                    "confidence": {
                        "type": "number",
                        "format": "double",
                        "nullable": true,
                        "description": "Precision of the asset's current location. Null if the asset has no current location."
                    },
                    "tag_identifier": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "Dash-formatted device IDs of every device currently paired to the asset."
                    },
                    "location_updated_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "Timestamp the current location was recorded, in RFC 3339 format. Null if the asset has no current location."
                    }
                },
                "required": [
                    "building_id",
                    "campus_id",
                    "confidence",
                    "customer_reference",
                    "location_updated_at",
                    "room_id",
                    "status",
                    "tag_identifier",
                    "zone_id"
                ]
            },
            "SapErrorResponse": {
                "type": "object",
                "description": "An error message describing why the request failed.",
                "properties": {
                    "error": {
                        "type": "string",
                        "description": "Human-readable description of the error."
                    }
                },
                "required": [
                    "error"
                ]
            },
            "SapSyncAssetLocationRequest": {
                "type": "object",
                "description": "Criteria selecting which assets to re-sync; both fields are optional.",
                "properties": {
                    "customer_references": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "Specific asset customer_references to sync. Optional; takes priority over from_date if both are given."
                    },
                    "from_date": {
                        "type": "string",
                        "description": "Syncs assets updated on or after this date. Optional, and ignored if customer_references is given."
                    }
                }
            },
            "SapUpsertOwnerRef": {
                "type": "object",
                "description": "The resolved asset owner, if asset_owner was supplied in the request.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "Unique identifier of the asset owner."
                    },
                    "name": {
                        "type": "string",
                        "description": "Name of the asset owner."
                    }
                },
                "required": [
                    "id",
                    "name"
                ]
            },
            "SapUpsertRequest": {
                "type": "object",
                "description": "An asset payload to create or update, keyed by customer_reference.",
                "properties": {
                    "customer_reference": {
                        "type": "string",
                        "description": "Unique external identifier used to find/create the asset. Required."
                    },
                    "description": {
                        "type": "string",
                        "description": "Description of the asset. Required."
                    },
                    "manufacturer": {
                        "type": "string",
                        "description": "Manufacturer name. Optional."
                    },
                    "model_number": {
                        "type": "string",
                        "description": "Manufacturer model number. Optional."
                    },
                    "serial_number": {
                        "type": "string",
                        "description": "Manufacturer serial number. Optional."
                    },
                    "customer_properties": {
                        "description": "Arbitrary customer-defined JSON object. Optional; a JSON-encoded string is also accepted and parsed."
                    },
                    "asset_type": {
                        "type": "string",
                        "description": "Asset type name, not ID. Optional; auto-created if not found."
                    },
                    "asset_owner": {
                        "type": "string",
                        "description": "Asset owner name, not ID. Optional; auto-created if not found."
                    }
                },
                "required": [
                    "customer_reference",
                    "description"
                ]
            },
            "SapUpsertResponse": {
                "type": "object",
                "description": "The result of creating or updating an asset via the integration upsert endpoint.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "Unique identifier of the created or updated asset."
                    },
                    "asset_type": {
                        "$ref": "#/components/schemas/SapUpsertTypeRef"
                    },
                    "asset_owner": {
                        "$ref": "#/components/schemas/SapUpsertOwnerRef"
                    }
                },
                "required": [
                    "id"
                ]
            },
            "SapUpsertTypeRef": {
                "type": "object",
                "description": "The resolved asset type, if asset_type was supplied in the request.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "Unique identifier of the asset type."
                    },
                    "name": {
                        "type": "string",
                        "description": "Name of the asset type."
                    }
                },
                "required": [
                    "id",
                    "name"
                ]
            },
            "Sensor": {
                "type": "object",
                "description": "A sensor attached to a device, nested under Device responses.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the sensor."
                    },
                    "device_id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "ID of the device this sensor is attached to."
                    },
                    "sensor_model": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/SensorModel"
                            }
                        ],
                        "description": "The sensor model this sensor is an instance of."
                    },
                    "properties": {
                        "nullable": true,
                        "description": "Free-form JSON properties for the sensor, validated against the sensor model's properties_schema. Optional; null if not set."
                    }
                },
                "required": [
                    "device_id",
                    "id",
                    "sensor_model"
                ]
            },
            "SensorDataLiteResponse": {
                "type": "object",
                "description": "A single denormalized sensor reading, joined with device/asset/location context.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "Unique identifier of the sensor reading."
                    },
                    "sensor_type_name": {
                        "type": "string",
                        "description": "Name of the sensor type that produced this reading."
                    },
                    "data_key": {
                        "type": "string",
                        "description": "JSON key this reading's value lives under within data."
                    },
                    "device_id": {
                        "type": "string",
                        "description": "Hardware identifier of the reporting device."
                    },
                    "description": {
                        "type": "string",
                        "nullable": true,
                        "description": "Human-readable description of the device. Null if not set."
                    },
                    "is_alert_state": {
                        "type": "boolean",
                        "description": "Whether this reading is in an alert state. True means alerting."
                    },
                    "timestamp": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Timestamp the reading was recorded, in RFC 3339 format."
                    },
                    "local_timezone": {
                        "type": "string",
                        "nullable": true,
                        "description": "IANA timezone name of the reading location. Null if not set."
                    },
                    "battery_level": {
                        "type": "integer",
                        "nullable": true,
                        "description": "Battery level of the reporting device at the time of the reading. Null if not reported."
                    },
                    "status": {
                        "type": "string",
                        "description": "Status of the reporting device at the time of the reading."
                    },
                    "customer_reference": {
                        "type": "string",
                        "nullable": true,
                        "description": "Unique, customer/SAP-supplied identifier for the associated asset. Null if not paired to an asset."
                    },
                    "asset_description": {
                        "type": "string",
                        "nullable": true,
                        "description": "Human-readable description of the associated asset. Null if not paired to an asset."
                    },
                    "campus_description": {
                        "type": "string",
                        "nullable": true,
                        "description": "Human-readable name of the campus. Null if unknown."
                    },
                    "campus_id": {
                        "type": "string",
                        "nullable": true,
                        "description": "Unique text code of the campus. Null if unknown."
                    },
                    "building_description": {
                        "type": "string",
                        "nullable": true,
                        "description": "Human-readable name of the building. Null if unknown."
                    },
                    "floor_description": {
                        "type": "string",
                        "nullable": true,
                        "description": "Human-readable name of the floor. Null if unknown."
                    },
                    "room_description": {
                        "type": "string",
                        "nullable": true,
                        "description": "Human-readable name of the room. Null if unknown."
                    },
                    "zone_description": {
                        "type": "string",
                        "nullable": true,
                        "description": "Human-readable name of the zone. Null if unknown."
                    },
                    "data": {
                        "description": "Reading value(s), keyed by data_key. Flattened to a single scalar when rendered as CSV."
                    },
                    "is_late_message": {
                        "type": "boolean",
                        "description": "Whether this reading arrived later than expected. True means late."
                    }
                },
                "required": [
                    "asset_description",
                    "battery_level",
                    "building_description",
                    "campus_description",
                    "campus_id",
                    "customer_reference",
                    "data",
                    "data_key",
                    "description",
                    "device_id",
                    "floor_description",
                    "id",
                    "is_alert_state",
                    "is_late_message",
                    "local_timezone",
                    "room_description",
                    "sensor_type_name",
                    "status",
                    "timestamp",
                    "zone_description"
                ]
            },
            "SensorModel": {
                "type": "object",
                "description": "A specific, configurable sensor implementation tied to a sensor type.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the sensor model."
                    },
                    "name": {
                        "type": "string",
                        "description": "Unique name of the sensor model. Required."
                    },
                    "data_key": {
                        "type": "string",
                        "description": "JSON key this sensor model's readings live under in raw sensor data payloads. Required."
                    },
                    "metadata": {
                        "nullable": true,
                        "description": "Arbitrary JSON metadata for the sensor model. Optional; null if not set."
                    },
                    "sensor_type": {
                        "type": "string",
                        "description": "Name of the sensor type this sensor model measures. Required."
                    },
                    "is_displayed": {
                        "type": "boolean",
                        "description": "Whether this sensor model appears in the UI. True means it is shown."
                    },
                    "is_utilization_enabled": {
                        "type": "boolean",
                        "description": "Whether this sensor model can drive an asset's in-use/utilization state."
                    },
                    "unit_of_measurement": {
                        "type": "string",
                        "readOnly": true,
                        "description": "Unit the sensor model reports readings in, taken from the parent sensor type. Computed live, not stored."
                    },
                    "is_continuous_alert_enabled": {
                        "type": "boolean",
                        "description": "Whether this sensor model supports continuous (not just threshold-crossing) alerting."
                    },
                    "allowable_values": {
                        "nullable": true,
                        "description": "JSON enumeration of valid values for this sensor model (e.g. OPEN/CLOSED for a door sensor). Optional; null if unrestricted."
                    },
                    "data_type": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/DataTypeEnum"
                            }
                        ],
                        "description": "Data type of readings for this sensor model: BOOLEAN, NUMERIC, COORDINATES, STRING, or UNKNOWN.\n\n* `BOOLEAN` - Boolean\n* `NUMERIC` - Numeric\n* `COORDINATES` - Coordinates\n* `STRING` - String\n* `UNKNOWN` - Unknown"
                    },
                    "properties_schema": {
                        "nullable": true,
                        "description": "JSON schema for validating the properties of this sensor model. Optional; null if unrestricted."
                    }
                },
                "required": [
                    "data_key",
                    "id",
                    "name",
                    "sensor_type",
                    "unit_of_measurement"
                ]
            },
            "SensorModelWithDefault": {
                "type": "object",
                "description": "A sensor model supported by a device model, annotated with whether it is pre-selected by default.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the sensor model."
                    },
                    "name": {
                        "type": "string",
                        "description": "Unique name of the sensor model. Required."
                    },
                    "data_key": {
                        "type": "string",
                        "description": "JSON key this sensor model's readings live under in raw sensor data payloads. Required."
                    },
                    "metadata": {
                        "nullable": true,
                        "description": "Arbitrary JSON metadata for the sensor model. Optional; null if not set."
                    },
                    "sensor_type": {
                        "type": "string",
                        "description": "Name of the sensor type this sensor model measures. Required."
                    },
                    "is_displayed": {
                        "type": "boolean",
                        "description": "Whether this sensor model appears in the UI. True means it is shown."
                    },
                    "is_utilization_enabled": {
                        "type": "boolean",
                        "description": "Whether this sensor model can drive an asset's in-use/utilization state."
                    },
                    "unit_of_measurement": {
                        "type": "string",
                        "readOnly": true,
                        "description": "Unit the sensor model reports readings in, taken from the parent sensor type. Computed live, not stored."
                    },
                    "is_continuous_alert_enabled": {
                        "type": "boolean",
                        "description": "Whether this sensor model supports continuous (not just threshold-crossing) alerting."
                    },
                    "allowable_values": {
                        "nullable": true,
                        "description": "JSON enumeration of valid values for this sensor model (e.g. OPEN/CLOSED for a door sensor). Optional; null if unrestricted."
                    },
                    "data_type": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/DataTypeEnum"
                            }
                        ],
                        "description": "Data type of readings for this sensor model: BOOLEAN, NUMERIC, COORDINATES, STRING, or UNKNOWN.\n\n* `BOOLEAN` - Boolean\n* `NUMERIC` - Numeric\n* `COORDINATES` - Coordinates\n* `STRING` - String\n* `UNKNOWN` - Unknown"
                    },
                    "properties_schema": {
                        "nullable": true,
                        "description": "JSON schema for validating the properties of this sensor model. Optional; null if unrestricted."
                    },
                    "is_default_selection": {
                        "type": "boolean",
                        "readOnly": true,
                        "description": "Whether this sensor model is pre-selected in the UI when a device of the parent device model is provisioned. Computed live from the DeviceModelSensorModel through-table, not stored."
                    }
                },
                "required": [
                    "data_key",
                    "id",
                    "is_default_selection",
                    "name",
                    "sensor_type",
                    "unit_of_measurement"
                ]
            },
            "SensorType": {
                "type": "object",
                "description": "A category of measurement, such as temperature or humidity, that a sensor model can report.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the sensor type."
                    },
                    "name": {
                        "type": "string",
                        "description": "Unique internal key for the sensor type. Required."
                    },
                    "display_name": {
                        "type": "string",
                        "description": "Human-readable name of the sensor type. Required."
                    },
                    "unit_of_measurement": {
                        "type": "string",
                        "description": "Unit the sensor type reports readings in (e.g. \"°F\"). Optional; blank if not applicable."
                    },
                    "is_alertable": {
                        "type": "boolean",
                        "description": "Whether readings of this type support threshold-based alerting. True means alerting is supported."
                    }
                },
                "required": [
                    "display_name",
                    "id",
                    "name"
                ]
            },
            "SetupActionTypeEnum": {
                "enum": [
                    "TAG",
                    "DEVICE"
                ],
                "type": "string",
                "description": "* `TAG` - Tag\n* `DEVICE` - Device"
            },
            "SimpleAsset": {
                "type": "object",
                "description": "A simplified asset reference, nested under related-asset responses.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the asset."
                    },
                    "description": {
                        "type": "string",
                        "description": "Human-readable description of the asset."
                    },
                    "customer_reference": {
                        "type": "string",
                        "description": "Unique, customer/SAP-supplied identifier for the asset."
                    }
                },
                "required": [
                    "customer_reference",
                    "description",
                    "id"
                ]
            },
            "SimpleAssetAndAssetLocation": {
                "type": "object",
                "description": "A simplified asset reference with its current location(s), nested under LED request history responses.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the asset."
                    },
                    "description": {
                        "type": "string",
                        "description": "Human-readable description of the asset."
                    },
                    "customer_reference": {
                        "type": "string",
                        "description": "Unique, customer/SAP-supplied identifier for the asset."
                    },
                    "asset_location": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/AssetSearchAssetLocation"
                        },
                        "readOnly": true,
                        "description": "List of the asset's current (open-ended) location entries. Computed live from prefetched or queried data, not stored. Empty if the asset has no current location."
                    }
                },
                "required": [
                    "asset_location",
                    "customer_reference",
                    "description",
                    "id"
                ]
            },
            "Status07cEnum": {
                "enum": [
                    "OFFLINE",
                    "ACTIVE",
                    "READY_TO_CONNECT",
                    "UNKNOWN"
                ],
                "type": "string",
                "description": "* `OFFLINE` - Offline\n* `ACTIVE` - Active\n* `READY_TO_CONNECT` - Ready to Connect\n* `UNKNOWN` - Unknown"
            },
            "StatusB86Enum": {
                "enum": [
                    "UNPAIRED",
                    "ACTIVE",
                    "IN_USE",
                    "NOT_IN_USE",
                    "MISSING"
                ],
                "type": "string",
                "description": "* `UNPAIRED` - Unpaired\n* `ACTIVE` - Active\n* `IN_USE` - In Use\n* `NOT_IN_USE` - Not In Use\n* `MISSING` - Missing"
            },
            "UniqueAssetDescription": {
                "type": "object",
                "description": "A count of assets sharing a common description.",
                "properties": {
                    "description": {
                        "type": "string",
                        "description": "Asset description shared by description_count assets."
                    },
                    "description_count": {
                        "type": "integer",
                        "description": "Number of assets matching the current filters that have this description."
                    }
                },
                "required": [
                    "description",
                    "description_count"
                ]
            },
            "ZoneDescription": {
                "type": "object",
                "description": "The zone name only, nested under a location hierarchy summary.",
                "properties": {
                    "zone_description": {
                        "type": "string",
                        "description": "Human-readable name of the zone."
                    }
                },
                "required": [
                    "zone_description"
                ]
            },
            "ZoneGeoJson": {
                "type": "object",
                "description": "A zone location, represented as a GeoJSON Feature with a polygon geometry.",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureEnum"
                    },
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the zone."
                    },
                    "geometry": {
                        "type": "object",
                        "properties": {
                            "type": {
                                "type": "string",
                                "enum": [
                                    "Polygon"
                                ]
                            },
                            "coordinates": {
                                "type": "array",
                                "items": {
                                    "type": "array",
                                    "items": {
                                        "type": "array",
                                        "items": {
                                            "type": "number",
                                            "format": "float"
                                        },
                                        "example": [
                                            12.9721,
                                            77.5933
                                        ],
                                        "minItems": 2,
                                        "maxItems": 3
                                    },
                                    "example": [
                                        [
                                            22.4707,
                                            70.0577
                                        ],
                                        [
                                            12.9721,
                                            77.5933
                                        ]
                                    ],
                                    "minItems": 4
                                },
                                "example": [
                                    [
                                        [
                                            0.0,
                                            0.0
                                        ],
                                        [
                                            0.0,
                                            50.0
                                        ],
                                        [
                                            50.0,
                                            50.0
                                        ],
                                        [
                                            50.0,
                                            0.0
                                        ],
                                        [
                                            0.0,
                                            0.0
                                        ]
                                    ]
                                ]
                            }
                        }
                    },
                    "properties": {
                        "type": "object",
                        "properties": {
                            "zone_id": {
                                "type": "string",
                                "description": "Unique text code for the zone. Required."
                            },
                            "zone_description": {
                                "type": "string",
                                "description": "Human-readable name of the zone. Required."
                            },
                            "version": {
                                "type": "integer",
                                "description": "Optimistic-locking revision counter, incremented on every update."
                            },
                            "created": {
                                "type": "string",
                                "format": "date-time",
                                "readOnly": true,
                                "description": "Timestamp the zone record was created, in RFC 3339 format."
                            },
                            "room": {
                                "allOf": [
                                    {
                                        "$ref": "#/components/schemas/RoomLocationView"
                                    }
                                ],
                                "readOnly": true,
                                "description": "Summary of the room this zone belongs to."
                            },
                            "room_id": {
                                "type": "integer",
                                "writeOnly": true,
                                "description": "ID of the room this zone belongs to. Required on write."
                            },
                            "location_set": {
                                "type": "array",
                                "items": {
                                    "type": "integer"
                                },
                                "readOnly": true,
                                "description": "IDs of the denormalized Location row(s) tied to this zone. Each zone maintains exactly one paired Location record."
                            }
                        }
                    }
                }
            },
            "ZoneGeoJsonList": {
                "type": "object",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/GisFeatureCollectionEnum"
                    },
                    "features": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/ZoneGeoJson"
                        }
                    }
                }
            },
            "ZoneLocationView": {
                "type": "object",
                "description": "A summary of a zone, nested under Location responses.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "readOnly": true,
                        "description": "Unique identifier of the zone."
                    },
                    "zone_id": {
                        "type": "string",
                        "description": "Unique text code for the zone."
                    },
                    "zone_description": {
                        "type": "string",
                        "description": "Human-readable name of the zone."
                    }
                },
                "required": [
                    "id",
                    "zone_description",
                    "zone_id"
                ]
            }
        },
        "securitySchemes": {
            "basicAuth": {
                "type": "http",
                "scheme": "basic"
            },
            "cookieAuth": {
                "type": "apiKey",
                "in": "cookie",
                "name": "sessionid"
            },
            "jwtAuth": {
                "type": "http",
                "scheme": "bearer",
                "bearerFormat": "JWT"
            }
        }
    },
    "tags": [
        {
            "name": "Assets",
            "description": "Endpoints for managing and querying assets"
        },
        {
            "name": "Asset Led Request Histories",
            "description": "Endpoints for asset LED activation request history"
        },
        {
            "name": "Asset Owners",
            "description": "Endpoints for managing asset owners"
        },
        {
            "name": "Asset Searches",
            "description": "Endpoints for searching assets"
        },
        {
            "name": "Asset Search CSVs",
            "description": "Endpoints for exporting asset search results as CSV"
        },
        {
            "name": "Asset Types",
            "description": "Endpoints for managing asset types"
        },
        {
            "name": "Buildings",
            "description": "Endpoints for querying buildings"
        },
        {
            "name": "Building Roll Ups",
            "description": "Endpoints for building location roll up summaries"
        },
        {
            "name": "Campuses",
            "description": "Endpoints for querying campuses"
        },
        {
            "name": "Campus Roll Ups",
            "description": "Endpoints for campus location roll up summaries"
        },
        {
            "name": "Devices",
            "description": "Endpoints for querying devices"
        },
        {
            "name": "Device Models",
            "description": "Endpoints for querying device models"
        },
        {
            "name": "Device Model Sensor Models",
            "description": "Endpoints for querying device model sensor model associations"
        },
        {
            "name": "Endpoints",
            "description": "Endpoints for managing location message endpoints"
        },
        {
            "name": "Floors",
            "description": "Endpoints for querying floors"
        },
        {
            "name": "Floor Roll Ups",
            "description": "Endpoints for floor location roll up summaries"
        },
        {
            "name": "Gateways",
            "description": "Endpoints for querying gateways"
        },
        {
            "name": "Integrations",
            "description": "Endpoints for third party integrations"
        },
        {
            "name": "Related Assets",
            "description": "Endpoints for managing related asset associations"
        },
        {
            "name": "Rooms",
            "description": "Endpoints for querying rooms"
        },
        {
            "name": "Room Occupancies",
            "description": "Endpoints for room occupancy history"
        },
        {
            "name": "Room People Counts",
            "description": "Endpoints for room people count data and statistics"
        },
        {
            "name": "Room Roll Ups",
            "description": "Endpoints for room location roll up summaries"
        },
        {
            "name": "Sensor Models",
            "description": "Endpoints for querying sensor models"
        },
        {
            "name": "Sensor Types",
            "description": "Endpoints for querying sensor types"
        },
        {
            "name": "Zones",
            "description": "Endpoints for querying zones"
        }
    ],
    "x-resourceObjects": {
        "Assets": "AssetView",
        "Asset Types": "AssetType",
        "Asset Owners": "AssetOwner",
        "Asset Searches": "AssetSearch",
        "Asset Search CSVs": "AssetSearchCsvRequestResponse",
        "Asset Led Request Histories": "AssetLedRequestHistory",
        "Related Assets": "RelatedAsset",
        "Buildings": "BuildingGeoJson",
        "Building Roll Ups": "BuildingRollUpGeoJson",
        "Campuses": "CampusGeoJson",
        "Campus Roll Ups": "CampusRollUpGeoJson",
        "Floors": "FloorGeoJson",
        "Floor Roll Ups": "FloorRollUpGeoJson",
        "Rooms": "RoomGeoJson",
        "Room Roll Ups": "RoomRollUpGeoJson",
        "Room People Counts": "RoomPeopleCount",
        "Room Occupancies": "RoomOccupancyHistory",
        "Zones": "ZoneGeoJson",
        "Devices": "Device",
        "Device Models": "DeviceModel",
        "Device Model Sensor Models": "DeviceModelSensorModel",
        "Sensor Types": "SensorType",
        "Sensor Models": "SensorModel",
        "Gateways": "Gateway",
        "Endpoints": "Endpoint"
    }
}