{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"8ac27267-45b6-43c5-b348-a7ee4d2ce08b","name":"ZOME's Control API","description":"## Intro\n\nZOME’s cloud-based microservices Platform is an energy aggregation platform that offers its licensees, users, and third-party vendors an ability to schedule energy curtailment (Demand Response) events to curtail power consumption of the devices that are connected or configured to connect remotely to ZOME.  This document provides the APIs for integration to/with the ZOME Platform.\n\nAs an advanced aggregation platform, ZOME has the following characteristics that will be helpful in understanding the API calls detailed below.\n\nWhenever a device joins the ZOME energy platform it gets aggregated at a specific location and under control based on the rules defined by the user during the onboarding process. These locations (and rules) are created during the onboarding process. These locations are intended to mirror the Feeder and Substation layout of the energy grid. These locations are structured in a hierarchy, where each location has any number of sub-locations.  The fields (and the associated locational based energy control and monitoring) don’t have to be used, but the default system assumes it is.\n\nThe ZOME platform allows platform users with the appropriate security rights to curtail power consumption in aggregates and down to the location level. This is done by scheduling demand response events that target specific locations, having an intersecting rules engine, and specifying the amount of power that needs to be curtailed.\n\nIn order to decide how much power to curtail, platform users with the appropriate security rights can use energy forecasting APIs to get a forecast of flexible power available over time periods, such as over the next 24 hours.\n\n## API Breakdown\n\nThe intent of this API document is to allow the DERMS operator or others involved in the workflow of DR and energy programs, to schedule DR events on the ZOME platform, directly or indirectly. These APIs are split into three core categories.\n\n1. Authentication - this is used to trade customer issued credentials for an authentication token that will be used to sign all subsequent requests to other APIs.\n\n2. Demand Response Event – this is used to schedule and manage demand response events.\n\n3. Energy Data – this is used to get information about the topology of the devices that are connected to the ZOME platform. It can also be used to get the available energy forecast.\n\nAll ZOME APIs expect to receive JSON payload (where applicable). All of the ZOME APIs are updated on a minutely basis, with requests being cached between the updates. **Exception: Energy Forecast is updated once every 24 hours.**\n\n## Core Use Patterns\n\nThe following outline core use patterns for the ZOME API, and detail how one would leverage various API endpoint to solve practical use cases.\n\n### Scheduling and Monitoring Demand Response Event\n\nIn order to schedule a demand response event, the user / DR program operator first needs a list of all the locations, and the available power at these locations. The user would query Energy Data API, to first get a grid topology which will provide location details, and optionally request energy forecast information at a specific endpoints if event are to be schedule sometime in the future.\n\nFollowing that, the user would call (after having been created in the system) event endpoints (as part of Demand Response Event), listing the desired curtailment target in aggregate, and locations that will be affected by that event. If the event needs to be modified, appropriate endpoints are provided as part of the Demand Response Event section.\n\nOnce the event has started the user can call Get Event Details endpoint for detailed information about the event. It will return detailed minutely-based data for that event.\n\nAll Demand Response Event APIs are updated on a minute basis, thus calling them at a higher frequency is ill-advised (as you’ll get needless repeat data), but not prohibited. ZOME will throttle the user if requests to the minutely updated endpoints will exceed 10 requests per minute (rpm).\n\n### Monitoring Grid State\n\nTo get detailed grid information the user should call Energy Data API. The grid topology endpoint will provide a list of all available locations. **Locations aggregate power (used and sheddable) values of their children.**\n\nIn order to get a forecast of projected power use at each location the user should leverage Energy Forecast API. This API will provide hourly power use projections for the next 24 hours. Projections are updated once every 24 hours.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"2821309","collectionId":"8ac27267-45b6-43c5-b348-a7ee4d2ce08b","publishedId":"S1ZxbVEN","public":true,"publicUrl":"https://postman.zomepower.com","privateUrl":"https://go.postman.co/documentation/2821309-8ac27267-45b6-43c5-b348-a7ee4d2ce08b","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"},"documentationLayout":"classic-double-column","version":"8.11.4","publishDate":"2019-07-31T18:04:12.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"statusCode":200},"environments":[{"name":"Production","id":"66da886e-4319-405a-b9ef-29188efde6c1","owner":"2821309","values":[{"key":"root","value":"https://api.zomepower.com","enabled":true}],"published":true}],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/768118b36f06c94b0306958b980558e6915839447e859fe16906e29d683976f0","favicon":"https://zomepower.com/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"},{"label":"Production","value":"2821309-66da886e-4319-405a-b9ef-29188efde6c1"}],"canonicalUrl":"https://postman.zomepower.com/view/metadata/S1ZxbVEN"}