{"info":{"_postman_id":"2ad69b9a-a922-4ef8-816f-739c91cbaf19","name":"Innotech Omni V3.3 REST API","description":"<html><head></head><body><h1 id=\"welcome\">Welcome</h1>\n<p>This is Innotech Omni REST API that provides an open API to Omni controllers.\n<img src=\"https://imgur.com/ege0YoD.png\" alt=\"Omni image\"></p>\n<p>To use this API you will need to make HTTP requests to your controller IP address over an SSL connection, i.e. <code>https://controller_IP_address/api</code>.</p>\n<p>Authorisation is provided using OAuth 2.0 protocol. Once user authentication and authorisation are completed, an access token will be generated. The user can then include this token in their HTTP request header to gain access to various API resource endpoints.</p>\n<h2 id=\"authentication\">Authentication</h2>\n<p>Only users in the <strong><em>Settings &gt; Address Book</em></strong> on the web application will have valid authentication credentials. These credentials are the same as used in logging in the web application.</p>\n<p><img src=\"https://imgur.com/amzxTeo.png\" alt=\"userInAddressBook\"></p>\n<p>Also, to provide an extra layer of password protection, the Omni API authorisation server expects user credentials to be hashed with <strong><em>SHA-256</em></strong> algorithm from the client side. In other words, API users must hash their credentials with SHA-256 <strong><em>before</em></strong> sending them away for authentication.</p>\n<p>Once a user is successfully authenticated, they will receive an access token in the form of a <strong>JSON Web Token</strong> (JWT). This token must be included in every HTTP request header to successfully make calls to the designated API endpoints.</p>\n<p><strong><em>View sample access token in <a href=\"https://jwt.ms#access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ikk1VU5ReUpcL2ZxQ3oxV2ZWK2djPSJ9.eyJpc3MiOjAsInN1YiI6Im05Zk1rdHk1b0dcL0RMYzZPNGtsdnFJbFk3Zz09IiwiYXVkIjoiODdjZjg0NTQtYzkyZi00NjI0LTliM2ItM2UzNzdmZTc3NjNhIiwibmJmIjoxNTgyNzY4Mjc5LCJpYXQiOjE1ODI3NjgyNzksImV4cCI6MTU4MjgxMTQ3OX0.lLqOqUAyGi7NfN8RoctBH8QXOljDZq3KSDaFE1nITU3zcP_HN1xVSfv5rAjh2p4e36JsxjftCQBrh4WVODnfvJmQe9HPIlM3Des5J9X65uk5G9CLDSTYfci0xp-sCMIPL2x469mNUoN1EOyjSOfV2lMH6tUZiXAMMm263x41oPfsUDlOY20HMt6JnzCz8EzyUxPWM3RNj4lfw_crKGbb_YQCc3MOAmAc1YM3CMSDosJUD4BQflVFUm6A9mMXo-dr4m09NEYytIvt6MxE7FOCzty8Pxfu8xLDGqw1IhFq2h2Ff9RP0RfuP5wv_6QfREIXb_XGbIzopVrpND1MGYqQbg\">jwt.ms</a></em></strong></p>\n<h2 id=\"authorisation\">Authorisation</h2>\n<p>Each user will only have access to API endpoints matching their access privileges specified in the <strong><em>Settings &gt; Access Levels</em></strong> page on the web application. For example, if a user only has <em>View</em> access to the <em>Watches</em> page on the web application and <em>None</em> access to the <em>Schedules</em> page, they will not be able to make successful PUT requests to the <em>Watches API</em> or any requests to the <em>Schedules API</em>.</p>\n<p><img src=\"https://imgur.com/BxJnwge.png\" alt=\"userAllAccessLevels\"></p>\n<h1 id=\"requirements\">Requirements</h1>\n<p>An Innotech Omni BEMS Controller is required to provide the API server. Also, for a <a href=\"#quick-start-with-postman\">Quick Start</a>, <a href=\"https://www.getpostman.com/\">Postman</a> is recommended. <a href=\"https://www.getpostman.com/\">Postman</a> is a powerful collaboration platform for API development, exploration and testing.</p>\n<h1 id=\"configuration\">Configuration</h1>\n<h2 id=\"omni-web-application\">Omni Web Application</h2>\n<ol>\n<li><p>Go to <code>Settings</code> &gt; <code>Remote Access</code> &gt; <code>Data Sharing</code></p>\n</li>\n<li><p>Under <code>REST API</code> section, enable <code>REST API</code></p>\n</li>\n<li><p><code>Token Expiry</code> can be disabled or enabled. If it is disabled, the access token will not expire. If it is enabled, a number of hours must then be set as the token lifetime, meaning the access token will expire after this amount.</p>\n<p><img src=\"https://imgur.com/3WNmSBM.png\" alt=\"webRestApiSettings\"></p>\n</li>\n</ol>\n<h2 id=\"postman\">Postman</h2>\n<p>This configuration is only applicable if you have <a href=\"https://www.getpostman.com\">Postman</a> installed.</p>\n<h3 id=\"turn-off-ssl-certificate-verification\">Turn off SSL certificate verification</h3>\n<p>For quick testing, you can turn off Postman's SSL certificate verification to avoid an error of self-signed certificate provided by Innotech that may show up when making HTTP requests to API endpoints.</p>\n<ol>\n<li><p>Go to <code>File</code> &gt; <code>Settings</code></p>\n</li>\n<li><p>In the Settings dialog, go to <code>General</code> tab &gt; <code>Request</code> section</p>\n</li>\n<li><p>Turn off <code>SSL certificate verification</code></p>\n<p><img src=\"https://imgur.com/I6N9err.png\" alt=\"PostmanDisableSSL\"></p>\n</li>\n</ol>\n<h1 id=\"quick-start-with-postman\">Quick Start with Postman</h1>\n<p>Click on <img src=\"https://imgur.com/s4cikau.png\" alt=\"runInPostman\"> button at the top right corner of this documentation to import all API endpoint collections directly into your Postman application. You will be prompted to install <a href=\"https://www.getpostman.com/\">Postman</a> if you have not done so.</p>\n<h2 id=\"1-set-default-variables\">1. Set default variables</h2>\n<p>Since an Omni Controller will be providing API endpoints, its URL (IP Address) will be the URL for accessing API server. Your credentials including username and password also need to be set in <a href=\"https://www.getpostman.com/\">Postman</a>.</p>\n<p>These values can be set as <a href=\"https://learning.postman.com/docs/sending-requests/variables/\">collection variables</a> and reused across requests.</p>\n<p><em>For more information on working with variables and environments in Postman, see <a href=\"https://learning.postman.com/docs/postman/variables-and-environments/variables/\">Variables and Environments</a></em></p>\n<ol>\n<li><p>Under <code>Innotech Omni REST API</code> collection on the left hand side, click the Ellipsis icon <img src=\"https://imgur.com/mMC6ePm.png\" alt=\"ellipsisIcon\"> to open the collection options menu.</p>\n</li>\n<li><p>Click <code>Edit</code> to open <code>Innotech Omni V3.3 REST API</code> editing tab.</p>\n<p><img src=\"https://imgur.com/ve9Pajf.png\" alt=\"editCollectionButton\"></p>\n</li>\n<li><p>Under <code>Variables</code> sub-tab is a table with preset variables. Set their values under <code>Current Value</code> column.</p>\n</li>\n</ol>\n<ul>\n<li><code>API_URL</code>: Your controller's IP address</li>\n<li><code>username</code>: Your username</li>\n<li><code>rawPassword</code>: Your password, normally used to log in Omni Web App.</li>\n<li><code>hashedPassword</code>: Leave it as is. When you make a request for an access token, the default current placeholder of <code>your_hashed_password</code> will be automatically replaced with a real hash of your password, by an embedded helper script. This hash is used in the authentication process.</li>\n</ul>\n<ol>\n<li><p>Click <code>Save</code></p>\n<p><img src=\"https://imgur.com/tmMntpz.png\" alt=\"setDefaultVars\"></p>\n</li>\n</ol>\n<h2 id=\"2-authentication\">2. Authentication</h2>\n<ol>\n<li><p>In <a href=\"https://www.getpostman.com\">Postman</a>, to the left are imported collections under <code>Innotech Omni V3.3 REST API</code>, ready for Omni API testing. Navigate to <code>Authentication</code> &gt; <code>Token</code> &gt; <code>POST Get access token</code> request.</p>\n<p><img src=\"https://imgur.com/6jfLBDL.png\" alt=\"getAccessToken\"></p>\n</li>\n<li><p>Click <code>Send</code> <img src=\"https://imgur.com/0wZvsao.png\" alt=\"sendButton\">.</p>\n</li>\n<li><p>Once the request is completed, in the response body, an <em>access token</em> is returned. This token is automatically set as a global variable and attached as headers in all other API calls.</p>\n<p><img src=\"https://imgur.com/USII5iu.png\" alt=\"tokenReceivedPostman\"></p>\n</li>\n</ol>\n<h2 id=\"3-make-api-calls\">3. Make API calls</h2>\n<p>All API endpoints are now ready to be called. For example, navigate to <code>Device Info</code> &gt; <code>Device</code> &gt; <code>GET List Devices</code>, and follow the instruction in GET LINK to get information about the primary Omni device and its connected REMs.</p>\n<h1 id=\"innotech-support\">Innotech Support</h1>\n<p><a href=\"https://innotech.com/\">Innotech</a> provides technical support to assist you in using our API services.</p>\n<p>You can view full <a href=\"https://documenter.getpostman.com/view/10295427/TWDdkuAe\">API documentation</a> or contact us at</p>\n<ul>\n<li><strong>Website</strong>: <a href=\"https://innotech.com\">https://innotech.com</a></li>\n<li><strong>Email</strong>: <a href=\"mailto:sales@innotech.com\">sales@innotech.com</a></li>\n<li><strong>Phone</strong>: +61 7 3421 9100</li>\n<li><strong>Mail</strong>: <strong><em>Innotech Control Systems</em></strong>, P.O. Box 292, Sunnybank, QLD 4109, Australia</li>\n</ul>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Welcome","slug":"welcome"},{"content":"Requirements","slug":"requirements"},{"content":"Configuration","slug":"configuration"},{"content":"Quick Start with Postman","slug":"quick-start-with-postman"},{"content":"Innotech Support","slug":"innotech-support"}],"owner":"10295427","collectionId":"2ad69b9a-a922-4ef8-816f-739c91cbaf19","publishedId":"TWDdkuAe","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"0057B8","highlight":"0057B8"},"publishDate":"2021-03-02T00:13:57.000Z"},"item":[{"name":"Authentication","item":[{"name":"Token","item":[{"name":"Get client salt","id":"4fba12dd-edff-4863-8bb5-7111af0e1dc5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"username\": \"your_username\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://controller_IP_address/api/salt","description":"<h2 id=\"retrieve-client-salt\">Retrieve Client Salt</h2>\n<p>The user makes a request with their username in the body to the API authorisation server to request a client salt.</p>\n<p>For security reasons, a client salt is always generated and returned even if the username is not authenticated. Therefore, there will be no error returned, and the API user is responsible for making sure their username is correct.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"e53bd2dc-86db-4ec8-ac18-10abb2a4c1a8","id":"e53bd2dc-86db-4ec8-ac18-10abb2a4c1a8","name":"Authentication","type":"folder"}},"urlObject":{"path":["api","salt"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"4480b83f-49de-4e56-9242-8845c24d9acb","name":"Get client salt","originalRequest":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"username\": \"Innotech\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://192.168.30.51/api/salt"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Set-Cookie","value":"omni_session=AmUJOlYzB2sDKQouCmoEM1QyXGBVJgl2AWBZJwZ1AW0Aa1M8AlpUaFs5DyQBa1F0XzQAZAxkBTkJfQFkB2ANNlttATgHMAA1VWYDNwc5BjICNAk4VjUHYQM2CmkKNgRhVGNcalVhCTQBNVlgBj4BYABhUzcCZFQ0WzwPJAFrUXRfNABmDGYFOQl9AW4HJg1eWz4BaAdjAHdVNANxB3MGcQI%2FCXNWPQdgA2EKZwpyBDNUO1xoVSoJNAEzWWwGKAE2ADRTfAI8VDhbfw89ASNRPV8%2FAGcMbAUhCSoBdAczDXNbAAFtB2AAYFU%2FA3YHIgZoAncJOlY1B2ADaAp%2FCgAEbVRxXC5VaQlkAWtZBgZzAWoAcFM7AmhUZFtyDzEBflE1XzsAeQxmBSEJZAF0B2wNMFtsATYHJQBpVTADcQd0BgwCZQljVnMHOAMkCjQKJAR7VCBcYVVtCT8BNFlhBj8BNQAyU2oCMVQ3W2kPMgFrUXo%3D; path=/; httponly"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json"},{"key":"Access-Control-Allow-Methods","value":"GET, POST, PUT, DELETE, OPTIONS"},{"key":"Access-Control-Allow-Headers","value":"Access-Control-Allow-Headers, Content-Type, Access-Control-Allow-Methods, Authorization, X-Requested-With"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Tue, 09 Jun 2020 06:37:25 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"client_salt\": \"4If9zL0hIGJZBUumtnZHrLV8Nd+SQ3Mt9xepjyG1PUI=\"\n}"}],"_postman_id":"4fba12dd-edff-4863-8bb5-7111af0e1dc5"},{"name":"Get access token","event":[{"listen":"prerequest","script":{"id":"0a94a7ba-1d8e-4457-9bb0-adcdc7277b17","exec":["const crypto = require('crypto-js')","","// const {username} = request.data","const username = pm.variables.get('username')","// const rawPassword = pm.environment.get('rawPassword');","const rawPassword = pm.variables.get('rawPassword')","const apiUrl = pm.variables.get('API_URL')","","const clientSaltRequest = {","    url: `${apiUrl}/api/salt`,","    method: 'POST',","    header: 'Content-Type: application/json',","    body: {","        mode: 'raw',","        raw: JSON.stringify({ username })","    }","}","","pm.sendRequest(clientSaltRequest, (error, response) => {","    if (error) console.log(error)","    else {","        const resData = response.json()","        console.log(resData.client_salt)","        const clientSalt = atob(resData.client_salt)","        ","        const concats = rawPassword + clientSalt","        const parsedConcats = crypto.enc.Latin1.parse(concats)","        ","        const hashedPassword = crypto.enc.Base64.stringify(crypto.SHA256(parsedConcats))","        console.log(hashedPassword)","        // pm.environment.set('hashedPassword', hashedPassword)","        pm.variables.set(\"hashedPassword\", hashedPassword)","    }","})"],"type":"text/javascript"}},{"listen":"test","script":{"id":"5bf688e2-737c-4b58-81a5-166d5dccd00c","exec":["// First entry point, so we set global tests here","postman.setGlobalVariable('commonTests', () => {","    tests[\"Status code is 200\"] = responseCode.code === 200;","    tests[\"Response time is acceptable\"] = responseTime < 500; // milliseconds","    tests[\"Content-Type header is set\"] = postman.getResponseHeader(\"Content-Type\");","})","","// Token specific","const tokenSchema = JSON.parse(environment.tokenSchema)","const tokenData = JSON.parse(responseBody).token ? JSON.parse(responseBody).token : null","const validateToken = tv4.validateMultiple(tokenData, tokenSchema)","","if (!validateToken.valid) console.log(validateToken.errors)","else if (tokenData) {","    pm.globals.set('accessToken', tokenData.access_token)","    // pm.variables.set('accessToken', tokenData.access_token)","    tests['Token data structure is correct'] = validateToken.valid","}","",""],"type":"text/javascript"}}],"id":"8bbd7354-9fc2-4670-a5e6-77eb3aaba23c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"username\": \"your_username\",\r\n    \"password\": \"your_hashed_password\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://controller_IP_address/api/token","description":"<h2 id=\"hash-password--get-access-token\">Hash password &amp; Get access token</h2>\n<p>After the client salt is retrieved, it can be used to hash user password, with SHA-256 algorithm. The steps are:</p>\n<ol>\n<li><p>Decode the Base64-encoded client salt into its original form of binary string, i.e. <code>org_salt = base64_decode(salt)</code></p>\n</li>\n<li><p>Concatenate password and the original salt, i.e. <code>to_be_hash = password + org_salt</code></p>\n</li>\n<li><p>Hash the concatenated string using SHA-256, i.e. <code>binary_hash_str = sha256(to_be_hash)</code></p>\n</li>\n<li><p>Base64 URL-safe encode the binary hash string above to make it suitable for HTTP requests, i.e. <code>final_hash = base64_url_safe_encode(binary_hash_str)</code>. This is your final hashed password needed for authentication.</p>\n<p> For example, this is a JavaScript snippet for this process.</p>\n</li>\n</ol>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">import sha256 from 'crypto-js/sha256'\nimport base64url from 'base64url'\nimport Base64 from 'crypto-js/enc-base64'\nimport Latin1 from 'crypto-js/enc-latin1'\n\nexport const hashCredentials = (credential, salt) =&gt; {\n  const concats = credential + atob(salt)\n  const notbase64 = sha256(Latin1.parse(concats))\n  const hashedCredential = Base64.stringify(notbase64)\n  return base64url.fromBase64(hashedCredential)\n}\n</code></pre>\n<ol>\n<li>Your credentials - including your username and hashed password above - are now ready to be sent to the authentication server</li>\n<li>If the authentication of your credentials is successful, an access token is generated and returned.</li>\n</ol>\n<p><img src=\"https://imgur.com/ihB0BLo.png\" alt=\"generateToken\" /></p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"e53bd2dc-86db-4ec8-ac18-10abb2a4c1a8","id":"e53bd2dc-86db-4ec8-ac18-10abb2a4c1a8","name":"Authentication","type":"folder"}},"urlObject":{"path":["api","token"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"b22c8cf8-83a5-4942-941c-b740f39b8aa2","name":"Get token","originalRequest":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"username\": \"your_username\", // Username in Address Book\r\n    \"password\": \"your_hashed_password\" // Hashed password\r\n}","options":{"raw":{"language":"json"}}},"url":"https://192.168.30.51/api/token"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Type","value":"application/json"},{"key":"Access-Control-Allow-Methods","value":"GET, POST, PUT, DELETE, OPTIONS"},{"key":"Access-Control-Allow-Headers","value":"Access-Control-Allow-Headers, Content-Type, Access-Control-Allow-Methods, Authorization, X-Requested-With"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Wed, 10 Jun 2020 01:09:52 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"token\": {\n        \"token_type\": \"Bearer\",\n        \"access_token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ikk1VU5ReUpcL2ZxQ3oxV2ZWK2djPSJ9.eyJpc3MiOjAsInN1YiI6Im1kZk1rdHk1b0dcL0RMYzZvN2xSbHJuNVd5QT09IiwiYXVkIjoiODdjZjg0NTQtYzkyZi00NjI0LTliM2ItM2UzNzdmZTc3NjNhIiwibmJmIjoxNTkxNzUxMzkyLCJpYXQiOjE1OTE3NTEzOTIsImV4cCI6MTYyNzc1MTM5Mn0.SSpwAA8aBzjlzsab1MN-BLfZ8GYvitZ-_x0c63IypEaliyGTwWidmEWiNia9TQfnWKvDlP0ISRNf72WUVZxdFLR8Pn0xIFFTgFd2UyMOrMpYSV3I4RXjkkdyeekdknMsJyrs1_s-4MG7vN6hKKzuDHAzWfLMi90TuT8KHRaBew8DWCi8vWXkqV6RcWhRFVXaVYwG9JfXzDnG5Qb4sCt3xS-WkYnYe19LMkUNnbsyDrL3dGco1WoGg7xHxfU5i74LAekOdMTGJLdVOQUQ8PHiKwo1m8jP5b44eqevyZg2x-oyaUr1jnlNdwk2WXRGqS8zJnszEdGHYmOxMsqAU-BqdQ\",\n        \"expires_in\": 36000000\n    }\n}"}],"_postman_id":"8bbd7354-9fc2-4670-a5e6-77eb3aaba23c"},{"name":"Use access token","id":"b34a0cef-71ea-4970-960d-a2cf8bcc4191","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"description":"<p>Your access token</p>\n","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":"https://controller_IP_address/api/api_endpoint","description":"<h2 id=\"use-of-token-in-api-requests\">Use of token in API requests</h2>\n<p>The retrieved access token has the following properties</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Property</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>token_type</td>\n<td>Token type. The only type supported is Bearer</td>\n</tr>\n<tr>\n<td>access_token</td>\n<td>The requested access token, used to authenticate to the API resource server</td>\n</tr>\n<tr>\n<td>expires_in (optional)</td>\n<td>How long the access token is valid, in seconds</td>\n</tr>\n</tbody>\n</table>\n</div><p>The <code>expires_in</code> property is only available if you have turned on <code>Token expiry</code> via Omni Web Application (<code>Settings</code> &gt; <code>Security</code> &gt; <code>Data Sharing</code> &gt; <code>REST API</code> section). After the specified amount of time, the access token will become invalid. You must request a new token if you want to gain API access again.</p>\n<p>The Bearer type of token means it must be included in the <code>Authorization</code> header of every API request as <code>Authorization: Bearer your_access_token</code>. The API resource server checks for this token in every request header and grant access if it is successfully authenticated.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"e53bd2dc-86db-4ec8-ac18-10abb2a4c1a8","id":"e53bd2dc-86db-4ec8-ac18-10abb2a4c1a8","name":"Authentication","type":"folder"}},"urlObject":{"path":["api","api_endpoint"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"36fbcfe3-8983-4b7e-a665-2c68067e6f8a","name":"Include Token in API Request Header","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"Your access token","type":"text"}],"url":"https://192.168.30.51/api/api_endpoint"},"_postman_previewlanguage":"Text","header":[],"cookie":[],"responseTime":null,"body":""}],"_postman_id":"b34a0cef-71ea-4970-960d-a2cf8bcc4191"}],"id":"8b3281b2-b918-407a-adda-41d44aca35bd","description":"<p>This set of API endpoints requires users to send their credentials as in <em><strong>Address Book</strong></em>. Once they are authenticated, an access token will be generated and returned. This token can then be attached to every request header as a Bearer Token and grant the user access to API data resources.</p>\n<p>As specified before, to provide an extra layer of security, the API authorisation server expects user password to be hashed from the client side, before being sent to the authorisation server.</p>\n<p>In detail, the steps for an API user to obtain an access token are:</p>\n<ol>\n<li>Send their correct username to request a <em><strong>client salt</strong></em> from the API authorisation server. </li>\n<li>Use the client salt to hash their password, using <em><strong>SHA-256</strong></em> algorithm.</li>\n<li>Send their credentials - including their username and hashed password - to the authorisation server to exchange for an access token</li>\n<li>If the authentication process is successful, an access token is generated and returned. </li>\n<li>Include this token as <code>Authorization</code> header of every API request</li>\n</ol>\n<p>The following API calls will demonstrate this process more clearly.</p>\n<p><img src=\"https://imgur.com/wQJf3n1.png\" alt=\"hashProcess\" /></p>\n","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["const tokenSchema = {","    'required': ['token_type', 'access_token'],","    'properties': {","        'token_type': {","            'type': 'string',","            'minLength': 1","        },","        'access_token': {","            'type': 'string',","            'minLength': 1","        },","        'expires_in': {","            'type': 'integer',","            'minimum': 3600","        }","    }","}","","pm.environment.set('tokenSchema', JSON.stringify(tokenSchema))"],"id":"76ee5589-1592-45b4-b7e4-e0254ac37182"}},{"listen":"test","script":{"type":"text/javascript","exec":["const res = JSON.parse(responseBody)","","tests['Token received'] = res.token"],"id":"fb8cfcc2-7921-4fc0-93b4-193be0ead82f"}}],"_postman_id":"8b3281b2-b918-407a-adda-41d44aca35bd","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"e53bd2dc-86db-4ec8-ac18-10abb2a4c1a8","id":"e53bd2dc-86db-4ec8-ac18-10abb2a4c1a8","name":"Authentication","type":"folder"}}}],"id":"e53bd2dc-86db-4ec8-ac18-10abb2a4c1a8","auth":{"type":"noauth","isInherited":false},"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""],"id":"d43575fb-3c9c-4485-8507-fa2a07ff16a6"}},{"listen":"test","script":{"type":"text/javascript","exec":["if (globals.commonTests) eval(globals.commonTests)()"],"id":"b676ce8d-940e-4aa2-ba4c-94a22305fde8"}}],"_postman_id":"e53bd2dc-86db-4ec8-ac18-10abb2a4c1a8","description":""},{"name":"Alarms","item":[{"name":"List Alarms","id":"6b38eff3-8c81-4698-bf62-57f19717fe25","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"<p>Your access token</p>\n","type":"text"}],"url":"https://controller_IP_address/api/alarms","description":"<h2 id=\"list-of-innotech-alarms-and-bacnet-events\">List of Innotech Alarms and BACnet Events</h2>\n<p>The response shows names of all Innotech alarms and BACnet Events.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"bb90cb33-3f5c-43d3-8262-0364fa0e137b","id":"bb90cb33-3f5c-43d3-8262-0364fa0e137b","name":"Alarms","type":"folder"}},"urlObject":{"path":["api","alarms"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"d16cbbdd-c608-48f4-8359-27c0229b4d9d","name":"List Alarms","originalRequest":{"method":"GET","header":[{"description":"Your access token","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":"https://192.168.30.51/api/alarms"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-store, no-cache, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Wed, 10 Jun 2020 05:03:56 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"Innotech\": [\n        {\n            \"Name\": \"A: AC1 Fan Fault\"\n        },\n        {\n            \"Name\": \"A: Alarm123\"\n        }\n    ],\n    \"BACnet\": [\n        {\n            \"Name\": \"B: EventEnrollment_Event3\"\n        }\n    ]\n}"}],"_postman_id":"6b38eff3-8c81-4698-bf62-57f19717fe25"},{"name":"Alarm Status","id":"bd9d139e-f26a-4221-8537-aa22082c2bf2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"<p>Your access token</p>\n","type":"text"}],"url":"https://controller_IP_address/api/alarms/alarm-name","description":"<h2 id=\"current-status-of-an-alarm\">Current status of an alarm</h2>\n<p>You can get current status of an alarm by passing its <em><strong>name</strong></em> as a parameter in the request URL.</p>\n<p>To avoid any unwanted error, it is advised that the <em><strong>name</strong></em> parameter be <em>URL-encoded</em> before passed in. For example, <code>Alarm 1 (base)</code> will be passed in as <code>Alarm%201%20%28base%29</code>.</p>\n<p>Please note that only the <em><strong>first</strong></em> alarm that matches the name will be returned, in case there are multiple alarms with the same name.</p>\n<p>The response includes information such as <em>name</em>, <em>state</em>, <em>activated time</em>, <em>acknowledged time</em>, <em>reset time</em> and other details of an alarm.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"bb90cb33-3f5c-43d3-8262-0364fa0e137b","id":"bb90cb33-3f5c-43d3-8262-0364fa0e137b","name":"Alarms","type":"folder"}},"urlObject":{"path":["api","alarms","alarm-name"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"73eddda8-f2ba-471a-ba50-dfae8398d44c","name":"Alarm Status: Activated","originalRequest":{"method":"GET","header":[{"description":"Your access token","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":"https://192.168.30.51/api/alarms/A%3A%20Alarm123"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Set-Cookie","value":"omni_session=a%3A0%3A%7B%7D; expires=Wed, 12-Jun-2019 12:15:19 GMT; Max-Age=-31500000; path=/"},{"key":"Set-Cookie","value":"omni_session=BmEKOVQwUDxSeFF1C2sGMVUzVGgCcQ9wBGVZJ1QnVDgMZwJtBFxUaAJgXXZaMFZzA2gLbwhgBDhVIQZlVD1aZFpoXWdWNAYwBWIGYwEwAGQGNQpiVGZQMlJhUTcLaAZiVTdUYQJgDzIEN1lsVDdUYgxpAjYEMFQxAj1ddlowVnMDaAttCGIEOFUhBmlUdVoJWj9dNFYyBnEFZAZ0AXUAdwY7CnBUP1A3UjBRPAtzBjFVOlRgAn0PMgQ2WWxUelRjDDgCLQQ6VDgCJl1vWnhWOgNjC2wIaAQgVXYGc1RgWiRaAV0xVjEGZgVvBnMBJABuBnMKOVQ3UDdSOVEkCwEGb1VwVCYCPg9iBG5ZBlQhVD8MfAJqBG5UZAIrXWNaJVYyA2cLcghiBCBVOAZzVD9aZ1ptXWpWdAZvBWAGdAFyAAoGYQpgVHFQb1J1UW8LJQZ5VSFUaQI6DzkEMVlhVG1UYAwwAjcEMlQ2AjVdbVowVnMDaAtlCGgEIFV2BnNUYFokWgFdNFY3BncFYAYlAT0AJgY6CjNUP1AkUiFRPQss; path=/; httponly"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Thu, 11 Jun 2020 02:15:19 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"Name\": \"A: Alarm123\",\n    \"State\": \"Active\",\n    \"Activated\": \"10/06/2020 14:59:29\",\n    \"Acknowledged\": null,\n    \"Reset\": null,\n    \"Details\": null\n}"},{"id":"c9367946-2b93-4ce6-9135-1069003d176e","name":"Alarm Status: Acknowledged","originalRequest":{"method":"GET","header":[{"description":"Your access token","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":"https://192.168.30.51/api/alarms/A%3A%20Alarm123"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Set-Cookie","value":"omni_session=VDMBMgdiUT1QelJ2CWkHMFE3VmpWJQp1AGFcIlIhBGhROgVqB18APAFjCSIGbFVwAGtXMwpiBTkCdlVqW2hfZAAzWmZVZwBkV2NWMg89UT1UNwFuB2ZRMVAwUmYJNwcyUT5WaFYxCmQAZlxgUjMEMFExBTcHZABhAWUJIgZsVXAAa1cxCmAFOQJ2VTpbel8MAGVaM1UxAHdXNlYkD3tRJlRpAXsHbFE2UDJSPwlxBzBRPlZiVikKNwAyXGlSfAQzUWUFKgc5AGwBJQk7BiRVOQBgVzAKagUhAiFVIFtvXyEAW1o2VTIAYFc9ViMPKlE%2FVCEBMgdkUTZQO1InCQMHblF0ViRWagpnAGpcA1InBG9RIQVtB20AMAEoCTcGeVUxAGRXLgpgBSECb1UgWzBfYgA3Wm1VdwBpVzJWJA98UVtUMwFrByJRblB3UmwJJwd4USVWa1ZuCjwANVxkUmsEMFFsBTcHMQBtATQJMgZsVX4%3D; path=/; httponly"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 12 Jun 2020 03:17:14 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"Name\": \"A: Alarm123\",\n    \"State\": \"Acknowledged\",\n    \"Activated\": \"11/06/2020 15:07:48\",\n    \"Acknowledged\": \"12/06/2020 13:14:36\",\n    \"Reset\": null,\n    \"Details\": null\n}"}],"_postman_id":"bd9d139e-f26a-4221-8537-aa22082c2bf2"},{"name":"Acknowledge Alarm","id":"62744591-9944-4ce7-9533-79039e3a11dd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"<p>Your access token</p>\n","type":"text"}],"url":"https://controller_IP_address/api/alarms/alarm-name/acknowledge","description":"<h2 id=\"acknowledging-an-alarm\">Acknowledging an alarm</h2>\n<p>You can acknowledge an alarm by passing its <em><strong>name</strong></em> as a parameter in the request URL.</p>\n<p>To avoid any unwanted error, it is advised that the <em><strong>name</strong></em> parameter be <em>URL-encoded</em> before passed in. For example, <code>Alarm 1 (base)</code> will be passed in as <code>Alarm%201%20%28base%29</code>.</p>\n<p>Please note that only the <em><strong>first</strong></em> alarm that matches the name will be acknowledged, in case there are multiple alarms with the same name.</p>\n<p>If the alarm is successfully acknowledged, a successful response <code>{ \"status\": true }</code> will be returned.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"bb90cb33-3f5c-43d3-8262-0364fa0e137b","id":"bb90cb33-3f5c-43d3-8262-0364fa0e137b","name":"Alarms","type":"folder"}},"urlObject":{"path":["api","alarms","alarm-name","acknowledge"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"2ca023d9-4c9a-48be-ba75-90cfd003459f","name":"Acknowledge Alarm","originalRequest":{"method":"PUT","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"Your access token","type":"text"}],"url":"https://192.168.30.51/api/alarms/alarm_name/acknowledge"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Set-Cookie","value":"omni_session=a%3A0%3A%7B%7D; expires=Thu, 13-Jun-2019 13:14:34 GMT; Max-Age=-31500001; path=/"},{"key":"Set-Cookie","value":"omni_session=AGcKOVczA28CKAcjXj4JPghuVmpTIAl2B2ZbJQNwVDgCaVE%2BAFhSblMxDyQDaQUgUjkEYFszBzsFcQE%2BBzQBOltoDzNQYlYyVWFWMlNhAGwAYwplVzYDYwJiBzNeYAk8CGdWaFM0CWcHYVtnA2JUYAJiUWMAY1IzUzcPJANpBSBSOQRiWzEHOwVxAW4HJgFSWz4PZlA0ViFVNFYkUycAdwA9CnBXPANkAmAHal4mCT4IZ1ZiUywJNAc1W24DLVRjAjZRfgA%2BUj5Tdw89AyEFaVIyBGNbOwcjBSYBdAczAX9bAA9jUDdWNlU%2FViNTdgBuAHUKOVc0A2QCaQdyXlQJYAgtViRTbwlkB21bBAN2VD8CclE5AGpSYlN6DzEDfAVhUjYEfVsxByMFaAF0B2wBPFtsDzhQclY%2FVTBWJFMgAAoAZwpgV3IDPAIlBzlecAl2CHxWa1NrCT8HMltjAzpUYAI%2FUWMANlIxU2IPMgNpBSBSOQRqWzsHIwUmAXQHMwF%2FWwAPZlAxVidVMFZ1U28AJgA8CjNXPAN3AnEHa155; path=/; httponly"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 12 Jun 2020 03:14:36 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": true\n}"}],"_postman_id":"62744591-9944-4ce7-9533-79039e3a11dd"}],"id":"bb90cb33-3f5c-43d3-8262-0364fa0e137b","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":false},"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""],"id":"40b41085-ba40-49ba-bfb8-f91bc29bdfc1"}},{"listen":"test","script":{"type":"text/javascript","exec":[""],"id":"88f569d6-70d5-4d34-8c86-8296625c7804"}}],"_postman_id":"bb90cb33-3f5c-43d3-8262-0364fa0e137b","description":""},{"name":"Device Info","item":[{"name":"Device ","item":[{"name":"List Devices","event":[{"listen":"test","script":{"exec":["const deviceNames = JSON.parse(responseBody)","const firstDevice = deviceNames[0].Name","pm.collectionVariables.set('firstDevice', firstDevice)"],"type":"text/javascript","id":"0a1c5c9c-23e3-42f7-a6a0-673a7b6e69d0"}}],"id":"001676bf-bf4f-4a1f-a5b6-636dbe6c9933","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"<p>Your access token</p>\n","type":"text"}],"url":"https://controller_IP_address/api/device","description":"<h2 id=\"list-of-devices\">List of devices</h2>\n<p>List of Devices, including Primary Device and connected REMs in tree structure. For each device, the <em>name</em>, <em>address</em>, <em>model</em>, <em>uptime</em> and <em>firmware version</em> are shown.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"56405119-8b72-4fbf-a196-6d25f5201d11","id":"56405119-8b72-4fbf-a196-6d25f5201d11","name":"Device Info","type":"folder"}},"urlObject":{"path":["api","device"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"8b1d4cfc-9bf3-4a3a-be4e-ee1e51275c6d","name":"List Device Pages","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"Your access token","type":"text"}],"url":"https://192.168.30.51/api/device/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Content-Type","value":"application/json"},{"key":"Set-Cookie","value":"omni_session=AWYBMlYzAGxQegQgXDxXYFYwV2tQIwl2AGFdIwd0UT0Aa1I9AloEOAVnACsGbAYjXzQCZg1lAT0GclNiBWFfYlpnXjZUN1cwBDcCO1RiAGcBPgE9VjQAM1BkBGNcYFcwVjdXNFA0CWYAZ11jB2NRYQBiUjECYQRpBTEAKwZsBiNfNAJkDWcBPQZyUzwFJF8MWj9eN1QwVyAEZQJwVCAAdwE8AXtWPQBnUDIEaVwkV2BWOVdjUC8JNAAyXWgHKVFmADRSfQI8BGgFIQAyBiQGal8%2FAmUNbQElBiVTJgUxXyFaAV4yVDNXNwRuAndUcQBuAXQBMlY1AGdQOwRxXFZXPlZzVyVQbAlkAGpdAgdyUToAcFI6AmgENAUsAD4GeQZiXzwCew1nASUGa1MmBW5fYlptXmlUdlc%2BBGECcFQnAAoBZgFrVnMAP1B3BDpcclcoViJXalBoCT8ANV1lBz9RZgAxUmsCNwRgBTUAOAZsBi0%3D; path=/; httponly"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Mon, 24 Feb 2020 22:09:22 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"Name\": \"Factory Default\",\n        \"Address\": 0,\n        \"Model\": \"Omni C20\",\n        \"UpTime\": 196,\n        \"Version\": \"3.2.72\"\n    }\n]"}],"_postman_id":"001676bf-bf4f-4a1f-a5b6-636dbe6c9933"},{"name":"Device Status","event":[{"listen":"prerequest","script":{"exec":[""],"type":"text/javascript","id":"a605ccc5-4144-4f72-9416-0b026a193622"}}],"id":"ef882126-92ee-45ab-b0ff-9e031c0d5a1c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"<p>Your access token</p>\n","type":"text"}],"url":"https://controller_IP_address/api/device/device-name","description":"<h2 id=\"current-status-of-a-device\">Current status of a device</h2>\n<p>You can get current status of a device by passing its <em><strong>name</strong></em> as a parameter in the request URL.</p>\n<p>To avoid any unwanted error, it is advised that the <em><strong>name</strong></em> parameter be <em>URL-encoded</em> before passed in. For example, <code>Factory Default</code> will be passed in as <code>Factory%20Default</code>.</p>\n<p>Please note that only the <em><strong>first</strong></em> device that matches the name will be returned, in case there are multiple devices with the same name.</p>\n<p>The response includes information on <em>power supply</em>, <em>IO module temperature</em>, <em>block processing time</em> and <em>SD card</em> of the device.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"56405119-8b72-4fbf-a196-6d25f5201d11","id":"56405119-8b72-4fbf-a196-6d25f5201d11","name":"Device Info","type":"folder"}},"urlObject":{"path":["api","device","device-name"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"6ee73fd3-bd49-4257-a004-e6f91b13b2d2","name":"Device Status","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"Your access token","type":"text"}],"url":"https://192.168.30.51/api/device/Factory%20Default"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Set-Cookie","value":"omni_session=Wj1ZalUwBmoELlF1XT1QZ1I0AT1aKV8gWjsMcgR3A28EbwdoB19VaVo4W3BaMFdyAmlVMQ5mVWkBdVZpWzwKMlViCmFdPwE8VWUANAQ0UzBaalllVTAGZARiUTBdMFBhUjMBNlo7X2daOwwwBDADYwQyBzIHZlUzWmVbcFowV3ICaVUzDmRVaQF1VjlbegpZVTAKY105AXZVNAByBHBTJFpnWSNVPgZhBGZRPF0lUGdSPQE1WiVfYlpoDDkEKgM0BDAHKAc5VTlafltpWnhXOwJiVTIOblVxASJWI1tvCnRVDgpmXToBYVU%2FAHUEIVM9Wi9ZalU2BmEEb1EkXVdQOVJ3AXNaZl8yWjAMUwRxA2gEdAdvB21VZVpzW2VaJVczAmZVLA5kVXEBbFYjWzAKN1ViCj1dfwFoVTAAcgR3U1laPVkzVXAGOQQjUW9dc1AvUiYBPFpiX2labww0BD0DNwQ5BzUHN1UyWm1bZ1owV3w%3D; path=/; httponly"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 12 Jun 2020 04:46:59 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"Power Supply Temperature\": {\n        \"Value\": 45.16,\n        \"Unit\": \"°C\"\n    },\n    \"Power Supply Current\": {\n        \"Value\": 0.09,\n        \"Unit\": \"A\"\n    },\n    \"Power Supply 12V Rail\": {\n        \"Value\": 12.37,\n        \"Unit\": \"V\"\n    },\n    \"Power Supply 5V Rail\": {\n        \"Value\": 5.05,\n        \"Unit\": \"V\"\n    },\n    \"IO Module Temperature\": {\n        \"Value\": 45.31,\n        \"Unit\": \"°C\"\n    },\n    \"Mean Block Process Time\": {\n        \"Value\": 14,\n        \"Unit\": \"ms\"\n    },\n    \"SD Card\": {\n        \"Value\": \"Present\"\n    }\n}"}],"_postman_id":"ef882126-92ee-45ab-b0ff-9e031c0d5a1c"}],"id":"c3137de3-ccca-4dc4-b2d4-5f27d5cc1fc0","_postman_id":"c3137de3-ccca-4dc4-b2d4-5f27d5cc1fc0","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"56405119-8b72-4fbf-a196-6d25f5201d11","id":"56405119-8b72-4fbf-a196-6d25f5201d11","name":"Device Info","type":"folder"}}},{"name":"Versions","item":[{"name":"System Versions","id":"c4f0e422-f654-4665-b1f2-e780f0b663bf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"description":"<p>Your access token</p>\n","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":"https://controller_IP_address/api/versions","description":"<h2 id=\"current-system-status\">Current system status</h2>\n<p>The response includes information on <em>status</em>, <em>error</em>, <em>alarms</em>, <em>uptime</em>, <em>warning</em>, <em>current time</em> and <em>time zone offset</em> of the system.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"56405119-8b72-4fbf-a196-6d25f5201d11","id":"56405119-8b72-4fbf-a196-6d25f5201d11","name":"Device Info","type":"folder"}},"urlObject":{"path":["api","versions"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"65fd46aa-80f8-4ba2-87ce-f5767be3a55c","name":"System Versions","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"Your access token","type":"text"}],"url":"https://192.168.30.51/api/versions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Set-Cookie","value":"omni_session=BWIIO1M2BmoELgsvXDwIPwZgBjpXJAF%2BB2ZeIAFyA28HbAZpUwsBPVIwDyRbMQciA2gBZVoyUGxRJVw%2BVTxbMwYxDTcBYAs3Aj8ONlNjUmUFZQhlUzcGYAQwC2VcNwg5BjYGN1c%2FAW4HYF42AWQDYgc3BmNTYAE1UmEPJFsxByIDaAFnWjBQbFElXDNVdFsIBmMNZAFlC3wCYw58UydSJQU4CHJTOAZhBGYLZlwkCD8GaQYyVygBPAc1XmsBLwM0BzMGKVNtAW1Sdg89W3kHawNjAWZaOlB0UXJcKVVhWyUGXQ1hAWYLawJoDntTdlI8BXAIO1MwBmEEbwt%2BXFYIYQYjBnRXawFsB21eAQF0A2gHdwZuUzkBMVJ7DzFbJAdjA2cBeFowUHRRPFwpVT5bZgYxDToBIwtiAmcOfFMgUlgFYghiU3YGOQQjCzVccgh3BnIGO1dvATcHMl5mATgDNwc6BjRTbAFjUmcPMVsxByw%3D; path=/; httponly"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 12 Jun 2020 05:12:17 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"U-Boot\": \"3.1.16\",\n    \"Kernel\": \"3.3.1\",\n    \"RootFileSystem\": \"3.3.1\",\n    \"Software\": \"3.3.23\",\n    \"Configuration\": \"3.2.1\",\n    \"Display\": \"1.0.60\",\n    \"Webpage\": null\n}"}],"_postman_id":"c4f0e422-f654-4665-b1f2-e780f0b663bf"}],"id":"462fb489-7f5b-41c0-8015-cf95b018e003","event":[{"listen":"prerequest","script":{"id":"e95c7222-8c2b-4990-9d2f-9ec346ed8ee1","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"21064330-86cb-419a-b477-04942610db53","type":"text/javascript","exec":[""]}}],"_postman_id":"462fb489-7f5b-41c0-8015-cf95b018e003","description":"","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"56405119-8b72-4fbf-a196-6d25f5201d11","id":"56405119-8b72-4fbf-a196-6d25f5201d11","name":"Device Info","type":"folder"}}}],"id":"56405119-8b72-4fbf-a196-6d25f5201d11","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":false},"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""],"id":"df35efda-72dc-448c-ba13-7f00d4547d02"}},{"listen":"test","script":{"type":"text/javascript","exec":[""],"id":"b368e36a-3457-4966-8f52-2b2dba50fa37"}}],"_postman_id":"56405119-8b72-4fbf-a196-6d25f5201d11","description":""},{"name":"Schedules","item":[{"name":"List Schedules","id":"1a0eb2fb-6aee-48f8-931c-682e7803ce74","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"<p>Your access token</p>\n","type":"text"}],"url":"https://controller_IP_address/api/schedules","description":"<h2 id=\"list-of-all-innotech-and-bacnet-schedules\">List of all Innotech and BACnet schedules</h2>\n<p>The response shows names of all Innotech and BACnet schedules.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"303f7315-146c-46d4-9f6f-0f38ec0e193f","id":"303f7315-146c-46d4-9f6f-0f38ec0e193f","name":"Schedules","type":"folder"}},"urlObject":{"path":["api","schedules"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"4691bcb1-8797-4b7f-b2ce-c6d02311d181","name":"List Schedules","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"Your access token","type":"text"}],"url":"https://192.168.30.51/api/schedules"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 12 Jun 2020 05:04:33 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"Innotech\": [\n        {\n            \"Name\": \"AC1 Calendar\"\n        },\n        {\n            \"Name\": \"Calendar\"\n        }\n    ],\n    \"BACnet\": [\n        {\n            \"Name\": \"B: Calendar\"\n        }\n    ]\n}"}],"_postman_id":"1a0eb2fb-6aee-48f8-931c-682e7803ce74"},{"name":"Schedule Status","id":"0c5070fe-ad98-4f8a-8943-13900db87ffa","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"<p>Your access token</p>\n","type":"text"}],"url":"https://controller_IP_address/api/schedules/schedule-name","description":"<h2 id=\"current-status-of-a-schedule\">Current status of a schedule</h2>\n<p>You can get current status of a schedule by passing its <em><strong>name</strong></em> as a parameter in the request URL.</p>\n<p>To avoid any unwanted error, it is advised that the <em><strong>name</strong></em> parameter be <em>URL-encoded</em> before passed in. For example, <code>AC1 Calendar</code> will be passed in as <code>AC1%20ACalendar</code>.</p>\n<p>Please note that only the <em><strong>first</strong></em> schedule that matches the name will be returned, in case there are multiple schedules with the same name.</p>\n<p>The response includes information on <em>schedule ID</em>, <em>type</em> and <em>value</em> and <em>Time Until</em> of the schedule.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"303f7315-146c-46d4-9f6f-0f38ec0e193f","id":"303f7315-146c-46d4-9f6f-0f38ec0e193f","name":"Schedules","type":"folder"}},"urlObject":{"path":["api","schedules","schedule-name"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"98807439-e0ad-49bf-8cc2-270d6dd1455a","name":"Schedule Status: BACnet","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"Your access token","type":"text"}],"url":"https://192.168.30.51/api/schedules/B: Calendar"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Set-Cookie","value":"omni_session=AmVbaAdiVztSeFVxAGAHMAZgBjpXJAt0VjcJd10uUT0DaFI9DlYDP1o4WnEGbAMmXjUKbgBoBTlRJVY0AWhcNAM0CDIBYAU5UG0AOA8%2FATYCYls2B2NXMVJmVTsAawc2BjYGN1c%2FC2RWMQlhXThRMAMzUjcOPQM3WmlacQZsAyZeNQpsAGoFOVElVjkBIFwPA2YIYQFlBXJQMQByD3sBdgI%2FWyEHbFcwUjBVOAB4BzAGaQYyVygLNlZkCTxdc1FmAzdSfQ4wA29aflpoBiQDb14%2BCm0AYAUhUXJWIwE1XCIDWAhkAWYFZVA6AHUPKgFvAndbaAdkVzBSOVUgAAoHbgYjBnRXawtmVjwJVl0oUToDc1I6DmQDM1pzWmQGeQNnXjoKcwBqBSFRPFYjAWpcYQM0CD8BIwVsUDUAcg98AQsCZVsxByJXaFJ1VWsALgd4BnIGO1dvCz1WYwkxXWRRZQM%2BUmAOMQNgWm1aYQZsAyg%3D; path=/; httponly"},{"key":"Cache-Control","value":"no-store, no-cache, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 12 Jun 2020 05:10:14 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"CalendarID\": 2,\n    \"Type\": 2,\n    \"PresentValue\": \"Inactive\",\n    \"TimeUntil\": -10080\n}"},{"id":"cfb146de-9bbd-4fdd-b669-7b473950ef8b","name":"Schedule Status: Innotech","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"Your access token","type":"text"}],"url":"https://192.168.30.51/api/schedules/AC1%20Calendar"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Set-Cookie","value":"omni_session=UDcNPlYzVztXfVJ2Dm4ANwRiUGwFdlgnUjNcIlYlAm4AawFuBV1aZlAyDyRaMAUgVj0HY1oyBTlSJlc1AGlYMFdgXGZSMwc7Um8DOwU1AzRQMA1gVjJXMVdjUjwOZQAxBDRQYQVtWDdSNVw0VjMCYwAwAWQFNlpuUGMPJFowBSBWPQdhWjAFOVImVzgAIVgLVzJcNVI2B3BSMwNxBXEDdFBtDXdWPVcwVzVSPw52ADcEa1BkBXpYZVJgXGlWeAI1ADQBLgU7WjZQdA89WngFaVY2B2BaOgUhUnFXIgA0WCZXDFwwUjUHZ1I4A3YFIANtUCUNPlY1VzBXPFInDgQAaQQhUCIFOVg1UjhcA1YjAmkAcAFpBW9aalB5DzFaJQVhVjIHflowBSFSP1ciAGtYZVdgXGtScAduUjcDcQV2AwlQNw1nVnNXaFdwUmwOIAB%2FBHBQbQU9WG5SZ1xkVm8CNgA9ATMFOlo7UGcPNlowBS4%3D; path=/; httponly"},{"key":"Cache-Control","value":"no-store, no-cache, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 12 Jun 2020 05:06:51 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"CalendarID\": 1,\n    \"CalendarEventType\": \"Digital\",\n    \"EventValue\": \"Off\",\n    \"TimeUntil\": -10080\n}"}],"_postman_id":"0c5070fe-ad98-4f8a-8943-13900db87ffa"}],"id":"303f7315-146c-46d4-9f6f-0f38ec0e193f","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":false},"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""],"id":"9c163333-757b-4b1d-ad15-02994e263b03"}},{"listen":"test","script":{"type":"text/javascript","exec":[""],"id":"1fb51dd8-6a50-43aa-a8e9-02fd56ddced1"}}],"_postman_id":"303f7315-146c-46d4-9f6f-0f38ec0e193f","description":""},{"name":"Status","item":[{"name":"System Status","id":"b75211c1-347a-47cf-89ad-715d1a071339","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"<p>Your access token</p>\n","type":"text"}],"url":"https://controller_IP_address/api/status","description":"<h2 id=\"current-system-status\">Current system status</h2>\n<p>The response includes information on <em>status</em>, <em>error</em>, <em>alarms</em>, <em>uptime</em>, <em>warning</em>, <em>current time</em> and <em>time zone offset</em> of the system.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"4032bd23-b1be-4b1d-bbb5-1a92f01248e0","id":"4032bd23-b1be-4b1d-bbb5-1a92f01248e0","name":"Status","type":"folder"}},"urlObject":{"path":["api","status"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"127ae86c-836b-4b96-8f39-6992545f014b","name":"System Status","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"Your access token","type":"text"}],"url":"https://192.168.30.51/api/status"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Set-Cookie","value":"omni_session=BWIIO1M2BmoELgsvXDwIPwZgBjpXJAF%2BB2ZeIAFyA28HbAZpUwsBPVIwDyRbMQciA2gBZVoyUGxRJVw%2BVTxbMwYxDTcBYAs3Aj8ONlNjUmUFZQhlUzcGYAQwC2VcNwg5BjYGN1c%2FAW4HYF42AWQDYgc3BmNTYAE1UmEPJFsxByIDaAFnWjBQbFElXDNVdFsIBmMNZAFlC3wCYw58UydSJQU4CHJTOAZhBGYLZlwkCD8GaQYyVygBPAc1XmsBLwM0BzMGKVNtAW1Sdg89W3kHawNjAWZaOlB0UXJcKVVhWyUGXQ1hAWYLawJoDntTdlI8BXAIO1MwBmEEbwt%2BXFYIYQYjBnRXawFsB21eAQF0A2gHdwZuUzkBMVJ7DzFbJAdjA2cBeFowUHRRPFwpVT5bZgYxDToBIwtiAmcOfFMgUlgFYghiU3YGOQQjCzVccgh3BnIGO1dvATcHMl5mATgDNwc6BjRTbAFjUmcPMVsxByw%3D; path=/; httponly"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 12 Jun 2020 05:12:17 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"SystemStatus\": \"Running\",\n    \"ErrorCode\": \"Ok\",\n    \"AlarmStatus\": \"Active\",\n    \"UpTime\": 4392,\n    \"NumActiveAlarms\": 1,\n    \"WarningCode\": \"Ok\",\n    \"CurrentTime\": 1591974738000,\n    \"TimeZoneOffset\": 36000000\n}"}],"_postman_id":"b75211c1-347a-47cf-89ad-715d1a071339"}],"id":"4032bd23-b1be-4b1d-bbb5-1a92f01248e0","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":false},"_postman_id":"4032bd23-b1be-4b1d-bbb5-1a92f01248e0","description":""},{"name":"BACnet Client","item":[{"name":"Read Property","id":"4ba7625b-89fe-44c4-ae9f-8df0f53afde7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"description":"<p>Your access token</p>\n","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":"https://controller_IP_address/api/bacnet/read?deviceinstance={integer}&objecttype={url-encoded-string}&proprietaryobject={integer}&objectinstance={integer}&property={url-encoded-string}&proprietaryproperty={integer}&readpropertymultiple={boolean}&networknumber={integer}&arrayindex={integer}","description":"<h2 id=\"send-request\">Send Request</h2>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"6285047a-095e-4832-a730-1e28a25b63b3","id":"6285047a-095e-4832-a730-1e28a25b63b3","name":"BACnet Client","type":"folder"}},"urlObject":{"path":["api","bacnet","read"],"host":["https://controller_IP_address"],"query":[{"key":"deviceinstance","value":"{integer}"},{"description":{"content":"<p>For example, valid%20object%20type. Case-insentivive.</p>\n","type":"text/plain"},"key":"objecttype","value":"{url-encoded-string}"},{"description":{"content":"<p>Required when Object Type is Proprietary, e.g. objecttype=proprietary. No effect otherwise.</p>\n","type":"text/plain"},"key":"proprietaryobject","value":"{integer}"},{"key":"objectinstance","value":"{integer}"},{"description":{"content":"<p>For example, valid%20property. Case-insensitive.</p>\n","type":"text/plain"},"key":"property","value":"{url-encoded-string}"},{"description":{"content":"<p>Required when Property is Proprietary, e.g. property=proprietary. No effect otherwise.</p>\n","type":"text/plain"},"key":"proprietaryproperty","value":"{integer}"},{"description":{"content":"<p>Optional, true or false only</p>\n","type":"text/plain"},"key":"readpropertymultiple","value":"{boolean}"},{"description":{"content":"<p>Optional</p>\n","type":"text/plain"},"key":"networknumber","value":"{integer}"},{"description":{"content":"<p>Optional</p>\n","type":"text/plain"},"key":"arrayindex","value":"{integer}"}],"variable":[]}},"response":[{"id":"6e1ff53f-3a0d-4ddf-9d2f-5bb21d3337e9","name":"Read Property","originalRequest":{"method":"GET","header":[{"description":"Your access token","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":{"raw":"https://192.168.30.51/api/bacnet/read?deviceinstance=123&objecttype=Access%20Credential&proprietaryobject=122&objectinstance=123&property=proPriEtary&proprietaryproperty=111&readpropertymultiple=true&networknumber=123&arrayindex=123","protocol":"https","host":["192","168","30","51"],"path":["api","bacnet","read"],"query":[{"key":"deviceinstance","value":"123"},{"key":"objecttype","value":"Access%20Credential","description":"For example, my%20object%20type. Case-insentivive."},{"key":"proprietaryobject","value":"122","description":"Required when Object Type is Proprietary, e.g. objecttype=proprietary. No effect otherwise."},{"key":"objectinstance","value":"123"},{"key":"property","value":"proPriEtary","description":"For example, my%20object%20type. Case-insensitive."},{"key":"proprietaryproperty","value":"111","description":"Required when Property is Proprietary, e.g. property=proprietary. No effect otherwise."},{"key":"readpropertymultiple","value":"true","description":"true or false only"},{"key":"networknumber","value":"123"},{"key":"arrayindex","value":"123"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Content-Length","value":"62"},{"key":"Date","value":"Tue, 22 Sep 2020 00:50:45 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": true,\n    \"message\": \"Result: Device unreachable<BR><BR>\"\n}"}],"_postman_id":"4ba7625b-89fe-44c4-ae9f-8df0f53afde7"},{"name":"Write Property","id":"a0d76803-591e-4863-a312-8ebaf27cadc2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"description":"<p>Your access token</p>\n","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":"https://controller_IP_address/api/bacnet/write?deviceinstance={integer}&objecttype={url-encoded-string}&proprietaryobject={integer}&objectinstance={integer}&property={url-encoded-string}&proprietaryproperty={integer}&networknumber={integer}&arrayindex={integer}&writevalue={integer/string}&writepriority={integer}","description":"<h2 id=\"send-request\">Send Request</h2>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"6285047a-095e-4832-a730-1e28a25b63b3","id":"6285047a-095e-4832-a730-1e28a25b63b3","name":"BACnet Client","type":"folder"}},"urlObject":{"path":["api","bacnet","write"],"host":["https://controller_IP_address"],"query":[{"key":"deviceinstance","value":"{integer}"},{"description":{"content":"<p>For example, valid%20object%20type. Case-insentivive.</p>\n","type":"text/plain"},"key":"objecttype","value":"{url-encoded-string}"},{"description":{"content":"<p>Required when Object Type is Proprietary, e.g. objecttype=proprietary. No effect otherwise.</p>\n","type":"text/plain"},"key":"proprietaryobject","value":"{integer}"},{"key":"objectinstance","value":"{integer}"},{"description":{"content":"<p>For example, valid%20property. Case-insensitive.</p>\n","type":"text/plain"},"key":"property","value":"{url-encoded-string}"},{"description":{"content":"<p>Required when Property is Proprietary, e.g. property=proprietary. No effect otherwise.</p>\n","type":"text/plain"},"key":"proprietaryproperty","value":"{integer}"},{"description":{"content":"<p>Optional</p>\n","type":"text/plain"},"key":"networknumber","value":"{integer}"},{"description":{"content":"<p>Optional</p>\n","type":"text/plain"},"key":"arrayindex","value":"{integer}"},{"key":"writevalue","value":"{integer/string}"},{"description":{"content":"<p>Optional</p>\n","type":"text/plain"},"key":"writepriority","value":"{integer}"}],"variable":[]}},"response":[{"id":"75238055-458c-45ef-b635-6e435630dab6","name":"Write Property","originalRequest":{"method":"GET","header":[{"description":"Your access token","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":{"raw":"https://192.168.30.51/api/bacnet/write?deviceinstance=123&objecttype=proprietary&proprietaryobject=123&objectinstance=123&property=proprietary&proprietaryproperty=123&networknumber=123&arrayindex=123&writevalue=123&writepriority=123","protocol":"https","host":["192","168","30","51"],"path":["api","bacnet","write"],"query":[{"key":"deviceinstance","value":"123"},{"key":"objecttype","value":"proprietary","description":"For example, my%20object%20type. Case-insentivive."},{"key":"proprietaryobject","value":"123","description":"Required when Object Type is Proprietary, e.g. objecttype=proprietary. No effect otherwise."},{"key":"objectinstance","value":"123"},{"key":"property","value":"proprietary","description":"For example, my%20object%20type. Case-insensitive."},{"key":"proprietaryproperty","value":"123","description":"Required when Property is Proprietary, e.g. property=proprietary. No effect otherwise."},{"key":"networknumber","value":"123"},{"key":"arrayindex","value":"123"},{"key":"writevalue","value":"123"},{"key":"writepriority","value":"123"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Set-Cookie","value":"omni_session=AWYOPVs%2BAW0CKFF1D28HMANlBDhWJQ9wAGFdIwBzUDxVPgZpDlZQbFIwXXZUPlVwUTpRNQhgBDhSJgdkU2QKNQM0CTdTYAo3BzUHPlVkUmIBMQ5kW2wBZwJhUWQPMQcwA2cENVY2DzUAMF1iADZQYlUwBjMOMFAwUmFddlQ%2BVXBROlE3CGIEOFImB2hTcgpZA2YJYFM3Cn0HZgd1VSFSJQE8DnRbMAFmAmBRPA93BzADbAQwVikPMgAyXWgALlBnVWEGKQ4wUDxSdl1vVHZVOVExUTYIaAQgUnEHclNnCnQDWAllUzQKagdtB3JVcFI8AXQOPVs4AWYCaVEkDwUHbgMmBHZWag9iAGpdAgB1UDtVJQZuDmRQYFJ7XWNUK1UxUTZRKAhnBCBSPwdyUzgKNwM0CT5TcQpjB2IHdVUmUlgBZg5kW34BPgIlUW8PIQd4A3cEOVZuDzkANV1mADBQZVVmBjQOPFA9Um1dbFQ%2BVX4%3D; path=/; httponly"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Content-Length","value":"75"},{"key":"Date","value":"Tue, 22 Sep 2020 00:51:52 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": true,\n    \"message\": \"Invalid parameter<BR><BR>Invalid Priority : 123\"\n}"}],"_postman_id":"a0d76803-591e-4863-a312-8ebaf27cadc2"},{"name":"Change of Value - Subscribe","id":"a314b2ad-e8a0-4a39-b660-87fb4a9243bf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"description":"<p>Your access token</p>\n","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":"https://controller_IP_address/api/bacnet/covsubscribe?deviceinstance={integer}&objecttype={url-encoded-string}&proprietaryobject={integer}&objectinstance={integer}&networknumber={integer}&processid={integer}&issueconfirmedcov={boolean}&lifetime={integer}","description":"<h2 id=\"send-request\">Send Request</h2>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"6285047a-095e-4832-a730-1e28a25b63b3","id":"6285047a-095e-4832-a730-1e28a25b63b3","name":"BACnet Client","type":"folder"}},"urlObject":{"path":["api","bacnet","covsubscribe"],"host":["https://controller_IP_address"],"query":[{"key":"deviceinstance","value":"{integer}"},{"description":{"content":"<p>For example, valid%20object%20type. Case-insentivive.</p>\n","type":"text/plain"},"key":"objecttype","value":"{url-encoded-string}"},{"description":{"content":"<p>Required when Object Type is Proprietary, e.g. objecttype=proprietary. No effect otherwise.</p>\n","type":"text/plain"},"key":"proprietaryobject","value":"{integer}"},{"key":"objectinstance","value":"{integer}"},{"description":{"content":"<p>Optional</p>\n","type":"text/plain"},"key":"networknumber","value":"{integer}"},{"description":{"content":"<p>Optional</p>\n","type":"text/plain"},"key":"processid","value":"{integer}"},{"description":{"content":"<p>Required for Subscription</p>\n","type":"text/plain"},"key":"issueconfirmedcov","value":"{boolean}"},{"description":{"content":"<p>Required for Subscription</p>\n","type":"text/plain"},"key":"lifetime","value":"{integer}"}],"variable":[]}},"response":[{"id":"6f6fa12f-8b4c-4dd4-9f3f-534f0512852b","name":"Change of Value - Subscribe","originalRequest":{"method":"GET","header":[{"description":"Your access token","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":{"raw":"https://192.168.30.51/api/bacnet/covsubscribe?deviceinstance=123&objecttype=access%20credentiAL&proprietaryobject=123&objectinstance=123&networknumber=123&processid=123&issueconfirmedcov=true&lifetime=123","protocol":"https","host":["192","168","30","51"],"path":["api","bacnet","covsubscribe"],"query":[{"key":"deviceinstance","value":"123"},{"key":"objecttype","value":"access%20credentiAL","description":"For example, valid%20object%20type. Case-insentivive."},{"key":"proprietaryobject","value":"123","description":"Required when Object Type is Proprietary, e.g. objecttype=proprietary. No effect otherwise."},{"key":"objectinstance","value":"123"},{"key":"networknumber","value":"123"},{"key":"processid","value":"123"},{"key":"issueconfirmedcov","value":"true","description":"Required for Subscription"},{"key":"lifetime","value":"123","description":"Required for Subscription"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Set-Cookie","value":"omni_session=BmELOFQxUDxTeVZyDm4DNARiXWFQI1skVTQAfgNwVjoGbVQ7BFxXawFjDiVXPVB1AGtQNFw0BTlRJVxpBWIBb1UwDmZWNAE9UTMBOQAyVzsGZAs0VDJQP1M7VjIOYgMwBGpdbVA2W2NVMwA%2FA2ZWZAY1VGEEOlc0ATAOJVc9UHUAa1A2XDYFOVElXDMFJAFSVTAOZ1YyAXZRMAFzAHRXIAY7C3FUP1A3UzFWOw52AzQEa11pUC9bZlVnADUDLVZhBjJUewQ6VzsBJQ48V3VQPABgUDdcPAUhUXJcKQUxAX9VDg5iVjEBYVE7AXQAJVc5BnMLOFQ3UDdTOFYjDgQDagQhXS9QbFs2VT8AXwN2Vj0GdlQ8BG5XZwEoDjBXKFA0AGdQKVwzBSFRPFwpBW4BPFViDjlWdAFoUTQBcwBzV10GYQthVHFQb1N0VmgOIAN8BHBdYFBoW21VYAA7AzNWYwY1VGYEOlc3ATAONlc9UHs%3D; path=/; httponly"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Content-Length","value":"109"},{"key":"Date","value":"Tue, 22 Sep 2020 01:53:03 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": true,\n    \"message\": \"Result: Invalid address<BR><BR>This object doesn't support SubscribeCOV service\\n\"\n}"}],"_postman_id":"a314b2ad-e8a0-4a39-b660-87fb4a9243bf"},{"name":"Change of Value - Cancel","id":"2b4d011e-b9e7-42bf-845d-6af1f9545f98","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"description":"<p>Your access token</p>\n","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":"https://controller_IP_address/api/bacnet/covcancel?deviceinstance={integer}&objecttype={url-encoded-string}&proprietaryobject={integer}&objectinstance={integer}&networknumber={integer}&processid={integer}","description":"<h2 id=\"send-request\">Send Request</h2>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"6285047a-095e-4832-a730-1e28a25b63b3","id":"6285047a-095e-4832-a730-1e28a25b63b3","name":"BACnet Client","type":"folder"}},"urlObject":{"path":["api","bacnet","covcancel"],"host":["https://controller_IP_address"],"query":[{"key":"deviceinstance","value":"{integer}"},{"description":{"content":"<p>For example, valid%20object%20type. Case-insentivive.</p>\n","type":"text/plain"},"key":"objecttype","value":"{url-encoded-string}"},{"description":{"content":"<p>Required when Object Type is Proprietary, e.g. objecttype=proprietary. No effect otherwise.</p>\n","type":"text/plain"},"key":"proprietaryobject","value":"{integer}"},{"key":"objectinstance","value":"{integer}"},{"description":{"content":"<p>Optional</p>\n","type":"text/plain"},"key":"networknumber","value":"{integer}"},{"description":{"content":"<p>Optional</p>\n","type":"text/plain"},"key":"processid","value":"{integer}"}],"variable":[]}},"response":[{"id":"2400a946-7c3f-4a58-8383-96b9c950c4de","name":"Change of Value - Cancel","originalRequest":{"method":"GET","header":[{"description":"Your access token","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":{"raw":"https://192.168.30.51/api/bacnet/covcancel?deviceinstance=123&objecttype=proprietary&proprietaryobject=123&objectinstance=123&networknumber=123&processid=1234","protocol":"https","host":["192","168","30","51"],"path":["api","bacnet","covcancel"],"query":[{"key":"deviceinstance","value":"123"},{"key":"objecttype","value":"proprietary","description":"For example, valid%20object%20type. Case-insentivive."},{"key":"proprietaryobject","value":"123","description":"Required when Object Type is Proprietary, e.g. objecttype=proprietary. No effect otherwise."},{"key":"objectinstance","value":"123"},{"key":"networknumber","value":"123"},{"key":"processid","value":"1234"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Set-Cookie","value":"omni_session=VjEOPVA1VzsFLwElCmoGMVM1BjpVJg9wUTALdQNwC2dXPAZpD1cBPVo4XXYBawInVT5SNgxkCDQAdFdiUjVbNVUwCGBVN1drUTNUbAU3Uj5WNA4xUDZXOAVtAWUKZgY1Uz0GNlUzDzdRNws0A2YLOVdkBjMPMQFiWmtddgFrAidVPlI0DGYINAB0VzhSc1sIVTAIYVUxVyBRMFQmBXFSJVZrDnRQO1cwBWcBbApyBjFTPAYyVSoPMlFjCz4DLQs8V2MGKQ8xAW1afl1vASMCblU1UjUMbAgsACNXIlJmWyVVDghkVTJXN1E7VCEFIFI8ViMOPVAzVzAFbgF0CgAGb1N2BnRVaQ9iUTsLVAN2C2BXJwZuD2UBMVpzXWMBfgJmVTJSKwxjCCwAbVciUjlbZlViCD9Vd1c%2BUTRUJgV2UlhWMQ5kUHVXaAUiAT8KJAZ5UycGO1VtDzlRZAswAzMLPldkBjMPOAFnWmtdbAFrAik%3D; path=/; httponly"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Content-Length","value":"109"},{"key":"Date","value":"Tue, 22 Sep 2020 02:06:31 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": true,\n    \"message\": \"Result: Invalid address<BR><BR>This object doesn't support SubscribeCOV service\\n\"\n}"}],"_postman_id":"2b4d011e-b9e7-42bf-845d-6af1f9545f98"},{"name":"Who Is","id":"3f034df8-5e6b-42fa-bdfe-93c99b45328d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"description":"<p>Your access token</p>\n","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":"https://controller_IP_address/api/bacnet/whois?lowdeviceinstance={integer}&highdeviceinstance={integer}&networknumber={integer}","description":"<h2 id=\"send-request\">Send Request</h2>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"6285047a-095e-4832-a730-1e28a25b63b3","id":"6285047a-095e-4832-a730-1e28a25b63b3","name":"BACnet Client","type":"folder"}},"urlObject":{"path":["api","bacnet","whois"],"host":["https://controller_IP_address"],"query":[{"key":"lowdeviceinstance","value":"{integer}"},{"key":"highdeviceinstance","value":"{integer}"},{"description":{"content":"<p>Optional</p>\n","type":"text/plain"},"key":"networknumber","value":"{integer}"}],"variable":[]}},"response":[{"id":"72f059c5-3249-40a9-bfb7-87e7623e17d6","name":"Who Is","originalRequest":{"method":"GET","header":[{"description":"Your access token","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":{"raw":"https://192.168.30.51/api/bacnet/whois?lowdeviceinstance=123&highdeviceinstance=456&networknumber=111","protocol":"https","host":["192","168","30","51"],"path":["api","bacnet","whois"],"query":[{"key":"lowdeviceinstance","value":"123"},{"key":"highdeviceinstance","value":"456"},{"key":"networknumber","value":"111"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Content-Length","value":"81"},{"key":"Date","value":"Tue, 22 Sep 2020 02:52:18 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": true,\n    \"message\": \"Result: Device Communication Control disabled<BR><BR>\"\n}"}],"_postman_id":"3f034df8-5e6b-42fa-bdfe-93c99b45328d"},{"name":"Who Has","id":"c9f8de4f-e8ef-4fd5-9128-79422781cd52","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"description":"<p>Your access token</p>\n","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":"https://controller_IP_address/api/bacnet/whohas?lowdeviceinstance={integer}&highdeviceinstance={integer}&objecttype={url-encoded-string}&proprietaryobject={integer}&objectinstance={integer}&networknumber={integer}","description":"<h2 id=\"send-request\">Send Request</h2>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"6285047a-095e-4832-a730-1e28a25b63b3","id":"6285047a-095e-4832-a730-1e28a25b63b3","name":"BACnet Client","type":"folder"}},"urlObject":{"path":["api","bacnet","whohas"],"host":["https://controller_IP_address"],"query":[{"key":"lowdeviceinstance","value":"{integer}"},{"key":"highdeviceinstance","value":"{integer}"},{"description":{"content":"<p>For example, valid%20object%20type. Case-insentivive.</p>\n","type":"text/plain"},"key":"objecttype","value":"{url-encoded-string}"},{"description":{"content":"<p>Required when Object Type is Proprietary, e.g. objecttype=proprietary. No effect otherwise.</p>\n","type":"text/plain"},"key":"proprietaryobject","value":"{integer}"},{"key":"objectinstance","value":"{integer}"},{"description":{"content":"<p>Optional</p>\n","type":"text/plain"},"key":"networknumber","value":"{integer}"}],"variable":[]}},"response":[{"id":"7dafb717-c794-4147-a118-432a05f81eca","name":"Who Has","originalRequest":{"method":"GET","header":[{"description":"Your access token","key":"Authorization","type":"text","value":"Bearer your_access_token"}],"url":{"raw":"https://192.168.30.51/api/bacnet/whohas?lowdeviceinstance=123&highdeviceinstance=456&objecttype=access%20CREDENtiAL&proprietaryobject=111&objectinstance=123&networknumber=111","protocol":"https","host":["192","168","30","51"],"path":["api","bacnet","whohas"],"query":[{"key":"lowdeviceinstance","value":"123"},{"key":"highdeviceinstance","value":"456"},{"key":"objecttype","value":"access%20CREDENtiAL","description":"For example, valid%20object%20type. Case-insentivive."},{"key":"proprietaryobject","value":"111","description":"Required when Object Type is Proprietary, e.g. objecttype=proprietary. No effect otherwise."},{"key":"objectinstance","value":"123"},{"key":"networknumber","value":"111"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Set-Cookie","value":"omni_session=VTJebQdiUT0ELgcjXT0JPlI0BztXJA1yAWALdVIhBWkNZlQ7D1cBPVY0CyAGbAUgVzwHY1kxV2tUIAcxADdaMlcyDTYGNwo5BzEOOAM9Uj9Va15hB29RNQRkBzJdMwk3UjQHZ1cyDTMBZgtlUjMFMA09VDAPOQFjVjELIAZsBSBXPAdhWTNXa1QgB2gAIVoJVzINZAZiCn0HZg58A3dSJVVoXiQHbFE2BGYHal0lCT5SPQczVygNMAEzCz5SfAUyDTlUew8xAW1Wcgs5BiQFaVc3B2BZOVdzVHcHcgA0WiRXDA1hBmEKagdtDnsDJlI8VSBebQdkUTYEbwdyXVcJYFJ3B3VXaw1gAWsLVFInBW4NfVQ8D2UBMVZ%2FCzUGeQVhVzAHflk2V3NUOQdyAGtaZ1dgDToGJApjB2IOfANwUlhVMl40ByJRbgQjBzldcwl2UiYHOldvDTsBNAswUmIFMA0%2BVGEPPAFmVmELNQZsBS4%3D; path=/; httponly"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Content-Length","value":"81"},{"key":"Date","value":"Tue, 22 Sep 2020 03:10:19 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": true,\n    \"message\": \"Result: Device Communication Control disabled<BR><BR>\"\n}"}],"_postman_id":"c9f8de4f-e8ef-4fd5-9128-79422781cd52"}],"id":"6285047a-095e-4832-a730-1e28a25b63b3","description":"<p>This endpoint provides BACnet Client services, namely <em>Read Property</em>, <em>Write Property</em>, <em>Change of Value</em>, <em>Who Is</em> and <em>Who Has</em>. Each service has its own requirement of query parameters as specified below. For more information on valid query parameter values , please refer to <code>Device Info</code> &gt; <code>BACnet Client</code> in Omni Web Application.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":false},"_postman_id":"6285047a-095e-4832-a730-1e28a25b63b3"},{"name":"Watches","item":[{"name":"List Watch Pages","id":"89c4c4ca-6a4b-4035-bbd3-e378a327487e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"<p>Your access token</p>\n","type":"text"}],"url":"https://controller_IP_address/api/watches","description":"<h2 id=\"list-of-watch-pages\">List of watch pages</h2>\n<p>List of names of all watch pages.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"242fa366-5946-4a9b-b767-1155a8037293","id":"242fa366-5946-4a9b-b767-1155a8037293","name":"Watches","type":"folder"}},"urlObject":{"path":["api","watches"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"0c7b0dbb-8b17-47bf-9326-3ff3e3d559d9","name":"List Watch Pages","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"Your access token","type":"text"}],"url":"https://192.168.30.51/api/watches"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Set-Cookie","value":"omni_session=B2AIO1s%2BB2tVf1dzDm4FMgNlV2tVJgB%2FVzYIdlYlAGxQOwJtVw9RbQZkDCdaMAInUjkCZg5mBDgFcQFjBm8PZwcwXWcEZQI%2BBDkEPFBgATYHZwhlWz8HYVVhVzkOZQU0AzNXZlU9AG9XMAhgVjMAYVBgAmdXZFFlBjUMJ1owAidSOQJkDmQEOAVxAW4GJw9cB2JdNARgAnUEZQR2UCQBdgc6CHJbMAdgVTdXOg52BTIDbFdjVSoAPVdlCD1WeAA3UGQCLVdpUT0GIgw%2BWngCblIyAmUObgQgBSYBdAYyD3EHXF0xBGMCYgRuBHFQdQFvB3IIO1s4B2BVPlciDgQFbAMmVyVVaQBtVz0IV1YjAGtQIAJqVz1RYQYvDDJaJQJmUjYCew5kBCAFaAF0Bm0PMgcwXWoEJgJrBGEEdlAjAQsHYAhiW34HOFVyV2kOIAV6A3dXalVtADZXYggwVm8ANFBtAjBXaFE8BjgMNFowAik%3D; path=/; httponly"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 12 Jun 2020 05:14:43 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"PageName\": \"Page Name One\"\n    },\n    {\n        \"PageName\": \"Page Name Two\"\n    }\n]"}],"_postman_id":"89c4c4ca-6a4b-4035-bbd3-e378a327487e"},{"name":"Watches in Page","id":"7701f714-42d8-41c4-a248-f83b3e930ab3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"<p>Your access token</p>\n","type":"text"}],"url":"https://controller_IP_address/api/watches/page_name","description":"<h2 id=\"watches-in-a-page\">Watches in a page</h2>\n<p>You can get all watches and their values within a watch page by passing a <em><strong>watch page name</strong></em> in the request URL.</p>\n<p>To avoid any unwanted error, it is advised that the <em><strong>watch page name</strong></em> parameter be <em>URL-encoded</em> before passed in. For example, <code>Page Name One</code> will be passed in as <code>Page%20Name%20One</code>.</p>\n<p>Please note that only the watches of the <em><strong>first</strong></em> page that matches the name will be returned, in case there are multiple watch pages with the same name.</p>\n<p>The response shows <em>name</em>, <em>value</em> and <em>unit</em> (if applicable) of watches in the page.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"242fa366-5946-4a9b-b767-1155a8037293","id":"242fa366-5946-4a9b-b767-1155a8037293","name":"Watches","type":"folder"}},"urlObject":{"path":["api","watches","page_name"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"f440cdd5-42e2-4035-a97e-19e42ca291c0","name":"Watches in Page","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"Your access token","type":"text"}],"url":"https://192.168.30.51/api/watches/Page%20Name%20One"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Set-Cookie","value":"omni_session=UjUAM1s%2BAm5Re1B0XDwFMlM1XWFUJ1olBGVdIwZ1AW0HbFE%2BAFhVaVMxDyQHbQEkBW5XM142V2tVIV0%2FAmsJYVBnDzVdPFFtVmtSaldnWm1SMgBtWz8CZFFlUD5cNwU0U2NdbFQ8WjUEY101BmMBYAc3UTQAM1VhU2APJAdtASQFblcxXjRXa1UhXTICIwlaUDUPZl05USZWN1IgVyNaLVJvAHpbMAJlUTNQPVwkBTJTPF1pVCtaZwQ2XWgGKAE2BzNRfgA%2BVTlTdw89ByUBbQVlVzBePldzVXZdKAI2CXdQCw9jXTpRMVY8UidXclo0UicAM1s4AmVROlAlXFYFbFN2XS9UaFo3BG5dAgZzAWoHd1E5AGpVZVN6DzEHeAFlBWFXLl40V3NVOF0oAmkJNFBnDzhdf1E4VjNSIFckWlBSNQBqW34CPVF2UG5ccgV6UyddYFRsWmwEMV1lBj8BNQc6UWMAPlUxU2cPNgdtASo%3D; path=/; httponly"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 12 Jun 2020 05:18:41 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"Value\": \"Off\",\n        \"WatchName\": \"AC1 Fan Status\"\n    },\n    {\n        \"Value\": 0,\n        \"Unit\": \"min\",\n        \"WatchName\": \"AC1 After Hours Timer\"\n    },\n    {\n        \"Value\": 15,\n        \"Unit\": \"min\",\n        \"WatchName\": \"AC1 AH Timer Value\"\n    },\n    {\n        \"Value\": \"Off\",\n        \"WatchName\": \"AC1 Control Enable Output\"\n    },\n    {\n        \"Value\": \"Off\",\n        \"WatchName\": \"AC1 Fan Request\"\n    },\n    {\n        \"Value\": \"On\",\n        \"WatchName\": \"User Variable Output\"\n    }\n]"}],"_postman_id":"7701f714-42d8-41c4-a248-f83b3e930ab3"},{"name":"Value of Watch in Page","id":"f253cc85-c80e-4cfd-a52c-d30bee7d6ca7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"<p>Your access token</p>\n","type":"text"}],"url":"https://controller_IP_address/api/watches/page_name/watch_name","description":"<h2 id=\"watch-value\">Watch value</h2>\n<p>You can get current values of a watch within a watch page by passing a <em><strong>watch page name</strong></em> followed by a <em><strong>watch name</strong></em> as parameters in the request URL.</p>\n<p>To avoid any unwanted error, it is advised that both <em><strong>watch page name</strong></em> and <em><strong>watch name</strong></em> parameter be <em>URL-encoded</em> before passed in. For example, <code>Page Name One</code> will be passed in as <code>Page%20Name%20One</code>.</p>\n<p>Please note that only the <em><strong>first</strong></em> watch page and subsequent <em><strong>first</strong></em> watch of that page that match their respective names will be returned, in case there are multiple watch pages or watches with the same name.</p>\n<p>The response shows <em>value</em>, <em>unit</em> (if applicable) and <em>writability</em> of the watch. If a watch is <code>writable</code>, its value can be changed.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"242fa366-5946-4a9b-b767-1155a8037293","id":"242fa366-5946-4a9b-b767-1155a8037293","name":"Watches","type":"folder"}},"urlObject":{"path":["api","watches","page_name","watch_name"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"c6c81eaf-d650-4040-b85a-c5492d7885e2","name":"Value of Watch in Page","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"Your access token","type":"text"}],"url":"https://192.168.30.51/api/watches/Page%20Name%20One/AC1%20AH%20Timer%20Value"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Set-Cookie","value":"omni_session=AWYJOlM2Uj5fdQYiDW0AN1QyU29SIQxzUDEOcFMgAGxVPgZpUwsAPFo4W3BTOQInBW4GYg5mADxTJ1IwWjNdNVptCTNXNgo2VmsEPAMzVGMBYQlkUzdSNF9rBmgNZgAxVGRTYlI6DGNQNw5mUzYAYVVlBmNTYAA0WmlbcFM5AicFbgZgDmQAPFMnUj1ae10OWj8JYFczCn1WNwR2A3dUIwE8CXNTOFI1Xz0Gaw11ADdUO1NnUi0MMVBiDjtTfQA3VWEGKVNtAGxafltpU3ECbgVlBmEObgAkU3BSJ1puXSNaAQllVzAKalY8BHEDJlQ6AXQJOlMwUjVfNAZzDQcAaVRxUyFSbgxhUDoOUVMmAGtVJQZuUzkAMFpzW2VTLAJmBWEGfw5kACRTPlInWjFdYFptCT5XdQpjVjMEdgNwVF4BZgljU3ZSbV94BjgNIwB%2FVCBTblJqDDpQZQ42U2oANFVoBjRTbQBmWmhbY1M5Aik%3D; path=/; httponly"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 12 Jun 2020 05:22:23 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"Value\": 15,\n    \"Unit\": \"min\",\n    \"Writable\": true\n}"}],"_postman_id":"f253cc85-c80e-4cfd-a52c-d30bee7d6ca7"},{"name":"Set Value of Watch in Page","id":"8e912a43-7a7b-4fd4-ba1f-73dbcbbc621c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"<p>Your access token</p>\n","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"value\": \"your_value\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://controller_IP_address/api/watches/page_name/watch_name","description":"<h2 id=\"write-new-value-to-a-watch\">Write new value to a watch</h2>\n<p>You can write a new value to a watch by passing a <em><strong>watch page name</strong></em> followed by a <em><strong>watch name</strong></em> as parameters in the request URL, then specify the value in the request body.</p>\n<p>To avoid any unwanted error, it is advised that the <em><strong>watch page name</strong></em> and <em><strong>watch name</strong></em> parameter be <em>URL-encoded</em> before passed in. For example, <code>Page Name One</code> will be passed in as <code>Page%20Name%20One</code>.</p>\n<p>Please note that only the <em><strong>first</strong></em> watch page and subsequent <em><strong>first</strong></em> watch of that page that match their respective names will be overwritten with the new value, in case there are multiple watch pages or watches with the same name.</p>\n<p>Also, only writable/editable watch can have its value overwritten.</p>\n<p>If the watch value is successfully overwritten, a successful response <code>{ \"status\": true }</code> will be returned.</p>\n","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":true,"source":{"_postman_id":"242fa366-5946-4a9b-b767-1155a8037293","id":"242fa366-5946-4a9b-b767-1155a8037293","name":"Watches","type":"folder"}},"urlObject":{"path":["api","watches","page_name","watch_name"],"host":["https://controller_IP_address"],"query":[],"variable":[]}},"response":[{"id":"d718c847-1427-43ff-8417-99bc8b31f70e","name":"Set Value of Watch in Page","originalRequest":{"method":"PUT","header":[{"key":"Authorization","value":"Bearer your_access_token","description":"Your access token","type":"text"},{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"value\": 20\r\n}","options":{"raw":{"language":"json"}}},"url":"https://192.168.30.51/api/watches/Page%20Name%20One/AC1%20AH%20Timer%20Value"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Strict-Transport-Security","value":"max-age=63072000; includeSubDomains; preload"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Date","value":"Fri, 12 Jun 2020 05:37:28 GMT"},{"key":"Server","value":"lighttpd"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": true\n}"}],"_postman_id":"8e912a43-7a7b-4fd4-ba1f-73dbcbbc621c"}],"id":"242fa366-5946-4a9b-b767-1155a8037293","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{accessToken}}"}]},"isInherited":false},"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""],"id":"b398d9ce-df14-4a82-b344-41d5023ea5a7"}},{"listen":"test","script":{"type":"text/javascript","exec":[""],"id":"41541a83-7425-44a4-a531-c30a9ed2cfd2"}}],"_postman_id":"242fa366-5946-4a9b-b767-1155a8037293","description":""}],"event":[{"listen":"prerequest","script":{"id":"df798377-f244-4e0b-9e58-e5f29d3c68fc","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"d5692957-aadc-44a5-88f8-3fb48ef15e16","type":"text/javascript","exec":[""]}}],"variable":[{"key":"API_URL","value":"https://controller_IP_address"},{"key":"username","value":"your_username"},{"key":"rawPassword","value":"your_raw_password"},{"key":"hashedPassword","value":"your_hashed_password"}]}