{ "info": { "name": "ecobee API", "description": "REST-like JSON API for reading and controlling registered ecobee smart thermostats. Data plane base URL: https://api.ecobee.com/1 (Bearer access token required). OAuth authorize/token endpoints live on the host root https://api.ecobee.com. NOTE: ecobee closed its developer program to new API-key registrations in late 2024; existing keys still function.", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{accessToken}}", "type": "string" } ] }, "variable": [ { "key": "baseUrl", "value": "https://api.ecobee.com/1", "type": "string" }, { "key": "authUrl", "value": "https://api.ecobee.com", "type": "string" }, { "key": "accessToken", "value": "", "type": "string" }, { "key": "refreshToken", "value": "", "type": "string" }, { "key": "clientId", "value": "", "type": "string" } ], "item": [ { "name": "Thermostat", "item": [ { "name": "Get Thermostats", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/thermostat?json={\"selection\":{\"selectionType\":\"registered\",\"selectionMatch\":\"\",\"includeRuntime\":true,\"includeSettings\":true,\"includeEvents\":true}}", "host": ["{{baseUrl}}"], "path": ["thermostat"], "query": [ { "key": "json", "value": "{\"selection\":{\"selectionType\":\"registered\",\"selectionMatch\":\"\",\"includeRuntime\":true,\"includeSettings\":true,\"includeEvents\":true}}" } ] }, "description": "Retrieves registered thermostats and their requested data (runtime, settings, events, sensors)." } }, { "name": "Get Thermostat Summary", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/thermostatSummary?json={\"selection\":{\"selectionType\":\"registered\",\"selectionMatch\":\"\",\"includeEquipmentStatus\":true}}", "host": ["{{baseUrl}}"], "path": ["thermostatSummary"], "query": [ { "key": "json", "value": "{\"selection\":{\"selectionType\":\"registered\",\"selectionMatch\":\"\",\"includeEquipmentStatus\":true}}" } ] }, "description": "Returns a compact revision-list summary to detect changes without re-fetching full objects. Poll at most once every three minutes." } } ] }, { "name": "Thermostat Update", "item": [ { "name": "Update Thermostat and Run Functions", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"selection\": {\n \"selectionType\": \"thermostats\",\n \"selectionMatch\": \"THERMOSTAT_ID\"\n },\n \"functions\": [\n {\n \"type\": \"setHold\",\n \"params\": {\n \"holdType\": \"nextTransition\",\n \"heatHoldTemp\": 700,\n \"coolHoldTemp\": 750\n }\n }\n ]\n}" }, "url": { "raw": "{{baseUrl}}/thermostat?format=json", "host": ["{{baseUrl}}"], "path": ["thermostat"], "query": [{ "key": "format", "value": "json" }] }, "description": "Updates writable thermostat properties and/or runs thermostat functions (setHold, resumeProgram, sendMessage, etc.). Requires smartWrite scope." } } ] }, { "name": "Reports", "item": [ { "name": "Get Runtime Report", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/runtimeReport?format=json&body={\"startDate\":\"2026-06-01\",\"endDate\":\"2026-06-07\",\"columns\":\"zoneAveTemp,zoneHeatTemp,zoneCoolTemp,compHeat1,compCool1\",\"selection\":{\"selectionType\":\"thermostats\",\"selectionMatch\":\"THERMOSTAT_ID\"}}", "host": ["{{baseUrl}}"], "path": ["runtimeReport"], "query": [ { "key": "format", "value": "json" }, { "key": "body", "value": "{\"startDate\":\"2026-06-01\",\"endDate\":\"2026-06-07\",\"columns\":\"zoneAveTemp,zoneHeatTemp,zoneCoolTemp,compHeat1,compCool1\",\"selection\":{\"selectionType\":\"thermostats\",\"selectionMatch\":\"THERMOSTAT_ID\"}}" } ] }, "description": "Retrieves historical five-minute-interval runtime data. Limited to 25 thermostats and a 31-day period per request." } }, { "name": "Get Meter Report", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/meterReport?format=json&body={\"startDate\":\"2026-06-01\",\"endDate\":\"2026-06-07\",\"selection\":{\"selectionType\":\"thermostats\",\"selectionMatch\":\"THERMOSTAT_ID\"}}", "host": ["{{baseUrl}}"], "path": ["meterReport"], "query": [ { "key": "format", "value": "json" }, { "key": "body", "value": "{\"startDate\":\"2026-06-01\",\"endDate\":\"2026-06-07\",\"selection\":{\"selectionType\":\"thermostats\",\"selectionMatch\":\"THERMOSTAT_ID\"}}" } ] }, "description": "Retrieves meter reading history for a set of thermostats. EMS and Utility accounts only." } } ] }, { "name": "Group", "item": [ { "name": "Get Groups", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/group?json={\"selection\":{\"selectionType\":\"registered\",\"selectionMatch\":\"\"}}", "host": ["{{baseUrl}}"], "path": ["group"], "query": [ { "key": "json", "value": "{\"selection\":{\"selectionType\":\"registered\",\"selectionMatch\":\"\"}}" } ] }, "description": "Retrieves the group and grouping data for the user's thermostats. Smart accounts only." } }, { "name": "Update Groups", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"selection\": {\n \"selectionType\": \"registered\",\n \"selectionMatch\": \"\"\n },\n \"groups\": [\n {\n \"groupName\": \"Upstairs\",\n \"thermostats\": [\"THERMOSTAT_ID\"],\n \"synchronizeVacation\": true\n }\n ]\n}" }, "url": { "raw": "{{baseUrl}}/group?format=json", "host": ["{{baseUrl}}"], "path": ["group"], "query": [{ "key": "format", "value": "json" }] }, "description": "Creates or updates the grouping of the user's thermostats. Smart accounts only." } } ] }, { "name": "Demand Response", "item": [ { "name": "List Demand Responses", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/demandResponse?json={\"selection\":{\"selectionType\":\"managementSet\",\"selectionMatch\":\"/\"}}", "host": ["{{baseUrl}}"], "path": ["demandResponse"], "query": [ { "key": "json", "value": "{\"selection\":{\"selectionType\":\"managementSet\",\"selectionMatch\":\"/\"}}" } ] }, "description": "Lists demand response events. Utility accounts only." } }, { "name": "Issue Demand Response", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"selection\": {\n \"selectionType\": \"thermostats\",\n \"selectionMatch\": \"THERMOSTAT_ID\"\n },\n \"demandResponse\": {\n \"name\": \"Peak Event\",\n \"message\": \"Utility peak load event\",\n \"event\": {\n \"startDate\": \"2026-07-15\",\n \"startTime\": \"16:00:00\",\n \"endDate\": \"2026-07-15\",\n \"endTime\": \"19:00:00\"\n }\n }\n}" }, "url": { "raw": "{{baseUrl}}/demandResponse?format=json", "host": ["{{baseUrl}}"], "path": ["demandResponse"], "query": [{ "key": "format", "value": "json" }] }, "description": "Issues a demand response event to a set of thermostats. Utility accounts only. Send a cancel request body to cancel an event." } } ] }, { "name": "Hierarchy", "item": [ { "name": "Register / Move / Assign Thermostats", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"operation\": \"register\",\n \"setPath\": \"/Location 1/Group 1\",\n \"thermostats\": \"THERMOSTAT_ID\"\n}" }, "url": { "raw": "{{baseUrl}}/hierarchy/thermostat?format=json", "host": ["{{baseUrl}}"], "path": ["hierarchy", "thermostat"], "query": [{ "key": "format", "value": "json" }] }, "description": "Registers, unregisters, moves, or assigns thermostats in the management-set hierarchy. EMS and Utility accounts only." } }, { "name": "List Management Sets", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/hierarchy/set?json={\"operation\":\"list\"}", "host": ["{{baseUrl}}"], "path": ["hierarchy", "set"], "query": [ { "key": "json", "value": "{\"operation\":\"list\"}" } ] }, "description": "Lists the management sets in the account hierarchy. EMS and Utility accounts only." } }, { "name": "Add / Rename / Move Set", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"operation\": \"add\",\n \"setName\": \"Group 1\",\n \"parentPath\": \"/Location 1\"\n}" }, "url": { "raw": "{{baseUrl}}/hierarchy/set?format=json", "host": ["{{baseUrl}}"], "path": ["hierarchy", "set"], "query": [{ "key": "format", "value": "json" }] }, "description": "Adds, removes, renames, or moves a management set. EMS and Utility accounts only." } }, { "name": "List Users", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/hierarchy/user?json={\"operation\":\"list\"}", "host": ["{{baseUrl}}"], "path": ["hierarchy", "user"], "query": [ { "key": "json", "value": "{\"operation\":\"list\"}" } ] }, "description": "Lists the users in the account hierarchy. EMS and Utility accounts only." } }, { "name": "Add / Update / Remove User", "request": { "method": "POST", "header": [{ "key": "Content-Type", "value": "application/json" }], "body": { "mode": "raw", "raw": "{\n \"operation\": \"add\",\n \"userName\": \"user@example.com\",\n \"setPath\": \"/Location 1\",\n \"privileges\": [\"hierarchy\"]\n}" }, "url": { "raw": "{{baseUrl}}/hierarchy/user?format=json", "host": ["{{baseUrl}}"], "path": ["hierarchy", "user"], "query": [{ "key": "format", "value": "json" }] }, "description": "Adds, updates, removes, or unregisters a user in the hierarchy. EMS and Utility accounts only." } } ] }, { "name": "Authorization", "item": [ { "name": "Authorize (ecobee PIN)", "request": { "auth": { "type": "noauth" }, "method": "GET", "header": [], "url": { "raw": "{{authUrl}}/authorize?response_type=ecobeePin&client_id={{clientId}}&scope=smartWrite", "host": ["{{authUrl}}"], "path": ["authorize"], "query": [ { "key": "response_type", "value": "ecobeePin" }, { "key": "client_id", "value": "{{clientId}}" }, { "key": "scope", "value": "smartWrite" } ] }, "description": "Starts the ecobee PIN flow; returns a PIN, an authorization code, and expiry. The user enters the PIN in the ecobee web portal to grant access." } }, { "name": "Token (Exchange PIN Code)", "request": { "auth": { "type": "noauth" }, "method": "POST", "header": [], "url": { "raw": "{{authUrl}}/token?grant_type=ecobeePin&code=AUTH_CODE&client_id={{clientId}}", "host": ["{{authUrl}}"], "path": ["token"], "query": [ { "key": "grant_type", "value": "ecobeePin" }, { "key": "code", "value": "AUTH_CODE" }, { "key": "client_id", "value": "{{clientId}}" } ] }, "description": "Exchanges the authorization code for an access token and refresh token." } }, { "name": "Token (Refresh)", "request": { "auth": { "type": "noauth" }, "method": "POST", "header": [], "url": { "raw": "{{authUrl}}/token?grant_type=refresh_token&refresh_token={{refreshToken}}&client_id={{clientId}}", "host": ["{{authUrl}}"], "path": ["token"], "query": [ { "key": "grant_type", "value": "refresh_token" }, { "key": "refresh_token", "value": "{{refreshToken}}" }, { "key": "client_id", "value": "{{clientId}}" } ] }, "description": "Refreshes an expired access token using the refresh token." } } ] } ] }