{"info":{"_postman_id":"a2ccf0df-28ad-40a9-afe3-f0742c7e308f","name":"VergeSense API","description":"<html><head></head><body><p>There are two ways to interact with VergeSense’s APIs: VergeSense can set up pre-packaged <a href=\"https://vergesense.readme.io/reference/web-hooks\">Webhooks</a> to automatically “push” relevant data to your platform, enabling greater customization. Or, you can use VergeSense’s <a href=\"https://en.wikipedia.org/wiki/Representational_state_transfer\">REST</a> / Analytics API to “pull” the data you need.</p>\n<p>Webhooks are the preferred way to get a stream of real time data, for example, for every sensor, room, point in time, or a person count in a given space. When using webhooks, the data is pushed to your platform where you can perform further analysis.</p>\n<img src=\"https://content.pstmn.io/75ef6fdf-793e-4578-9630-1772948b6033/aW1hZ2UucG5n\" width=\"1076\" height=\"636\">\n\n<p>Some use cases for webhooks:</p>\n<ul>\n<li><p>Indicate availability of rooms in real time. For example, you have a kiosk in your lobby and want to know when rooms are available.</p>\n</li>\n<li><p>Integrate with business intelligence dashboards. For example, Robin Powered or an Integrated Workplace Management System (IWMS) of your choosing.</p>\n</li>\n</ul>\n<p>Meanwhile, the REST API is useful for getting specific or historical metadata from a point in time. When using the REST API, VergeSense stores the data and performs the analysis for you to conveniently access.</p>\n<p>A use case for the REST API:</p>\n<ul>\n<li>Building a historical report. For example, you want to generate a report for Building 1, Floor 3 to determine how busy Conference Room B was in the month of February.</li>\n</ul>\n<h2 id=\"setup\">Setup</h2>\n<p>To get an API key, contact <code>support@vergesense.com</code> to request a VergeSense Admin account.</p>\n<p>Once you have a VergeSense Admin account, navigate to Integrations and click Generate API Key.</p>\n<img src=\"https://files.readme.io/2ed10b9-Generate_API_Key_1.png\">\n\n<p>On the popup screen, enter an API Token Name, select buildings to which the API key applies, then click Save.</p>\n<img src=\"https://files.readme.io/9085977-Generate_API_Key_2.png\">\n\n<p>To view or modify the API key, navigate to Integrations and click Details.</p>\n<img src=\"https://files.readme.io/7d035d6-Generate_API_Key_3.png\">\n\n<p>From the Details screen, you can</p>\n<ul>\n<li><p>edit the API Token Name,</p>\n</li>\n<li><p>click the eye icon to view the API key,</p>\n</li>\n<li><p>select buildings to which the API key applies, or</p>\n</li>\n<li><p>click Rotate to generate a new API key.</p>\n</li>\n</ul>\n<p>Your organization may choose to periodically rotate the API key for enhanced security or in the event the API key was compromised.</p>\n<img src=\"https://files.readme.io/9105acf-Generate_API_Key_4.png\">\n\n<h2 id=\"requests\">Requests</h2>\n<p>APIs request allows you to retrieve data from a data source or to send data. API requests should be made to the following endpoints depending on the deployment environment:<br><strong>AWS</strong> (default): <code>https://api.vergesense.com</code><br><strong>Azure</strong>: <code>https://api.azure.vergesense.com</code></p>\n<h2 id=\"authentication\">Authentication</h2>\n<p>API endpoints are authenticated via the API key. Once you have an API key, you must use the HTTP header <code>vs-api-key</code>. Otherwise, a <code>403: Forbidden</code> error will be returned. All requests must use <code>https://</code>. Requests made to <code>http://</code> will not be accepted.</p>\n<h2 id=\"error-codes\">Error Codes</h2>\n<p><strong>400 Bad Request</strong><br>Invalid request sent to API. Additional information appears in the response body.</p>\n<p><strong>403 Forbidden</strong><br>Caused by a missing HTTP header or invalid API token.</p>\n<p><strong>404 Not Found</strong><br>The requested resource does not exist.</p>\n<p><strong>409 Conflict</strong><br>The request conflicts with another request.</p>\n<h2 id=\"timestamps\">Timestamps</h2>\n<p><a href=\"https://en.wikipedia.org/wiki/Timestamp\">Timestamps</a> should be specified in <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> format.</p>\n<p>The following formats are both valid: <code>2019-01-15T23:30:28-08:00</code> and <code>2019-01-15T23:30:28Z</code>.</p>\n<p>Timestamps will be returned in ISO 8601 UTC format, for example: <code>2019-01-15T23:30:28Z</code>.</p>\n<p><a href=\"https://www.timestamp-converter.com/\">Timestamp Formatting Tool</a></p>\n<h2 id=\"timeouts-and-rate-limiting\">Timeouts and Rate Limiting</h2>\n<p>API requests will timeout after 30 seconds. If your requests are timing out, use an appropriate filter to reduce the result set and the time required to calculate a response.</p>\n<p>A rate limit of 120 requests per minute is enforced across all API endpoints based on the source IP address.</p>\n<h2 id=\"api-changes\">API Changes</h2>\n<p>API changes will be published on our public facing <a href=\"https://headwayapp.co/headway-changelog\">changelog</a>. Through the changelog VergeSense will publish information regarding new endpoints, improvements, and deprecations.</p>\n<h3 id=\"rss-feed\">RSS Feed</h3>\n<p>An RSS feed of the changelog is available using this URL: <a href=\"https://headwayapp.co/vergesense-changelog/rss\">https://headwayapp.co/vergesense-changelog/rss</a></p>\n<h2 id=\"versioning\">Versioning</h2>\n<p>At VergeSense we use a <code>YYYY-MM-DD</code> format to version our APIs. The first time you make a request to our API we will set your API version to the most recent version. Optionally, if you'd like to use a different version of the API, you can use the <code>vs-version</code> request header. This document is for version <code>2017-06-14</code>. The current version of the API is <code>2019-04-17</code>. To find a full list of versions along with their respective changes, please see our <a href=\"https://headwayapp.co/vergesense-changelog/\">ChangeLog</a>.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"6835591","collectionId":"a2ccf0df-28ad-40a9-afe3-f0742c7e308f","publishedId":"2s9Y5Wx3QL","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"704FFB"},"publishDate":"2023-08-24T15:59:20.000Z"},"item":[{"name":"Space API","item":[{"name":"/spaces/detections","id":"a6998cbf-53b4-41ff-ba16-dc52c64f9dbd","protocolProfileBehavior":{"disabledSystemHeaders":{"content-length":true},"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"vs-api-key","value":"{{api-key}}","type":"text"}],"url":"https://cloud.vergesense.com/spaces/detections?date=&filter[timestamp][gte]=&filter[timestamp][gt]=&filter[timestamp][lte]&filter[timestamp][lt]&page[number]=","description":"<h1 id=\"spacesdetections\">/spaces/detections</h1>\n<p>Fetch all detections for spaces on a given day.<br />Response conforms to the JSON API spec <a href=\"https://jsonapi.org/\">https://jsonapi.org/</a>.</p>\n<p>Responses are limited to <code>10,000</code> detections after which pagination will take place.</p>\n<h2 id=\"example-requests\">Example Requests</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Description</th>\n<th>Query</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Query for 1 day of data.</td>\n<td><code>https://api.vergesense.com/spaces/detections?date=2022-08-02</code></td>\n</tr>\n<tr>\n<td>Query for 1 hour of data.</td>\n<td><code>https://api.vergesense.com/spaces/detections?filter[timestamp][gte]=2022-08-02T16:00:00Z&amp;filter[timestamp][lt]=2022-08-02T17:00:00Z</code></td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Description</th>\n<th>Data Type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>data</code></td>\n<td>Array of space detections.</td>\n<td>Array of Space Detection Models (see below)</td>\n</tr>\n<tr>\n<td><code>included</code></td>\n<td>Included relationships.</td>\n<td><a href=\"https://vergesense.readme.io/reference/building\">Building</a>  <br /><a href=\"https://vergesense.readme.io/reference/floor\">Floor</a>  <br /><a href=\"https://vergesense.readme.io/reference/space\">Space</a></td>\n</tr>\n<tr>\n<td><code>links</code></td>\n<td>Pagination links.</td>\n<td><a href=\"https://vergesense.readme.io/reference/links\">Links</a></td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Space Detection Model</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Description</th>\n<th>Data Type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>Unique identifier for the space detection.</td>\n<td><code>String</code></td>\n</tr>\n<tr>\n<td><code>type</code></td>\n<td><code>space_detection</code></td>\n<td><code>String</code></td>\n</tr>\n<tr>\n<td><code>attributes.space_id</code></td>\n<td>The space (building/floor/space) that the detection was reported for</td>\n<td><code>String</code></td>\n</tr>\n<tr>\n<td><code>attributes.timestamp</code></td>\n<td>Timestamp of the detection (UTC)</td>\n<td>`String</td>\n</tr>\n<tr>\n<td><code>attributes.count</code></td>\n<td>Count of people detected</td>\n<td><code>Integer</code></td>\n</tr>\n<tr>\n<td><code>attributes.signs_of_life</code></td>\n<td>Whether or not \"signs of life\" were detected</td>\n<td>`Integer</td>\n</tr>\n<tr>\n<td><code>relationships.building</code></td>\n<td>Only present if the detection was reported for a building. Details included in the <code>included</code> top level response key.</td>\n<td>`Object</td>\n</tr>\n<tr>\n<td><code>relationships.floor</code></td>\n<td>Only present if the detection was reported for a floor. Details included in the <code>included</code> top level response key.</td>\n<td>`Object</td>\n</tr>\n<tr>\n<td><code>relationships.space</code></td>\n<td>Only present if the detection was reported for a space. Details included in the <code>included</code> top level response key.</td>\n<td>`Object</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["spaces","detections"],"host":["https://cloud.vergesense.com"],"query":[{"description":{"content":"<p>Date to fetch thresholds crossings for. Date is required unless a timestamp filter query parameter is provided.</p>\n","type":"text/plain"},"key":"date","value":""},{"description":{"content":"<p>Greater than or equal to the timestamp.</p>\n","type":"text/plain"},"key":"filter[timestamp][gte]","value":""},{"description":{"content":"<p>Greater than the timestamp.</p>\n","type":"text/plain"},"key":"filter[timestamp][gt]","value":""},{"description":{"content":"<p>Less than or equal to the timestamp.</p>\n","type":"text/plain"},"key":"filter[timestamp][lte]","value":null},{"description":{"content":"<p>Less than or equal to the timestamp.</p>\n","type":"text/plain"},"key":"filter[timestamp][lt]","value":null},{"description":{"content":"<p>Requested page number. Only used when pagination is applicable.</p>\n","type":"text/plain"},"key":"page[number]","value":""}],"variable":[]}},"response":[{"id":"f8d601e6-76dd-4188-86bd-6a46cbee09bf","name":"spaces","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"vs-api-key","value":"6067ce385a2f6fb57c27b75628c38140","type":"text"}],"url":"https://api.vergesense.com/spaces"},"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"a6998cbf-53b4-41ff-ba16-dc52c64f9dbd"},{"name":"/spaces/thresholds/crossings","id":"0ca47607-ac72-42d9-bb08-317904a3a01c","protocolProfileBehavior":{"disabledSystemHeaders":{"content-length":true},"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"vs-api-key","value":"{{api-key}}","type":"text"}],"url":"https://cloud.vergesense.com/spaces/thresholds/crossings?date=&filter[timestamp][gte]\n=&filter[timestamp][lte]&filter[timestamp][gt]&filter[timestamp][lt]&page[number]=1","description":"<h1 id=\"spacesthresholdscrossings\">/spaces/thresholds/crossings</h1>\n<p>Fetch all threshold crossings for spaces on a given day.<br />Response conforms to the JSON API spec <a href=\"https://jsonapi.org/\">https://jsonapi.org/</a>.</p>\n<p>Responses are limited to <code>1,000</code> threshold crossings after which pagination will take place.</p>\n<h2 id=\"example-requests\">Example Requests</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Description</th>\n<th>Query</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Query for 1 day of data.</td>\n<td><code>https://api.vergesense.com/spaces/thresholds/crossings?date=2022-08-02</code></td>\n</tr>\n<tr>\n<td>Query for 1 hour of data.</td>\n<td><code>https://api.vergesense.com/spaces/thresholds/crossings?filter[timestamp][gte]=2022-08-02T16:00:00Z&amp;filter[timestamp][lt]=2022-08-02T17:00:00Z</code></td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Description</th>\n<th>Data Type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>data</code></td>\n<td>Array of space threshold crossings.</td>\n<td>Array of Space Threshold Crossing Data Models (see below)</td>\n</tr>\n<tr>\n<td><code>included</code></td>\n<td>Included relationships.</td>\n<td><a href=\"https://vergesense.readme.io/reference/building\">Building</a>  <br /><a href=\"https://vergesense.readme.io/reference/floor\">Floor</a>  <br /><a href=\"https://vergesense.readme.io/reference/space\">Space</a>  <br /><a href=\"https://vergesense.readme.io/reference/threshold\">Threshold</a></td>\n</tr>\n<tr>\n<td><code>links</code></td>\n<td>Pagination links.</td>\n<td><a href=\"https://vergesense.readme.io/reference/links\">Links</a></td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Space Threshold Crossing Model</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Description</th>\n<th>Data Type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>Unique identifier for the threshold crossing in the form:  <br />`[space id]</td>\n<td>[timestamp]`</td>\n</tr>\n<tr>\n<td><code>type</code></td>\n<td><code>space_threshold_crossing</code></td>\n<td><code>String</code></td>\n</tr>\n<tr>\n<td><code>attributes.space_id</code></td>\n<td>The space (building/floor/space) that the threshold crossing was reported for</td>\n<td><code>String</code></td>\n</tr>\n<tr>\n<td><code>attributes.threshold_id</code></td>\n<td>The threshold that the threshold crossing was reported for</td>\n<td><code>String</code></td>\n</tr>\n<tr>\n<td><code>attributes.timestamp</code></td>\n<td>Timestamp of the crossing (UTC)</td>\n<td><code>String</code></td>\n</tr>\n<tr>\n<td><code>attributes.direction</code></td>\n<td>Direction of the crossing. `in</td>\n<td>out`</td>\n</tr>\n<tr>\n<td><code>relationships.building</code></td>\n<td>Only present if the crossing was reported for a building. Details included in the <code>included</code> top level response key.</td>\n<td>`Object</td>\n</tr>\n<tr>\n<td><code>relationships.floor</code></td>\n<td>Only present if the crossing was reported for a floor. Details included in the <code>included</code> top level response key.</td>\n<td>`Object</td>\n</tr>\n<tr>\n<td><code>relationships.space</code></td>\n<td>Only present if the crossing was reported for a space. Details included in the <code>included</code> top level response key.</td>\n<td>`Object</td>\n</tr>\n<tr>\n<td><code>relationships.threshold</code></td>\n<td>The threshold that the crossing was associated with</td>\n<td><code>Object</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["spaces","thresholds","crossings"],"host":["https://cloud.vergesense.com"],"query":[{"description":{"content":"<p>Date to fetch thresholds crossings for. Date is required unless a timestamp filter query parameter is provided.</p>\n","type":"text/plain"},"key":"date","value":""},{"description":{"content":"<p>Greater than or equal to the timestamp.</p>\n","type":"text/plain"},"key":"filter[timestamp][gte]\n","value":""},{"description":{"content":"<p>Greater than the timestamp.</p>\n","type":"text/plain"},"key":"filter[timestamp][lte]","value":null},{"description":{"content":"<p>Less than or equal to the timestamp.</p>\n","type":"text/plain"},"key":"filter[timestamp][gt]","value":null},{"key":"filter[timestamp][lt]","value":null},{"key":"page[number]","value":"1"}],"variable":[]}},"response":[],"_postman_id":"0ca47607-ac72-42d9-bb08-317904a3a01c"},{"name":"/spaces","id":"118b30b3-eb5c-4f2b-8033-006a3ec70974","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"vs-api-key","value":"{{api-key}}","type":"text"}],"url":"https://cloud.vergesense.com/spaces?building_ref_id&floor_ref_id&space_ref_id&space_type","description":"<p>This API Endpoint will provide you with the most recent sensor reports for spaces within 24 hours timeframe.</p>\n<p>HTTP Method: GET</p>\n<p>BaseURL: <a href=\"https://api.vergesense.com\">https://api.vergesense.com</a></p>\n<p>Endpoint: /space</p>\n<p>URL: {{BaseURL}/{{Endpoint}}</p>\n<h2 id=\"response\">Response</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Property</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>building_ref_id</code></td>\n<td>String</td>\n<td>Identifier of the space's building.</td>\n</tr>\n<tr>\n<td><code>floor_ref_id</code></td>\n<td>String</td>\n<td>null</td>\n</tr>\n<tr>\n<td><code>space_ref_id</code></td>\n<td>String</td>\n<td>null</td>\n</tr>\n<tr>\n<td><code>name</code></td>\n<td>String</td>\n<td>The space's name.</td>\n</tr>\n<tr>\n<td><code>space_type</code></td>\n<td>String</td>\n<td>The space's type. Either a default type or custom type.</td>\n</tr>\n<tr>\n<td><code>last_reports</code></td>\n<td>Object</td>\n<td>An array of the most recent reports for each sensor reporting information on the space.</td>\n</tr>\n<tr>\n<td><code>last_reports.id</code></td>\n<td>String</td>\n<td>An identifier of the sensor reporting on the space.</td>\n</tr>\n<tr>\n<td><code>last_reports.person_count</code></td>\n<td>Number</td>\n<td>The number of people observed by the sensor in this space.</td>\n</tr>\n<tr>\n<td><code>last_reports.signs_of_life</code></td>\n<td>Boolean</td>\n<td>Whether of not signs of life was observed by the sensor in this space. May be <code>null</code> if signs of life is not enabled for the sensor.</td>\n</tr>\n<tr>\n<td><code>last_report.motion_detected</code></td>\n<td>Boolean</td>\n<td>Whether or not the sensor captured a motion event. May be <code>null</code> if the sensor is not capable of capturing motion/PIR events.</td>\n</tr>\n<tr>\n<td><code>last_report.timestamp</code></td>\n<td>String</td>\n<td>The timestamp of the report.</td>\n</tr>\n<tr>\n<td><code>people</code></td>\n<td>Object</td>\n<td>Information on the people observed in the space.</td>\n</tr>\n<tr>\n<td><code>people.count</code></td>\n<td>Number</td>\n<td>Total number of people observed in the space by all sensors reporting on the space.</td>\n</tr>\n<tr>\n<td><code>people.distances</code></td>\n<td>Object</td>\n<td>Information on the distances between people in the space.</td>\n</tr>\n<tr>\n<td><code>people.distances.units</code></td>\n<td>String</td>\n<td>The units in which the distance values are presented. Always <code>meters</code></td>\n</tr>\n<tr>\n<td><code>people.distances.values</code></td>\n<td>Array</td>\n<td>The pairwise distances between each pair of people observed by each sensor reporting on the space. For a space with a single sensor, this is just the pairwise distances between all people in the space. If <code>n</code> people are present, there will be <code>n\\*(n-1)/2</code> total distances.</td>\n</tr>\n<tr>\n<td><code>environment</code></td>\n<td>Object</td>\n<td>Environmental information for the space.</td>\n</tr>\n<tr>\n<td><code>environment.sensor</code></td>\n<td>String</td>\n<td>The identifier of the sensor that computed the environmental data of this space.</td>\n</tr>\n<tr>\n<td><code>environment.timestamp</code></td>\n<td>String</td>\n<td>The timestamp of the sensor report when this environmental data was computed.</td>\n</tr>\n<tr>\n<td><code>environment.humidity</code></td>\n<td>Object</td>\n<td>The humidity computed for the space.</td>\n</tr>\n<tr>\n<td><code>environment.humidity.units</code></td>\n<td>String</td>\n<td>Humidity is measured in Relative Humidity (\"RH\")</td>\n</tr>\n<tr>\n<td><code>environment.humidity.value</code></td>\n<td>Number</td>\n<td>The humidity computed for the space.</td>\n</tr>\n<tr>\n<td><code>environment.iaq</code></td>\n<td>Object</td>\n<td>The Indoor Air Quality for the space.</td>\n</tr>\n<tr>\n<td><code>environment.iaq.units</code></td>\n<td>String</td>\n<td>IAQ is measured in the Umweltbundesam (UBA) the German Environment Agency's custom metric for indoor air quality.</td>\n</tr>\n<tr>\n<td><code>environment.iaq.value</code></td>\n<td>Number</td>\n<td>The Indoor Air Quality for the space.</td>\n</tr>\n<tr>\n<td><code>environment.temperature</code></td>\n<td>Object</td>\n<td>The temperature for the space.</td>\n</tr>\n<tr>\n<td><code>environment.temperature.units</code></td>\n<td>String</td>\n<td>Temperature is measured in Celsius (\"C\")</td>\n</tr>\n<tr>\n<td><code>environment.temperature.value</code></td>\n<td>Number</td>\n<td>Temperature of the space.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["spaces"],"host":["https://cloud.vergesense.com"],"query":[{"description":{"content":"<p>Filter on building_ref_id to get only the spaces belonging to a particular building.</p>\n","type":"text/plain"},"key":"building_ref_id","value":null},{"description":{"content":"<p>Filter on floor_ref_id to get only the spaces belonging to a particular floor.</p>\n","type":"text/plain"},"key":"floor_ref_id","value":null},{"description":{"content":"<p>Filter on space_ref_id to get a single space.</p>\n","type":"text/plain"},"key":"space_ref_id","value":null},{"description":{"content":"<p>Options: desk, desk_area, conference_room, lounge_area, collaboration_room, phone_booth, activity_zone, and office</p>\n","type":"text/plain"},"key":"space_type","value":null}],"variable":[]}},"response":[],"_postman_id":"118b30b3-eb5c-4f2b-8033-006a3ec70974"}],"id":"022441a1-5a66-451e-82a5-e1c3a3bcfe37","description":"<p>This API documentation provides you with the recent space report, space detection and the space threshold crossings of spaces associated the sensors.</p>\n","_postman_id":"022441a1-5a66-451e-82a5-e1c3a3bcfe37"},{"name":"Metrics API","item":[{"name":"/metrics/spaces","id":"ddd86c29-43a8-426a-a4fa-82a39a2039d2","protocolProfileBehavior":{"disabledSystemHeaders":{},"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"vs-api-key","value":"{{api-key}}","type":"text"}],"url":"https://cloud.vergesense.com/metrics/spaces?filter[timestamp][gte]=&filter[timestamp][lte]=&interval=&page[number]=&page[size]=","description":"<h1 id=\"metricsspaces\">/metrics/spaces</h1>\n<p>Metrics for spaces aggregated by the requested interval</p>\n<h2 id=\"response\">Response</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Property</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>avg_person_count</code></td>\n<td>String</td>\n<td>Average amount of people in space.</td>\n</tr>\n<tr>\n<td><code>min_person_count</code></td>\n<td>Number</td>\n<td>Minimum amount of people in space.</td>\n</tr>\n<tr>\n<td><code>mode_person_count</code></td>\n<td>Number</td>\n<td>Most common amount of people in space.</td>\n</tr>\n<tr>\n<td><code>max_person_count</code></td>\n<td>Number</td>\n<td>Maximum amount of people in space.</td>\n</tr>\n<tr>\n<td><code>minutes_actively_occupied</code></td>\n<td>String</td>\n<td>Amount of minutes that the space was actively occupied.</td>\n</tr>\n<tr>\n<td><code>minutes_passively_occupied</code></td>\n<td>String</td>\n<td>Amount of minutes that the space was passively occupied.</td>\n</tr>\n<tr>\n<td><code>timestamp</code></td>\n<td>String</td>\n<td>Beginning timestamp (UTC) of interval, formatted 'YYYY-MM-DDTHH:MM:SS.SSSZ'</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["metrics","spaces"],"host":["https://cloud.vergesense.com"],"query":[{"description":{"content":"<p>Timestamp (UTC) that you would like the results to be greater than or equal to.</p>\n","type":"text/plain"},"key":"filter[timestamp][gte]","value":""},{"description":{"content":"<p>Timestamp (UTC) that you would like the results to be less than or equal to.</p>\n","type":"text/plain"},"key":"filter[timestamp][lte]","value":""},{"description":{"content":"<p>Interval (in minutes) to use for the bucketing of metrics data.</p>\n","type":"text/plain"},"key":"interval","value":""},{"description":{"content":"<p>Page number for pagination.</p>\n","type":"text/plain"},"key":"page[number]","value":""},{"description":{"content":"<p>Number of spaces to include per page. Limit is 1000.</p>\n","type":"text/plain"},"key":"page[size]","value":""}],"variable":[]}},"response":[{"id":"eb91c56c-8fc7-446e-b5db-7cae2698c5ac","name":"spaces","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"vs-api-key","value":"6067ce385a2f6fb57c27b75628c38140","type":"text"}],"url":"https://api.vergesense.com/spaces"},"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"ddd86c29-43a8-426a-a4fa-82a39a2039d2"},{"name":"/metrics/hourly/spaces","id":"d3f0c843-4b3e-44c6-a8e3-ad17f51b31bf","protocolProfileBehavior":{"disabledSystemHeaders":{},"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"vs-api-key","value":"{{api-key}}","type":"text"}],"url":"https://cloud.vergesense.com/metrics/hourly/spaces?fields[metrics_hourly_space]&page[number]=1&page[size]=10&filter[space_type.key]&filter[space_type.name]&filter[building_ref_id]=&filter[floor_ref_id]=S2&filter[space_ref_id]=&filter[local_date][gte]=2023-04-25&filter[local_date][lte]=2023-04-26&filter[local_hour][gte]\n=8&filter[local_hour][lte]=16&sort=-local_date,local_hour","description":"<h1 id=\"metricshourlyspaces\">/metrics/hourly/spaces</h1>\n<p>Hourly metrics for spaces</p>\n<h2 id=\"response\">Response</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Property</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>local_date</code></td>\n<td>String</td>\n<td>Local date, formatted 'YYYY-MM-DD'.</td>\n</tr>\n<tr>\n<td><code>local_hour</code></td>\n<td>Number</td>\n<td>Local hour between 0-23.</td>\n</tr>\n<tr>\n<td><code>capacity</code></td>\n<td>Number</td>\n<td>Capacity of the space which the metric belongs at the time when the metric was recorded.</td>\n</tr>\n<tr>\n<td><code>avg_person_count</code></td>\n<td>String</td>\n<td>Average amount of people in space.</td>\n</tr>\n<tr>\n<td><code>min_person_count</code></td>\n<td>Number</td>\n<td>Minimum amount of people in space.</td>\n</tr>\n<tr>\n<td><code>max_person_count</code></td>\n<td>Number</td>\n<td>Maximum amount of people in space.</td>\n</tr>\n<tr>\n<td><code>minutes_actively_occupied</code></td>\n<td>String</td>\n<td>Amount of minutes that the space was actively occupied.</td>\n</tr>\n<tr>\n<td><code>minutes_passively_occupied</code></td>\n<td>String</td>\n<td>Amount of minutes that the space was passively occupied.</td>\n</tr>\n<tr>\n<td><code>avg_pct_utilization</code></td>\n<td>Number</td>\n<td>Average percentage that the space was utilized, represented in decimal form.</td>\n</tr>\n<tr>\n<td><code>min_pct_utilization</code></td>\n<td>Number</td>\n<td>Minimum percentage that the space was utilized, represented in decimal form.</td>\n</tr>\n<tr>\n<td><code>max_pct_utilization</code></td>\n<td>Number</td>\n<td>Maximum percentage that the space was utilized, represented in decimal form.</td>\n</tr>\n<tr>\n<td><code>pct_time_actively_occupied</code></td>\n<td>String</td>\n<td>Percentage of hour that the space was actively occupied, represented in decimal form.</td>\n</tr>\n<tr>\n<td><code>pct_time_passively_occupied</code></td>\n<td>String</td>\n<td>Percentage of hour that the space was passively occupied, represented in decimal form.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"query-parameters\">Query Parameters</h2>\n<p><code>local_date</code> and <code>local_hour</code> have 6 different comparison operators.</p>\n<p><code>filter[][]=</code></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Operator</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>eq</code></td>\n<td><code>==</code> is equal to</td>\n</tr>\n<tr>\n<td><code>not_eq</code></td>\n<td><code>!=</code> is not equal to</td>\n</tr>\n<tr>\n<td><code>lt</code></td>\n<td><code>&lt;</code> is less than</td>\n</tr>\n<tr>\n<td><code>lte</code></td>\n<td><code>&lt;=</code> is less than or equal to</td>\n</tr>\n<tr>\n<td><code>gt</code></td>\n<td><code>&gt;</code> is greater than</td>\n</tr>\n<tr>\n<td><code>gte</code></td>\n<td><code>&gt;=</code> is greater than or equal to</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["metrics","hourly","spaces"],"host":["https://cloud.vergesense.com"],"query":[{"description":{"content":"<p>Limit attributes that are included in a request. Comma separated list of attributes.</p>\n","type":"text/plain"},"key":"fields[metrics_hourly_space]","value":null},{"description":{"content":"<p>Page number for pagination.</p>\n","type":"text/plain"},"key":"page[number]","value":"1"},{"description":{"content":"<p>Amount of records to return per page. Limit is 1000.</p>\n","type":"text/plain"},"key":"page[size]","value":"10"},{"description":{"content":"<p>Filter metrics based on it's associated space type's key.</p>\n","type":"text/plain"},"key":"filter[space_type.key]","value":null},{"description":{"content":"<p>Filter metrics based on it's associated space type's name.</p>\n","type":"text/plain"},"key":"filter[space_type.name]","value":null},{"description":{"content":"<p>Filter metrics based on it's associated space's building_ref_id.</p>\n","type":"text/plain"},"key":"filter[building_ref_id]","value":""},{"description":{"content":"<p>Filter metrics based on it's associated space's floor_ref_id.</p>\n","type":"text/plain"},"key":"filter[floor_ref_id]","value":"S2"},{"description":{"content":"<p>Filter metrics based on it's associated space's space_ref_id.</p>\n","type":"text/plain"},"key":"filter[space_ref_id]","value":""},{"description":{"content":"<p>Number between 0-23. Filter metrics where local_hour is greater than or equal to value.</p>\n","type":"text/plain"},"key":"filter[local_date][gte]","value":"2023-04-25"},{"description":{"content":"<p>Filter metrics where local_date is less than or equal to value.</p>\n","type":"text/plain"},"key":"filter[local_date][lte]","value":"2023-04-26"},{"description":{"content":"<p>Number between 0-23. Filter metrics where local_hour is greater than or equal to value.</p>\n","type":"text/plain"},"key":"filter[local_hour][gte]\n","value":"8"},{"description":{"content":"<p>Number between 0-23. Filter metrics where local_hour is less than or equal to value.</p>\n","type":"text/plain"},"key":"filter[local_hour][lte]","value":"16"},{"description":{"content":"<p>Comma separated list of attributes used to sort the collection. Use a negative(-) sign to reverse the order</p>\n","type":"text/plain"},"key":"sort","value":"-local_date,local_hour"}],"variable":[]}},"response":[{"id":"634c3cba-63e4-449a-8101-c1b96754ea91","name":"spaces","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"vs-api-key","value":"6067ce385a2f6fb57c27b75628c38140","type":"text"}],"url":"https://api.vergesense.com/spaces"},"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"d3f0c843-4b3e-44c6-a8e3-ad17f51b31bf"},{"name":"/metrics/hourly/floors","id":"4de49609-f363-47ff-a9ed-2b498629a52c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"vs-api-key","value":"{{api-key}}","type":"text"}],"url":"https://cloud.vergesense.com/metrics/hourly/floors\n?sort=-local_date,local_hour&fields[metrics_hourly_space]=&page[number]=&page[size]&filter[building_ref_id]&filter[floor_ref_id]&filter[local_date][gte]&filter[local_date][lte]&filter[local_hour][gte]&filter[local_hour][lte]","description":"<h1 id=\"metricshourlyfloors\">/metrics/hourly/floors</h1>\n<p>Hourly metrics for floors</p>\n<h2 id=\"example-queries\">Example Queries</h2>\n<p><strong>Path</strong></p>\n<p><code>/metrics/hourly/floors?filter[floor_ref_id]=3&amp;filter[local_date][gt]=2022-08-02&amp;filter[local_date][lt]=2022-08-20&amp;filter[local_hour][gt]=4&amp;filter[building_ref_id]=Skyline_Blvd_HQ</code></p>\n<p><strong>Description</strong></p>\n<p>Retrieve all hourly floor metrics where the <code>local_date</code> is greater than <code>2022-08-02</code> and <code>local_date</code> is less than <code>2022-08-20</code> and the <code>local_hour</code> is greater than <code>4</code> and the <code>building_ref_id</code> equals <code>Skyline_Blvd_HQ</code>.</p>\n<h2 id=\"hourly-floor-metric-attributes\">Hourly Floor Metric Attributes</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Property</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>local_date</code></td>\n<td><code>String</code></td>\n<td>Local date, formatted <code>YYYY-MM-DD</code></td>\n</tr>\n<tr>\n<td><code>local_hour</code></td>\n<td><code>Number</code></td>\n<td>Local hour between <code>0-23</code></td>\n</tr>\n<tr>\n<td><code>capacity</code></td>\n<td><code>Number</code></td>\n<td>Capacity of the floor which the metric belongs at the time when the metric was recorded.</td>\n</tr>\n<tr>\n<td><code>avg_person_count</code></td>\n<td><code>String</code></td>\n<td>Average person count of spaces on the floor during the hour.</td>\n</tr>\n<tr>\n<td><code>avg_occupied_person_count</code></td>\n<td><code>String</code> or <code>null</code></td>\n<td>Average person count of spaces on the floor when they are occupied during the hour.</td>\n</tr>\n<tr>\n<td><code>min_person_count</code></td>\n<td><code>Number</code></td>\n<td>Minimum amount of people on the floor during the hour.</td>\n</tr>\n<tr>\n<td><code>max_person_count</code></td>\n<td><code>Number</code></td>\n<td>Maximum amount of people on the floor during the hour.</td>\n</tr>\n<tr>\n<td><code>minutes_actively_occupied</code></td>\n<td><code>String</code></td>\n<td>Amount of minutes that the spaces on the floor were actively occupied during the hour.</td>\n</tr>\n<tr>\n<td><code>minutes_passively_occupied</code></td>\n<td><code>String</code></td>\n<td>Amount of minutes that the spaces on the floor were passively occupied during the hour.</td>\n</tr>\n<tr>\n<td><code>space_count</code></td>\n<td><code>Number</code> or <code>null</code></td>\n<td>The number of spaces on the floor that were included in the hourly floor metric.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"query-parameters\">Query Parameters</h2>\n<p><code>local_date</code> and <code>local_hour</code> have 6 different comparison operators.</p>\n<p><code>filter[][]=</code></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Operator</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>eq</code></td>\n<td><code>==</code> is equal to</td>\n</tr>\n<tr>\n<td><code>not_eq</code></td>\n<td><code>!=</code> is not equal to</td>\n</tr>\n<tr>\n<td><code>lt</code></td>\n<td><code>&lt;</code> is less than</td>\n</tr>\n<tr>\n<td><code>lte</code></td>\n<td><code>&lt;=</code> is less than or equal to</td>\n</tr>\n<tr>\n<td><code>gt</code></td>\n<td><code>&gt;</code> is greater than</td>\n</tr>\n<tr>\n<td><code>gte</code></td>\n<td><code>&gt;=</code> is greater than or equal to</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["metrics","hourly","floors\n"],"host":["https://cloud.vergesense.com"],"query":[{"description":{"content":"<p>Comma separated list of attributes used to sort the collection. Use a negative(-) sign to reverse the order.</p>\n","type":"text/plain"},"key":"sort","value":"-local_date,local_hour"},{"description":{"content":"<p>Limit attributes that are included in a request. Comma separated list of attributes.</p>\n","type":"text/plain"},"key":"fields[metrics_hourly_space]","value":""},{"description":{"content":"<p>Page number for pagination.</p>\n","type":"text/plain"},"key":"page[number]","value":""},{"description":{"content":"<p>Amount of records to return per page. Limit is 1000</p>\n","type":"text/plain"},"key":"page[size]","value":null},{"description":{"content":"<p>Filter metrics based on it's associated space's building_ref_id.</p>\n","type":"text/plain"},"key":"filter[building_ref_id]","value":null},{"description":{"content":"<p>Filter metrics based on it's associated space's floor_ref_id.</p>\n","type":"text/plain"},"key":"filter[floor_ref_id]","value":null},{"description":{"content":"<p>Filter metrics where local_date is greater than or equal to value.</p>\n","type":"text/plain"},"key":"filter[local_date][gte]","value":null},{"description":{"content":"<p>Filter metrics where local_date is less than or equal to value</p>\n","type":"text/plain"},"key":"filter[local_date][lte]","value":null},{"description":{"content":"<p>Number between 0-23. Filter metrics where local_hour is greater than or equal to value.</p>\n","type":"text/plain"},"key":"filter[local_hour][gte]","value":null},{"description":{"content":"<p>Number between 0-23. Filter metrics where local_hour is less than or equal to value.</p>\n","type":"text/plain"},"key":"filter[local_hour][lte]","value":null}],"variable":[]}},"response":[],"_postman_id":"4de49609-f363-47ff-a9ed-2b498629a52c"}],"id":"7bfbab95-056c-404f-8149-9a3cb6da7803","_postman_id":"7bfbab95-056c-404f-8149-9a3cb6da7803","description":""},{"name":"Building API","item":[{"name":"/buildings","id":"e8f8580e-b5f2-4ae7-b1bd-fb909f187d4f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"vs-api-key","value":"{{api-key}}","type":"text"}],"url":"https://cloud.vergesense.com/buildings","description":"<p>Get a list of buildings that VergeSense has data on.</p>\n","urlObject":{"path":["buildings"],"host":["https://cloud.vergesense.com"],"query":[],"variable":[]}},"response":[],"_postman_id":"e8f8580e-b5f2-4ae7-b1bd-fb909f187d4f"},{"name":"/buildings/:building_ref_id","id":"0be6cd89-a02f-4fa2-9e42-369ac2d18716","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api-key}}","type":"text"}],"url":"https://cloud.vergesense.com/buildings/:building_ref_id?floor_ref_id=","description":"<h1 id=\"buildingsbuilding_ref_id\">/buildings/:building_ref_id</h1>\n<p>Get information about the hierarchy of a building, down to the VergeSense sensor level.</p>\n","urlObject":{"path":["buildings",":building_ref_id"],"host":["https://cloud.vergesense.com"],"query":[{"key":"floor_ref_id","value":""}],"variable":[{"id":"c391a783-d367-48e3-9fbf-fee72cb76145","description":{"content":"<p>building_ref_id is required</p>\n","type":"text/plain"},"type":"any","value":"","key":"building_ref_id"}]}},"response":[],"_postman_id":"0be6cd89-a02f-4fa2-9e42-369ac2d18716"}],"id":"53afb009-6908-4446-b89a-84ff472ac469","description":"<p>The API Documentation will provide you with the list of building associated to your API Key or your account</p>\n","_postman_id":"53afb009-6908-4446-b89a-84ff472ac469"},{"name":"Hardware API","item":[{"name":"/hardware/sensors","id":"05750189-06ff-40c0-8d17-5c0b28a51476","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"x-api-key","value":"{{api-key}}","type":"text"}],"url":"https://cloud.vergesense.com/hardware/sensors?page[number]=","description":"<h1 id=\"hardwaresensors\">/hardware/sensors</h1>\n<p>Fetch all sensors.<br />Response conforms to the JSON API spec <a href=\"https://jsonapi.org/\">https://jsonapi.org/</a>.<br />Responses are limited to <code>1,000</code> sensors after which pagination will take place.</p>\n<h2 id=\"response\">Response</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Description</th>\n<th>Data Type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>data</code></td>\n<td>Array of hardware sensor models.</td>\n<td>Array of Hardware Sensor Models (see below)</td>\n</tr>\n<tr>\n<td><code>included</code></td>\n<td>Included relationships.</td>\n<td><a href=\"https://vergesense.readme.io/reference/building\">Building</a>  <br /><a href=\"https://vergesense.readme.io/reference/floor\">Floor</a></td>\n</tr>\n<tr>\n<td><code>links</code></td>\n<td>Pagination links.</td>\n<td><a href=\"https://vergesense.readme.io/reference/links\">Links</a></td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Hardware Sensor Model</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Description</th>\n<th>Data Type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>Unique identifier for the VergeSense hardware sensor. Ex: <code>W00-123</code></td>\n<td><code>String</code></td>\n</tr>\n<tr>\n<td><code>type</code></td>\n<td><code>sensor</code></td>\n<td><code>String</code></td>\n</tr>\n<tr>\n<td><code>attributes.model</code></td>\n<td>VergeSense hardware model. Ex: <code>L302</code>, <code>E105</code></td>\n<td><code>String</code></td>\n</tr>\n<tr>\n<td><code>attributes.firmware</code></td>\n<td>Firmware version of the default (if available).</td>\n<td>`String</td>\n</tr>\n<tr>\n<td><code>attributes.mac_address</code></td>\n<td>Mac Address of the sensor</td>\n<td>`String</td>\n</tr>\n<tr>\n<td><code>relationships.building</code></td>\n<td>The building that the sensor is located within. Building details included in the <code>included</code> top level response key.</td>\n<td><code>Object</code></td>\n</tr>\n<tr>\n<td><code>relationships.floor</code></td>\n<td>The floor that the sensor is installed on. Floor details included in the <code>included</code> top level response key.</td>\n<td><code>Object</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["hardware","sensors"],"host":["https://cloud.vergesense.com"],"query":[{"description":{"content":"<p>Requested page number. Only used when pagination is applicable.</p>\n","type":"text/plain"},"key":"page[number]","value":""}],"variable":[]}},"response":[],"_postman_id":"05750189-06ff-40c0-8d17-5c0b28a51476"},{"name":"/hardware/gateways","id":"0555c6c0-b81d-4c18-a804-64caeb1b78ec","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-api-key","value":"{{api-key}}","type":"text"}],"url":"https://api.vergesense.com/hardware/gateways?page[number]=1","description":"<h1 id=\"hardwaregateways\">/hardware/gateways</h1>\n<p>Fetch all gateways. Response conforms to the JSON API spec <a href=\"https://jsonapi.org/.Responses\">https://jsonapi.org/.Responses</a> are limited to <code>1,000</code> gateway after which pagination will take place.</p>\n<h2 id=\"response\">Response</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Description</th>\n<th>Data Type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>data</code></td>\n<td>Array of hardware gateway models.</td>\n<td>Array of Hardware Gateway Models (see below)</td>\n</tr>\n<tr>\n<td><code>included</code></td>\n<td>Included relationships.</td>\n<td><a href=\"https://vergesense.readme.io/reference/building\">Building</a>  <br /><a href=\"https://vergesense.readme.io/reference/floor\">Floor</a></td>\n</tr>\n<tr>\n<td><code>links</code></td>\n<td>Pagination links.</td>\n<td><a href=\"https://vergesense.readme.io/reference/links\">Links</a></td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Hardware Gateway Model</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Description</th>\n<th>Data Type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>Unique identifier for the VergeSense hardware gateway. Ex: <code>C0300A1234-01234</code></td>\n<td><code>String</code></td>\n</tr>\n<tr>\n<td><code>type</code></td>\n<td><code>Gateway</code></td>\n<td><code>String</code></td>\n</tr>\n<tr>\n<td><code>attributes.model</code></td>\n<td>VergeSense hardware model. Ex: <code>rigado</code></td>\n<td><code>String</code></td>\n</tr>\n<tr>\n<td><code>attributes.firmware</code></td>\n<td>Firmware version of the default (if available).</td>\n<td>`String</td>\n</tr>\n<tr>\n<td><code>attributes.mac_address</code></td>\n<td>Mac Address of the gateway.</td>\n<td>`String</td>\n</tr>\n<tr>\n<td><code>relationships.building</code></td>\n<td>The building that the gateway is located within. Building details included in the <code>included</code> top level response key.</td>\n<td><code>Object</code></td>\n</tr>\n<tr>\n<td><code>relationships.floor</code></td>\n<td>The floor that the gateway is installed on. Floor details included in the <code>included</code> top level response key.</td>\n<td><code>Object</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"https","path":["hardware","gateways"],"host":["api","vergesense","com"],"query":[{"key":"page[number]","value":"1"}],"variable":[]}},"response":[],"_postman_id":"0555c6c0-b81d-4c18-a804-64caeb1b78ec"}],"id":"a394d4f2-d752-4afc-bcae-025b4f622cda","_postman_id":"a394d4f2-d752-4afc-bcae-025b4f622cda","description":""},{"name":"Webhook API","item":[{"name":"/webhooks","id":"4e81c1ce-d15f-42fb-8226-2cb8a2d3b2f3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[{"key":"vs-api-key","value":"{{api-key}}","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"enabled\": \"false\",\n    \"parameters\": {\n        \"AUTHORIZATION\": {\n            \"BASIC\": {\n                \"BASIC_AUTH_USERNAME\": \"Username\",\n                \"BASIC_AUTH_PASSWORD\": \"Password\"\n            }\n        },\n        \"CUSTOM_HEADERS\": {\n            \"customkey\": \"--customkey--\"\n        },\n        \"EVENT_ENDPOINT\": \"Endpoint URL\"\n    },\n    \"action_id\": 3,\n    \"name\": \"--Name of your webhook --\"\n}","options":{"raw":{"language":"json"}}},"url":"https://cloud.vergesense.com/webhooks","description":"<p>Create a webhook.</p>\n<p>name: Name of the webhook</p>\n<p>action_id: The webhook type to setup (3 - Space Report, 4 - Sensor Report, 5 - Space Availability, 6 - PIR Triggered)</p>\n<p>enabled: Whether or not the webhook is enabled</p>\n<p>EVENT_ENDPOINT: HTTPS endpoint to send the webhook to</p>\n<p>parameters: Parameters to configure the webhook</p>\n<p>PARAMETERS OBJECT EVENT_ENDPOINT: HTTPS endpoint to send the webhook to</p>\n<p>AUTHORIZATION:Optional authorization configuration</p>\n<p>BASIC_AUTH_USERNAME: Username used in Basic authentication</p>\n<p>CUSTOM_HEADERS: Object of key value pairs to send as part of the webhook request</p>\n<p>CUSTOM_HEADERS : customkey</p>\n<p>filters: Filters to restrict the webhook to. If absent will attach the webhook to all buildings</p>\n","urlObject":{"path":["webhooks"],"host":["https://cloud.vergesense.com"],"query":[],"variable":[]}},"response":[],"_postman_id":"4e81c1ce-d15f-42fb-8226-2cb8a2d3b2f3"},{"name":"/webhooks/:id/enable","id":"cc04cb56-e950-4890-9788-7ce4f901d57e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"vs-api-key","value":"{{api-key}}","type":"text"}],"url":"https://cloud.vergesense.com/webhooks/:id/enable","description":"<p>Enable a webhook.</p>\n","urlObject":{"path":["webhooks",":id","enable"],"host":["https://cloud.vergesense.com"],"query":[],"variable":[{"id":"9dd19501-d62d-4445-b337-1cae102d298a","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"cc04cb56-e950-4890-9788-7ce4f901d57e"},{"name":"/webhooks/:id/disable","id":"b8779e20-c682-4dd4-abd2-7810cbfe10bf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"vs-api-key","value":"{{api-key}}","type":"text"}],"url":"https://cloud.vergesense.com/webhooks/:id/enable","description":"<p>Disable a webhook.</p>\n","urlObject":{"path":["webhooks",":id","enable"],"host":["https://cloud.vergesense.com"],"query":[],"variable":[{"id":"56ba31e7-4601-4124-befe-a70b3e4b31a0","type":"any","value":"1","key":"id"}]}},"response":[],"_postman_id":"b8779e20-c682-4dd4-abd2-7810cbfe10bf"},{"name":"/webhooks","id":"87472a39-689a-4e22-84f1-aa48f36df567","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://cloud.vergesense.com/webhooks","description":"<p>Retrieve all webhooks.</p>\n","urlObject":{"path":["webhooks"],"host":["https://cloud.vergesense.com"],"query":[],"variable":[]}},"response":[],"_postman_id":"87472a39-689a-4e22-84f1-aa48f36df567"},{"name":"webhooks/setup","id":"81e071b9-59f0-4689-b440-eb7f7a7ffc61","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"vs-api-key","value":"{{api-key}}","type":"text"}],"url":"https://cloud.vergesense.com/webhooks/setup","description":"<p>Retrieve the webooks that are available to be setup, including their names, descriptions, and other basic information about them.</p>\n","urlObject":{"path":["webhooks","setup"],"host":["https://cloud.vergesense.com"],"query":[],"variable":[]}},"response":[],"_postman_id":"81e071b9-59f0-4689-b440-eb7f7a7ffc61"},{"name":"/webhooks/:id","id":"fa7aeaeb-7244-45a6-a202-894d2660ef01","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"PATCH","header":[{"key":"vs-api-key","value":"{{api-key}}","type":"text"}],"url":"https://cloud.vergesense.com/webhooks/id/","description":"<h2 id=\"example-patch-updates\">Example Patch Updates</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Description</th>\n<th>Request Body</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Update the name of a webhook.</td>\n<td><code>{ \"name\": \"New Name\" }</code></td>\n</tr>\n<tr>\n<td>Update the webhook to be enabled. Note that this can also be done through the <code>/enabled</code> and <code>/disabled</code> endpoints.</td>\n<td><code>{ \"enabled\": true }</code></td>\n</tr>\n<tr>\n<td>Update the webhook parameters. Note that <code>EVENT_ENDPOINT</code> must always be included even if it is not being updated. The <code>PATCH</code> will replace the previous <code>parameters</code> object and so all keys that wish to be retained <em>as well as</em> those that are to be updated must be included.</td>\n<td><code>{ \"parameters\": { \"CUSTOM_HEADERS\": { \"my-api-key\": \"987\" }, \"EVENT_ENDPOINT\": \"https://example.com\" } }</code></td>\n</tr>\n<tr>\n<td>Update the buildings that a webhook is filtered to.</td>\n<td><code>{ \"filters\": { \"building_ids\": [123] } }</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["webhooks","id",""],"host":["https://cloud.vergesense.com"],"query":[],"variable":[]}},"response":[],"_postman_id":"fa7aeaeb-7244-45a6-a202-894d2660ef01"},{"name":"/webhooks/:id","id":"440090b7-2313-4650-b98a-b4cd4b91cf41","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"vs-api-key","value":"{{api-key}}","type":"text"}],"url":"https://cloud.vergesense.com/id","description":"<h1 id=\"webhooksid\">/webhooks/:id</h1>\n<p>Delete a webhook.</p>\n","urlObject":{"path":["id"],"host":["https://cloud.vergesense.com"],"query":[],"variable":[]}},"response":[],"_postman_id":"440090b7-2313-4650-b98a-b4cd4b91cf41"},{"name":"/webhooks/:id/logs","id":"c237effc-4c68-416e-8ba1-3eb119e97f9a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"vs-api-key","value":"{{api-key}}","type":"text"}],"url":"https://cloud.vergesense.com/webhooks/:id/logs?page&limit&start_at&end_at","description":"<p>Retrieve a webhook's logs. This endpoint only contains the last 7 days of logs</p>\n","urlObject":{"path":["webhooks",":id","logs"],"host":["https://cloud.vergesense.com"],"query":[{"key":"page","value":null},{"key":"limit","value":null},{"key":"start_at","value":null},{"key":"end_at","value":null}],"variable":[{"id":"1906d6dd-a950-4abf-b2b3-6a937ec4bfae","type":"any","value":null,"key":"id"}]}},"response":[],"_postman_id":"c237effc-4c68-416e-8ba1-3eb119e97f9a"}],"id":"59552172-c273-4d2a-90f7-656685e8e8e0","description":"<h1 id=\"event-types\">Event Types</h1>\n<p>VergeSense's API allows you to subscribe to various events generated by your sensors. Supported events include:</p>\n<ul>\n<li><code>space_report</code></li>\n<li><code>space_availability</code></li>\n</ul>\n<p>To subscribe to a webhook either use the API endpoint below or use the VergeSense UI in order to configure.</p>\n<h2 id=\"webhook-authentication\">Webhook Authentication</h2>\n<p>VergeSense provides a variety of ways for customers to authenticate requests from VergeSense to their desired destination. Authentication is not required but some form is recommended.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Technique</th>\n<th>Required Information</th>\n<th>Example Header</th>\n<th>Available in UI</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://en.wikipedia.org/wiki/Basic_access_authentication\">Basic access</a></td>\n<td><code>username</code>  <br /><code>password</code></td>\n<td><code>Basic: [base64(username:password)]</code></td>\n<td>Yes</td>\n</tr>\n<tr>\n<td>Bearer Token</td>\n<td><code>token</code></td>\n<td><code>Bearer: [token]</code></td>\n<td>Yes</td>\n</tr>\n<tr>\n<td>Custom Header</td>\n<td>Any <code>key:value</code> pair</td>\n<td><code>custom_key: custom_value</code></td>\n<td>Yes</td>\n</tr>\n<tr>\n<td><a href=\"https://tools.ietf.org/html/rfc6750\">OAuth 2.0</a></td>\n<td>See <a href=\"https://headwayapp.co/vergesense-changelog/bearer-token-authorization-webhook-support-137616\">here</a> for more details</td>\n<td><code>Bearer: [token]</code> (after receiving token from token URL)</td>\n<td>No</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>IP Address Allow List</strong><br />VergeSense sends webhook requests from a known set of IP addresses. Should some form of IP address filtering be desired, contact VergeSense for more information regarding the list of IP addresses.</p>\n<h2 id=\"custom-headers\">Custom Headers</h2>\n<p>VergeSense supports custom headers, allowing customers to define any specific headers they would like sent as part of a webhook <code>POST</code> request.</p>\n<h2 id=\"destination-endpoint-expectations\">Destination Endpoint Expectations</h2>\n<p>VergeSense has the following expectations when interacting with a user provide endpoint:</p>\n<ul>\n<li>Data will only be sent to HTTPS endpoints</li>\n<li>Endpoints should respond with a <code>2xx</code> HTTP status code</li>\n<li>Endpoints are expected to respond within 5 seconds</li>\n</ul>\n<p>If any of these conditions are not met then the request will fail. If <code>&gt;99%</code> of requests fail within a <code>24</code> period then VergeSense will automatically disable the webhook. You will be notified of this via email with details pertaining to the top errors and will be able to correct the issue and re-enable.</p>\n<h2 id=\"space-report-event\">Space Report Event</h2>\n<p>For this type of event, reports will be sent that aggregate all sensor data and other metadata into a single report of the most up to date information regarding a space. This is especially useful in situations where multiple sensors are required to cover a single space, for example a very large conference room. In these cases, the report data is aggregated across the individual sensor reports to provide information for the whole space in one easily consumable event.</p>\n<p>Space Report Event</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>type SpaceReportEvent = {\n  // customer defined building reference ID\n  building_ref_id: String,\n  // customer defined floor reference ID\n  floor_ref_id: String|null,\n  // customer defined space reference ID\n  space_ref_id: String|null,\n  event_type: \"space_report\",\n  // iso8601 timestamp\n  timestamp: String,\n  // number of people in the space\n  person_count: Number,\n  // whether or not there were objects like laptops, backpacks, coats, etc. detected\n  signs_of_life: Boolean,\n  // whether or not motion was detected in the space\n  motion_detected: Boolean|null,\n  // detailed information regarding the people in the space\n  people: {\n    // array of arrays of [x,y] coordinate pairs for each person detected by a device\n    coordinates: [Array&lt;[Number, Number]&gt;?],\n    count: Number,\n    distances: {\n      units: \"meters\",\n      // meters apart people are from one another\n      values: [Number]\n    }\n  },\n  // array of device IDs that report on the space\n  sensor_ids: [String],\n  // present if the device supports it otherwise not present\n  environment?: {\n    humidity: {\n      // relative humidity\n      units: \"RH\",\n      value: Number\n    },\n    // indoor air quality\n    iaq: {\n      units: \"UBA\",\n      value: Number\n    },\n    // device id that reported environmental information\n    sensor: String,\n    temperature: {\n      // celsius\n      units: \"C\",\n      value: Number\n    },\n    // iso8601 timestamp\n    timestamp: String\n  }\n}\n\n</code></pre><h2 id=\"space-availability-event\">Space Availability Event</h2>\n<p>While the \"Space Report\" webhook will send a report every time a sensor that reports on a space has new information, the \"Space Availability\" webhook is used to be notified when the availability of a space has changed. The possible states for the <code>state</code> field are <code>available|occupied</code>. The payload is an array -- one record per space that a sensor reports on.</p>\n<p>Space Availability Event</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>[\n  {\n    \"building_ref_id\": \"building_1\",\n    \"floor_ref_id\": \"floor_4\",\n    \"space_ref_id\": \"123.321\",\n    \"sensor_ids\": [\"VS0-123\", \"VS1-321\"],\n    \"event_type\": \"space_availability\",\n    \"timestamp\": \"2019-08-21T21:10:25Z\",\n    \"state\": \"occupied\"\n    }\n]\n</code></pre>","_postman_id":"59552172-c273-4d2a-90f7-656685e8e8e0"}],"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""],"id":"1a77f953-5096-43b7-b2ee-d6a3fcb06e2d"}},{"listen":"test","script":{"type":"text/javascript","exec":[""],"id":"8c7f9042-0e0c-444b-b989-b49c1dd24bf9"}}],"variable":[{"key":"BaseURL","value":"https://cloud.vergesense.com"}]}