{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"d0b2736d-c190-48f7-b263-ea397f8f6fad","name":"Envo Public API v3.0.0","description":"The Envo Public API is the single entry point for integrating with the Envo platform. It  \nexposes a curated, read-oriented slice of the platform — sites and their building metadata,  \nparameters and measurement data, energy consumption and production, and deviations — behind  \none address and one login.\n\nBehind it sit several Envo services, but that is an implementation detail: everything is  \nserved under `api/v1`, documented here, and reachable with the same credentials.\n\n## Authentication\n\nEvery request needs an OAuth2 **client credentials** token, sent as  \n`Authorization: Bearer` . Envo issues you a client id and secret; exchange them at the  \ntoken endpoint for an access token and reuse it until it expires.\n\nMost endpoints are **site-scoped** — the route contains `{siteId}` and your client must hold  \nthe relevant permission for _that_ site. A `403` means the token is valid but the client  \nlacks the permission on that site, which is different from a `401` (missing, expired or  \ninvalid token).\n\nErrors come back as RFC 9457 problem documents (`application/problem+json`), with `title`,  \n`status` and — where there is something specific to say — `detail`.\n\n## What changed in 3.0.0\n\n**Parameter logs became measurements.** The biggest change. The old per-parameter log routes  \nare gone:\n\n| 1.x | 2.0.0 |\n| --- | --- |\n| `GET /api/v1/sites/{siteId}/parameters/{parameterId}/logs` | `GET /api/v1/sites/{siteId}/measurements?parameterIds=…` |\n| `GET …/logs/aggregated` | `GET /api/v1/sites/{siteId}/measurements/aggregated?parameterIds=…` |\n\nThe parameter moves out of the path into a required `parameterIds` query parameter, which  \ntakes a comma-separated list — so one request can now cover several parameters instead of one  \nper call. `startTime` and `endTime` are required. The response payloads change name to match  \n(`MeasurementResponse`, `AggregatedMeasurementResponse`).\n\n**Nine write endpoints were withdrawn.** `POST`, `PUT` and `DELETE` on  \n`/api/v1/building-types`, `/api/v1/building-categories` and  \n`/api/v1/sites/{siteId}/site-information` are no longer part of the public API. The building  \ntaxonomy is managed internally; these are read-only now.\n\n**`GET /api/v1/sites`** **returns more.** Each item is now a full site — timezone, address,  \ncoordinates, a new `state` field — rather than just id and name. Existing code reading `id`  \nand `name` keeps working.\n\n**`GET /api/v1/sites/{id}`** **is now site-scoped.** Previously any authenticated client could  \nread any site. It now requires access to that specific site, so an integration that reads  \nsites it is not granted will start getting `403`. Worth checking before you upgrade.\n\n**A lot was added** — 42 new endpoints, taking the API from 23 to 56. Chiefly energy data  \n(consumption by category or tenant, energy flow, solar production, grid export, indoor and  \noutdoor temperature, meter structure and distributions), building tenants, and deviations:  \nreading active deviations, fetching the acknowledge form for a category, and acknowledging  \nthem.\n\n## Using the collection\n\n**Set the collection variables first.** `baseUrl` is the API address for your environment;  \n`clientId` and `clientSecret` are the credentials Envo issued you; `tokenUrl` is the token  \nendpoint for the same environment. Everything else inherits from these.\n\n**Set authorization once, on the collection**, so individual requests do not each carry their  \nown. On the collection's **Authorization** tab choose OAuth 2.0 with the client credentials  \ngrant, point it at `tokenUrl`, then **Get New Access Token**. Requests inherit it and run  \nwithout further setup until the token expires; repeat the same step to refresh.\n\n**Start with** **`GET /api/v1/sites`****.** It confirms the credentials work and returns the sites  \nyour client can reach. Take a `siteId` from the response and use it in the site-scoped  \nrequests, most of which take `siteId` as a path variable.\n\nRequests are grouped by area — Sites, Parameters, Measurements, Consumption, Deviations and  \nso on — mirroring the sections in this documentation.\n\n**A couple of practical notes.** List endpoints are paginated with `pageNumber` and  \n`pageSize`. If you need to report a problem, include the `X-Correlation-Id` from the response  \nheaders: it is how Envo traces a single request through the platform.\n\nContact Support:  \nName: Envo Platform Team","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"52168095","team":13367098,"collectionId":"d0b2736d-c190-48f7-b263-ea397f8f6fad","publishedId":"2sBXitBmYZ","public":true,"publicUrl":"https://api-doc.envodev.no","privateUrl":"https://go.postman.co/documentation/52168095-d0b2736d-c190-48f7-b263-ea397f8f6fad","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"dark","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":null,"colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"}}]}},"version":"8.12.6","publishDate":"2026-05-28T16:40:39.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":null,"logoDark":null}},"statusCode":200},"environments":[],"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/6adfb105c644339b899ffd07c33365458b4ddd7ae389febb57809d74f7ff0d27","favicon":"https://envodev.no/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"}],"canonicalUrl":"https://api-doc.envodev.no/view/metadata/2sBXitBmYZ"}