VergeSense API

REST and webhook API for the VergeSense Cloud occupancy intelligence platform. Read buildings, floors, spaces, space types, neighborhoods, space groups, detections and threshold crossings; pull hourly and aggregate occupancy, utilization and headcount metrics at portfolio, building, floor, neighborhood, space-type, space-group and space level; inventory sensors and gateways; call the Predict API (space usage, space shortage, normalized space type distribution) built on the VergeSense Large Spatial Model; and create, patch, enable, disable, delete and inspect the delivery logs of webhooks that push space_report, space_availability and motion_detected events.

Operations 36

GET /metrics/hourly/spaces /metrics/hourly/spaces #
GET /metrics/hourly/floors /metrics/hourly/floors #
GET /metrics/hourly/buildings /metrics/hourly/buildings #
GET /metrics/hourly/neighborhoods /metrics/hourly/neighborhoods #
GET /buildings /buildings #
GET /buildings/{building_ref_id} /buildings/:building_ref_id #
GET /buildings/{building_ref_id}/history /buildings/:building_ref_id/history #
GET /spaces /spaces #
GET /spaces/detections /spaces/detections #
GET /spaces/thresholds/crossings /spaces/thresholds/crossings #
GET /spaces/types /spaces/types #
POST /webhooks /webhooks #
GET /webhooks /webhooks #
POST /webhooks/{id}/enable /webhooks/:id/enable #
POST /webhooks/{id}/disable /webhooks/:id/disable #
GET /webhooks/setup /webhooks/setup #
PATCH /webhooks/{id} /webhooks/:id #
DELETE /webhooks/{id} /webhooks/:id #
GET /webhooks/{id}/logs /webhooks/:id/logs #
GET /hardware/sensors /hardware/sensors #
GET /hardware/gateways /hardware/gateways #
GET /sensors /sensors #
GET /sensors/state /sensors/state #
GET /sensors/history /sensors/history #
GET /metrics/aggregate/buildings/{building_id} /metrics/aggregate/buildings #
POST /predict/space_usage Predict Space Usage #
POST /predict/space_shortage Predict Space Shortage #
POST /predict/normalized_space_type_distribution Predict Normalized Space Type Distribution #
GET /metrics/aggregate/floors/{floor_id} /metrics/aggregate/floors #
GET /metrics/aggregate/spaces/{space_id} /metrics/aggregate/spaces/:space_id #
GET /metrics/aggregate/neighborhoods/{neighborhood_id} /metrics/aggregate/neighborhoods #
GET /metrics/aggregate/space_groups /metrics/aggregate/space_groups #
GET /metrics/aggregate/space_types /metrics/aggregate/space_types #
GET /metrics/aggregate/portfolio /metrics/aggregate/portfolio #
GET /metrics/aggregate/spaces /metrics/aggregate/spaces #
GET /metrics/spaces /metrics/spaces #

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/vergesense-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

vergesense-api-openapi.json Raw ↑
{"openapi":"3.1.0","info":{"title":"vergesense-api","version":"2021-03-29"},"servers":[{"url":"https://api.vergesense.com"}],"components":{"securitySchemes":{"sec0":{"type":"apiKey","in":"header","name":"vs-api-key","x-default":""}}},"security":[{"sec0":[]}],"paths":{"/metrics/hourly/spaces":{"get":{"summary":"/metrics/hourly/spaces","description":"Hourly metrics for spaces","operationId":"metrics_hourly_spaces","parameters":[{"name":"sort","in":"query","description":"Comma separated list of attributes used to sort the collection. Use a negative(-) sign to reverse the order.","schema":{"type":"string","default":"-space_id,-local_date,-local_hour"}},{"name":"fields[metrics_hourly_space]","in":"query","description":"Limit attributes that are included in a request. Comma separated list of attributes.","schema":{"type":"string"}},{"name":"page[number]","in":"query","description":"Page number for pagination.","schema":{"type":"integer","format":"int32","default":1}},{"name":"page[size]","in":"query","description":"Amount of records to return per page. Limit is 1000.","schema":{"type":"integer","format":"int32","default":250}},{"name":"filter[space_type.key]","in":"query","description":"Filter metrics based on its associated space type's key.","schema":{"type":"string"}},{"name":"filter[space_type.name]","in":"query","description":"Filter metrics based on its associated space type's name.","schema":{"type":"string"}},{"name":"filter[building_ref_id]","in":"query","description":"Filter metrics based on its associated space's building_ref_id.","schema":{"type":"string"}},{"name":"filter[floor_ref_id]","in":"query","description":"Filter metrics based on its associated space's floor_ref_id.","schema":{"type":"string"}},{"name":"filter[space_ref_id]","in":"query","description":"Filter metrics based on its associated space's space_ref_id.","schema":{"type":"string"}},{"name":"filter[local_date][gte]","in":"query","description":"Filter metrics where local_date is greater than or equal to value.","schema":{"type":"string","format":"date","example":"2020-11-01"},"example":"2020-11-01"},{"name":"filter[local_date][lte]","in":"query","description":"Filter metrics where local_date is less than or equal to value.","schema":{"type":"string","format":"date"}},{"name":"filter[local_hour][gte]","in":"query","description":"Number between 0-23. Filter metrics where local_hour is greater than or equal to value.","schema":{"type":"integer","format":"int32","example":8},"example":8},{"name":"filter[local_hour][lte]","in":"query","description":"Number between 0-23. Filter metrics where local_hour is less than or equal to value.","schema":{"type":"integer","format":"int32","example":16},"example":16}],"responses":{"200":{"description":"200","content":{"application/json":{"examples":{"Result":{"value":"{\n    \"data\": [\n        {\n            \"id\": \"1\",\n            \"type\": \"metrics_hourly_space\",\n            \"attributes\": {\n                \"local_date\": \"2021-11-01\",\n                \"local_hour\": 8,\n                \"capacity\": 25,\n                \"avg_person_count\": \"0.5\",\n                \"min_person_count\": 0,\n                \"max_person_count\": 25,\n                \"minutes_actively_occupied\": \"21.6\",\n                \"minutes_passively_occupied\": null,\n                \"avg_pct_utilization\": 0.04,\n                \"min_pct_utilization\": 0.0,\n                \"max_pct_utilization\": 2.0,\n                \"pct_time_actively_occupied\": \"0.36\",\n                \"pct_time_passively_occupied\": null\n            },\n            \"relationships\": {\n                \"space\": {\n                    \"data\": {\n                        \"id\": \"1\",\n                        \"type\": \"space\"\n                    }\n                }\n            }\n        }\n    ],\n    \"included\": [\n        {\n            \"id\": \"1\",\n            \"type\": \"space\",\n            \"attributes\": {\n                \"name\": \"Conference Room 1\",\n                \"space_ref_id\": \"conference_room_1\",\n                \"building_ref_id\": \"building_1\",\n                \"floor_ref_id\": \"floor_1\",\n            },\n            \"relationships\": {\n                \"space_type\": {\n                    \"data\": {\n                        \"id\": \"3\",\n                        \"type\": \"space_type\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"3\",\n            \"type\": \"space_type\",\n            \"attributes\": {\n                \"name\": \"Conference Room\",\n                \"key\": \"conference_room\"\n            }\n        }\n    ],\n    \"links\": {\n        \"next\": \"/metrics/hourly/spaces?filter[local_date][gte]=2020-11-01&filter[local_hour][gte]=8&filter[local_hour][lte]=16&page[number]=2&page[size]=0&sort=-local_date,local_hour\",\n        \"prev\": null\n    }\n}"}}}}},"400":{"description":"400","content":{"application/json":{"examples":{"Result":{"value":"{\n    \"errors\": [\n        {\n            \"status\": \"400\",\n            \"source\": {\n                \"parameter\": \"filter[local_date]\"\n            },\n            \"title\": \"Invalid Parameter\",\n            \"detail\": \"Invalid Date\"\n        }\n    ]\n}"}},"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"object","properties":{"status":{"type":"string","example":"400"},"source":{"type":"object","properties":{"parameter":{"type":"string","example":"filter[local_date]"}}},"title":{"type":"string","example":"Invalid Parameter"},"detail":{"type":"string","example":"Invalid Date"}}}}}}}}}},"deprecated":false}},"/metrics/hourly/floors":{"get":{"summary":"/metrics/hourly/floors","description":"Hourly metrics for floors","operationId":"metrics_hourly_floors","parameters":[{"name":"sort","in":"query","description":"Comma separated list of attributes used to sort the collection. Use a negative(-) sign to reverse the order.","schema":{"type":"string","default":"-floor_id,-local_date,-local_hour"}},{"name":"fields[metrics_hourly_space]","in":"query","description":"Limit attributes that are included in a request. Comma separated list of attributes.","schema":{"type":"string"}},{"name":"page[number]","in":"query","description":"Page number for pagination.","schema":{"type":"integer","format":"int32","default":1}},{"name":"page[size]","in":"query","description":"Amount of records to return per page. Limit is 1000.","schema":{"type":"integer","format":"int32","default":250}},{"name":"filter[building_ref_id]","in":"query","description":"Filter metrics based on its associated space's building_ref_id.","schema":{"type":"string"}},{"name":"filter[floor_ref_id]","in":"query","description":"Filter metrics based on its associated space's floor_ref_id.","schema":{"type":"string"}},{"name":"filter[local_date][gte]","in":"query","description":"Filter metrics where local_date is greater than or equal to value.","schema":{"type":"string","format":"date","example":"2020-11-01"},"example":"2020-11-01"},{"name":"filter[local_date][lte]","in":"query","description":"Filter metrics where local_date is less than or equal to value.","schema":{"type":"string","format":"date"}},{"name":"filter[local_hour][gte]","in":"query","description":"Number between 0-23. Filter metrics where local_hour is greater than or equal to value.","schema":{"type":"integer","format":"int32","example":8},"example":8},{"name":"filter[local_hour][lte]","in":"query","description":"Number between 0-23. Filter metrics where local_hour is less than or equal to value.","schema":{"type":"integer","format":"int32","example":16},"example":16}],"responses":{"200":{"description":"200","content":{"application/json":{"examples":{"Result":{"value":"{\n    \"data\": [\n        {\n            \"id\": \"16541760\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 17,\n                \"capacity\": 150,\n                \"avg_person_count\": \"29.0\",\n                \"avg_occupied_person_count\": \"29.0\",\n                \"min_person_count\": 28,\n                \"max_person_count\": 90,\n                \"minutes_actively_occupied\": \"26.0\",\n                \"minutes_passively_occupied\": \"11.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609070\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16540025\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 16,\n                \"capacity\": 150,\n                \"avg_person_count\": \"71.0\",\n                \"avg_occupied_person_count\": \"71.0\",\n                \"min_person_count\": 20,\n                \"max_person_count\": 85,\n                \"minutes_actively_occupied\": \"42.0\",\n                \"minutes_passively_occupied\": \"6.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609070\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16538284\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 15,\n                \"capacity\": 150,\n                \"avg_person_count\": \"72.0\",\n                \"avg_occupied_person_count\": \"72.0\",\n                \"min_person_count\": 47,\n                \"max_person_count\": 101,\n                \"minutes_actively_occupied\": \"41.0\",\n                \"minutes_passively_occupied\": \"0.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609070\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16536494\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 14,\n                \"capacity\": 150,\n                \"avg_person_count\": \"73.0\",\n                \"avg_occupied_person_count\": \"73.0\",\n                \"min_person_count\": 25,\n                \"max_person_count\": 120,\n                \"minutes_actively_occupied\": \"22.0\",\n                \"minutes_passively_occupied\": \"5.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609070\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16534720\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 13,\n                \"capacity\": 150,\n                \"avg_person_count\": \"43.0\",\n                \"avg_occupied_person_count\": \"43.0\",\n                \"min_person_count\": 8,\n                \"max_person_count\": 142,\n                \"minutes_actively_occupied\": \"36.0\",\n                \"minutes_passively_occupied\": \"12.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609070\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16531087\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 12,\n                \"capacity\": 150,\n                \"avg_person_count\": \"22.0\",\n                \"avg_occupied_person_count\": \"22.0\",\n                \"min_person_count\": 17,\n                \"max_person_count\": 28,\n                \"minutes_actively_occupied\": \"24.0\",\n                \"minutes_passively_occupied\": \"3.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609070\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16529236\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 11,\n                \"capacity\": 150,\n                \"avg_person_count\": \"78.0\",\n                \"avg_occupied_person_count\": \"78.0\",\n                \"min_person_count\": 13,\n                \"max_person_count\": 148,\n                \"minutes_actively_occupied\": \"6.0\",\n                \"minutes_passively_occupied\": \"14.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609070\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16527348\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 10,\n                \"capacity\": 150,\n                \"avg_person_count\": \"60.0\",\n                \"avg_occupied_person_count\": \"60.0\",\n                \"min_person_count\": 47,\n                \"max_person_count\": 68,\n                \"minutes_actively_occupied\": \"19.0\",\n                \"minutes_passively_occupied\": \"8.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609070\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16525451\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 9,\n                \"capacity\": 150,\n                \"avg_person_count\": \"31.0\",\n                \"avg_occupied_person_count\": \"31.0\",\n                \"min_person_count\": 0,\n                \"max_person_count\": 57,\n                \"minutes_actively_occupied\": \"0.0\",\n                \"minutes_passively_occupied\": \"1.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609070\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16523573\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 8,\n                \"capacity\": 150,\n                \"avg_person_count\": \"77.0\",\n                \"avg_occupied_person_count\": \"77.0\",\n                \"min_person_count\": 23,\n                \"max_person_count\": 86,\n                \"minutes_actively_occupied\": \"12.0\",\n                \"minutes_passively_occupied\": \"34.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609070\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16541763\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 17,\n                \"capacity\": 80,\n                \"avg_person_count\": \"27.0\",\n                \"avg_occupied_person_count\": \"27.0\",\n                \"min_person_count\": 16,\n                \"max_person_count\": 53,\n                \"minutes_actively_occupied\": \"26.0\",\n                \"minutes_passively_occupied\": \"21.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609069\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16540024\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 16,\n                \"capacity\": 80,\n                \"avg_person_count\": \"25.0\",\n                \"avg_occupied_person_count\": \"25.0\",\n                \"min_person_count\": 17,\n                \"max_person_count\": 41,\n                \"minutes_actively_occupied\": \"26.0\",\n                \"minutes_passively_occupied\": \"2.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609069\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16538286\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 15,\n                \"capacity\": 80,\n                \"avg_person_count\": \"15.0\",\n                \"avg_occupied_person_count\": \"15.0\",\n                \"min_person_count\": 0,\n                \"max_person_count\": 23,\n                \"minutes_actively_occupied\": \"14.0\",\n                \"minutes_passively_occupied\": \"3.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609069\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16536497\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 14,\n                \"capacity\": 80,\n                \"avg_person_count\": \"8.0\",\n                \"avg_occupied_person_count\": \"8.0\",\n                \"min_person_count\": 0,\n                \"max_person_count\": 58,\n                \"minutes_actively_occupied\": \"12.0\",\n                \"minutes_passively_occupied\": \"23.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609069\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16534698\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 13,\n                \"capacity\": 80,\n                \"avg_person_count\": \"48.0\",\n                \"avg_occupied_person_count\": \"48.0\",\n                \"min_person_count\": 24,\n                \"max_person_count\": 79,\n                \"minutes_actively_occupied\": \"26.0\",\n                \"minutes_passively_occupied\": \"3.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609069\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16531091\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 12,\n                \"capacity\": 80,\n                \"avg_person_count\": \"32.0\",\n                \"avg_occupied_person_count\": \"32.0\",\n                \"min_person_count\": 0,\n                \"max_person_count\": 80,\n                \"minutes_actively_occupied\": \"14.0\",\n                \"minutes_passively_occupied\": \"9.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609069\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16529237\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 11,\n                \"capacity\": 80,\n                \"avg_person_count\": \"66.0\",\n                \"avg_occupied_person_count\": \"66.0\",\n                \"min_person_count\": 9,\n                \"max_person_count\": 73,\n                \"minutes_actively_occupied\": \"0.0\",\n                \"minutes_passively_occupied\": \"4.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609069\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16527349\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 10,\n                \"capacity\": 80,\n                \"avg_person_count\": \"13.0\",\n                \"avg_occupied_person_count\": \"13.0\",\n                \"min_person_count\": 9,\n                \"max_person_count\": 48,\n                \"minutes_actively_occupied\": \"26.0\",\n                \"minutes_passively_occupied\": \"4.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609069\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16525454\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 9,\n                \"capacity\": 80,\n                \"avg_person_count\": \"6.0\",\n                \"avg_occupied_person_count\": \"6.0\",\n                \"min_person_count\": 4,\n                \"max_person_count\": 53,\n                \"minutes_actively_occupied\": \"28.0\",\n                \"minutes_passively_occupied\": \"1.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609069\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16523551\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 8,\n                \"capacity\": 80,\n                \"avg_person_count\": \"7.0\",\n                \"avg_occupied_person_count\": \"7.0\",\n                \"min_person_count\": 0,\n                \"max_person_count\": 17,\n                \"minutes_actively_occupied\": \"6.0\",\n                \"minutes_passively_occupied\": \"20.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609069\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16541761\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 17,\n                \"capacity\": 125,\n                \"avg_person_count\": \"80.0\",\n                \"avg_occupied_person_count\": \"80.0\",\n                \"min_person_count\": 18,\n                \"max_person_count\": 104,\n                \"minutes_actively_occupied\": \"43.0\",\n                \"minutes_passively_occupied\": \"7.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609068\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16540026\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 16,\n                \"capacity\": 125,\n                \"avg_person_count\": \"39.0\",\n                \"avg_occupied_person_count\": \"39.0\",\n                \"min_person_count\": 25,\n                \"max_person_count\": 50,\n                \"minutes_actively_occupied\": \"17.0\",\n                \"minutes_passively_occupied\": \"17.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609068\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16538266\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 15,\n                \"capacity\": 125,\n                \"avg_person_count\": \"24.0\",\n                \"avg_occupied_person_count\": \"24.0\",\n                \"min_person_count\": 0,\n                \"max_person_count\": 38,\n                \"minutes_actively_occupied\": \"25.0\",\n                \"minutes_passively_occupied\": \"11.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609068\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16536488\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 14,\n                \"capacity\": 125,\n                \"avg_person_count\": \"2.0\",\n                \"avg_occupied_person_count\": \"2.0\",\n                \"min_person_count\": 0,\n                \"max_person_count\": 114,\n                \"minutes_actively_occupied\": \"23.0\",\n                \"minutes_passively_occupied\": \"25.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609068\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16534707\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 13,\n                \"capacity\": 125,\n                \"avg_person_count\": \"25.0\",\n                \"avg_occupied_person_count\": \"25.0\",\n                \"min_person_count\": 10,\n                \"max_person_count\": 29,\n                \"minutes_actively_occupied\": \"25.0\",\n                \"minutes_passively_occupied\": \"7.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609068\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16531089\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 12,\n                \"capacity\": 125,\n                \"avg_person_count\": \"102.0\",\n                \"avg_occupied_person_count\": \"102.0\",\n                \"min_person_count\": 60,\n                \"max_person_count\": 102,\n                \"minutes_actively_occupied\": \"3.0\",\n                \"minutes_passively_occupied\": \"45.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609068\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16529235\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 11,\n                \"capacity\": 125,\n                \"avg_person_count\": \"9.0\",\n                \"avg_occupied_person_count\": \"9.0\",\n                \"min_person_count\": 7,\n                \"max_person_count\": 64,\n                \"minutes_actively_occupied\": \"8.0\",\n                \"minutes_passively_occupied\": \"24.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609068\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16527350\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 10,\n                \"capacity\": 125,\n                \"avg_person_count\": \"6.0\",\n                \"avg_occupied_person_count\": \"6.0\",\n                \"min_person_count\": 2,\n                \"max_person_count\": 54,\n                \"minutes_actively_occupied\": \"17.0\",\n                \"minutes_passively_occupied\": \"6.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id\": \"609068\",\n                        \"type\": \"floor\"\n                    }\n                }\n            }\n        },\n        {\n            \"id\": \"16525450\",\n            \"type\": \"metrics_hourly_floor\",\n            \"attributes\": {\n                \"local_date\": \"2023-05-16\",\n                \"local_hour\": 9,\n                \"capacity\": 125,\n                \"avg_person_count\": \"19.0\",\n                \"avg_occupied_person_count\": \"19.0\",\n                \"min_person_count\": 12,\n                \"max_person_count\": 55,\n                \"minutes_actively_occupied\": \"52.0\",\n                \"minutes_passively_occupied\": \"2.0\",\n                \"space_count\": 1\n            },\n            \"relationships\": {\n                \"floor\": {\n                    \"data\": {\n                        \"id

# --- truncated at 32 KB (185 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vergesense/refs/heads/main/openapi/vergesense-api-openapi.json