{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"05b33b41-7df4-4cc7-a0bc-cb3b3222420f","name":"plantpredict-api","description":"# 1 - API Overview\n\n### 1.1 - RESTful\n\nThe development team places a high priority on RESTful web API patterns and practices. Deviations  \nfrom the purest REST concepts have been made where it has been deemed pragmatic to do so.  \nHTTP verbs are used as appropriate. PlantPredict’s API does not support so-called “HTTP verb  \ntunneling”.\n\n### 1.2 - State\n\nThe PlantPredict API has persistent storage for certain objects, such as Projects, Predictions, Modules,  \nInverters, Weather, etc. However, no concept of session state exists. Each request must supply the  \ncomplete set of inputs necessary to complete the operation. Sometimes that may be just the unique  \nidentifier, but it may also be the entire object or object graph.\n\nFor example, when you perform a POST operation for a Project you are expected to provide a complete  \nProject object. The data is persisted and a unique identifier is returned. You may retrieve the same  \nProject data at any time using a subsequent GET operation by passing in the unique identifier you  \nobtained in response to your POST operation.\\\\\n\nList operations are available for all necessary objects – the output from these lists includes the unique  \nidentifier for each object which can then be attached to a subsequent GET request. The system does  \nnot “remember” which Project you were working with last when performing operations – you must  \nalways supply the unique identifier.\n\n### 1.3 - Data Transfer Formats\n\nThe PlantPredict API transfers data primarily in JSON using the following request/response header:\n\n`Content-Type: application/json; charset=utf-8`\n\nWhen applicable, clients are expected to provide request body data to the API in JSON.\n\nClients may choose to provide the Accept request header (shown below) but the default response will  \nbe in JSON even if this header is omitted:\n\n`Accept: application/json`\n\nIt is possible to request text/xml but clients are discouraged from doing so as not all endpoints will  \nwork properly. XML support will be completely disabled in a forthcoming release of the API without  \nprior notice.\n\nIn certain cases data is provided in other formats such as Excel, CSV, etc.\n\n# 2 - Authentication\n\n### 2.1 - Overview\n\nThe PlantPredict Authorization server, hosted by AWS's cognito, offers the OAuth2 Password grant flow for direct API access. API Credentials are defined as a Client ID and Client Secret, which are generated by the system at the request of a Company Administrator. These credentials must be linked to an existing User Profile.\n\n### 2.2 - How to Generate API Credentials\n\nYour company administrator must perform a 1-time process per user to generate API credentials. To do so, follow these steps:\n\n1. Open the PlantPredict user interface and click on the Manage Account (gear icon / cogwheel) at the bottom left.\n    \n\n2\\. Locate the desired user and select their name.\n\n3\\. Click \"Generate API Credentials\" on the user's profile page\n\n4\\. Securely record the ClientID and Client Secret\n\n5\\. Communicate both values to the requesting user.\n\n_**The Client Password, Client ID and Client Secret are displayed only once after clicking the Generate API Credentials link. You must copy and store the Client Password, Client ID and Client Secret in a secure manner.**_\n\n_**If you lose track of your Client Password, Client ID and Client Secret you may click Generate API Credentials again (as many times as you wish) and a new Client Password,Client ID and Client Secret will be created, immediately invalidating the previous Client Password, Client ID and Client Secret**_\n\n### 2.3 - Generating an access token\n\n_**If you have imported the PlantPredict API collection, follow the steps below:**_\n\n1. Make sure you have the correct environment selected\n    \n\n2\\. Navigate to your environment variables section in Postman.\n\n3\\. Copy/paste your captured client ID and client secret into the corresponding fields.\n\n_**If you are manually configuring your API client, below are the authentication requirements**_\n\n#### Type `OAuth 2.0`\n\n#### Add auth data to `Request Headers`\n\n#### Header Prefix `Bearer`\n\n#### Grant Type `Client Credentials`\n\n#### Access Token URL `https://terabase-prd.auth.us-west-2.amazoncognito.com/oauth2/token`\n\n#### Scope `transactions/post transactions/get`\n\n#### Client Authentication `Send as Basic Auth header`\n\n# 3 - Changelog\n\nKeep track of the important changes to the PlantPredict API. Typically these include Quality-of-Life improvements or feature expansions.\n\n### **Release v12.13.0 - July 10th, 2025**\n\n- Updated weather download example to include optional CPRVersion parameter\n    \n\n### **Release v12.0.0 - September 9th, 2024**\n\n- Updated documentation to include new Shade Scene feature.\n    \n- PowerPlant request examples have been updated to reflect the addition of multipe irradiance optimization types.\n    \n\n### **Release v11.12.0 - October 5th, 2023**\n\n- Added support which allows for the specification of output parameters from the `/NodalJson` endpoint.\n    \n    - The optional parameter of `nodalParameters` can be provided in the request URL as a comma separated string with the requested output properties. The API will then only return the specified values.\n        \n\n### **Release v11.4.0 - May 18th, 2023**\n\n- Changed the following fields in the `/Nodal/Json` response to better match industry verbiage and UI counterparts\n    \n    - `ACPowerLoss` is now `ACCollectionLoss`\n        \n    - `CoolingLossAggregate` is now `ShelterCoolingLoss`\n        \n    - `DataAcquisitionAuxiliaryLoss` is now `DataAcquisitionSystemLoss`\n        \n\n### **Release v11.3.0 - May 4th, 2023**\n\n- Added 3 new inputs to the `dcField` within the `powerPlant` object to support **Diffuse Stow** tracker algorithms\n    \n    - `dcField.irradianceOptimization` // _enables diffuse stow calcluations_\n        \n    - `dcField.rotationSpeed` // _tracker rotation speed in degrees / second_\n        \n    - `dcField.nonIdealityFactor` // _also known as the \"Hesitation Factor\"_#\n        \n- `moduleTemperatureModelType` at the `prediction` level has two new acceptable input values\n    \n    - A value of `2` denotes the Nominal Operating Cell Temperature (NOCT) model\n        \n    - A value of `3` denotes the model will be defined at the `dcField` level.#\n        \n- A new field of `modTempModel` has been added to the `dcField.`This property can be used to define each individual dcField module temperature model.  \n    Acceptable inputs are:\n    \n    - `Heat Balance = 0`\n        \n    - `Sandia = 1`\n        \n    - `NOCT = 2`\n        \n    - Note: In order to set this field, the corresponding `prediction` must have a `moduleTemperatureModelType` of `3` (dcField defined)","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"3855302","team":3206345,"collectionId":"05b33b41-7df4-4cc7-a0bc-cb3b3222420f","publishedId":"UVsHUoHa","public":true,"publicUrl":"https://documenter-api.postman.tech/view/3855302/UVsHUoHa","privateUrl":"https://go.postman.co/documentation/3855302-05b33b41-7df4-4cc7-a0bc-cb3b3222420f","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.10.0","publishDate":"2024-03-07T18:13:01.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":null,"logoDark":null}},"statusCode":200},"environments":[{"name":"production","id":"96473e89-8e26-49cb-a9ad-12175bbb8e99","owner":"3855302","values":[{"key":"baseUrl","value":"https://api.plantpredict.terabase.energy","enabled":true,"type":"default"},{"key":"authorizationUrl","value":"https://terabase-prd.auth.us-west-2.amazoncognito.com/oauth2/token","enabled":true,"type":"default"},{"key":"scopes","value":"transactions/post transactions/get","enabled":true,"type":"default"},{"key":"clientId","value":"[YOUR_CLIENT_ID]","enabled":true,"type":"default"},{"key":"clientSecret","value":"[YOUR_CLIENT_SECRET]","enabled":true,"type":"default"},{"key":"nonprod","value":"","enabled":true,"type":"any"},{"key":"access_token","value":"","enabled":true,"type":"any"}],"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/41e9b78f3919dfdfad9e10667a1b92a7d1c0d41d980bdd439b00710716544f84","favicon":""},"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":"3855302-96473e89-8e26-49cb-a9ad-12175bbb8e99"}],"canonicalUrl":"https://documenter.gw.postman.com/view/metadata/UVsHUoHa"}