{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"87701887-506b-4f05-b204-fed896d5a7b4","name":"WEM DER API Reference","description":"The Distributed Energy Resource Register (DERR) is an AEMO platform used by the Network Operator in the Wholesale Electricity Market (WEM) to register and maintain DER Generation Information. This information is submitted and managed using three APIs:\n\n- OAuth API: Generating an OAuth access token to access the WEM DER NMI and WEM DER Installation APIs.\n- WEM DER NMI API: Creating, updating and retrieving NMI records.\n- WEM DER Installation API: Creating, updating and retrieving DER Installation records.\n    \n\n# Audience\n\nThe primary audience is IT staff in the Network Operator's organisation.\n\n**Note**: WEM DER APIs access and use is limited to AEMO and the Network Operator only.\n\n# Assumed knowledge\n\n<ol><li><p>API and JSON or YAML basics.</p></li><li><p><a href=\"https://visualisations.aemo.com.au/aemo/web-help/Content/API_Reference/API_introduction.htm?TocPath=API%20Reference|_____0\">AEMO's API Reference</a>.</p></li><li><p><a href=\"https://visualisations.aemo.com.au/aemo/web-help/Content/TLSCertificateManagement/TLSCertificateManagement.htm?TocPath=TLS&nbsp;Certificate\">TLS Certificate Management</a>.</p></li></ol>\n\n# Prerequisites\n\nBefore you can use the WEM DER APIs, you must:\n\n- Understand the procedures governing the operation of the market relating to  \n    wholesale trading of electricity and the provision of ancillary services.\n- Have an API gateway and a TLS certificate.\n- Test your submission in the pre-production environment before submitting to production. AEMO encourages to use the pre-production environment to test procedures and train staff.\n    \n\n# Parameters\n\nPath or query parameters.\n\n# API portal\n\n### Pre-production\n\n[WEM DER NMI API](https://developer-portal-ppd.aemo.com.au/wem-der-nmi)  \n[WEM Installation API](https://dev.aemo.com.au/wem-der-installation-v2)\n\n### Production\n\n[WEM DER NMI API](https://dev.aemo.com.au/wem-der-nmi%22)\n\n[WEM Installation API](https://dev.aemo.com.au/wem-der-installation-v2)\n\n# Related information\n\n- [AEMO | WEM Procedures](https://www.aemo.com.au/energy-systems/electricity/wholesale-electricity-market-wem/procedures-policies-and-guides/procedures)\n- [AEMO | DER data dashboard WA](https://aemo.com.au/energy-systems/electricity/der-register/data-der/data-dashboard-wa)\n- [AEMO | DER Register Reference Information](https://aemo.com.au/energy-systems/electricity/der-register/der-register-reference-information)\n- [WEM DER Technical Specification V2.00](https://aemo.com.au/-/media/files/market-it-systems/der-guides/wem-der-register-technical-specification-and-release-schedule.pdf?la=en)\n    \n\n# Authorisation\n\nAuthorisation is only applicable to AEMO and the Network Operator.\n\nWEM DER Installation API requests and WEM DER NMI API requests are authorised with an OAuth token. The token is created using API keys generated in an app in the API portal. For help, see the [WEM DERR Technical Specification](https://aemo.com.au/-/media/files/market-it-systems/der-guides/wem-der-register-technical-specification-and-release-schedule.pdf?la=en).\n\nWhen making an API request, include the OAuth token string in a HTTPS Authorization header.\n\n<h1>Compression</h1>\n\n<p>You can submit your API requests compressed or uncompressed. Compression protocols are gzip or deflate.</p>\n\n<h1>Throttling</h1>\n\n<p>To control traffic, AEMO implements Throttling on API Endpoint requests.</p>\n\nThe WEM DER Installation API has a rate limit of 6000 requests per minute. When calls exceed the limit, a 429 “Too Many Requests” response code is returned.\n\n<h1>Submission gateway addresses</h1>\n\n## Internet\n\n| **Environment** | **Base URL** |\n| --- | --- |\n| NMI API  <br>pre-production | [https://partner.api.preprod.aemo.com.au/wem/v1/der-register](https://partner.api.preprod.aemo.com.au/wem/v1/der-register) |\n| NMI API  <br>production | [https://partner.api.prod.aemo.com.au/wem/v1/der-register](https://partner.api.prod.aemo.com.au/wem/v1/der-register) |\n| V2 WEM DER Installation API  <br>pre-production | [https://partner.api.preprod.aemo.com.au/v2/der-register](https://partner.api.preprod.aemo.com.au/v2/der-register) |\n| V2 WEM DER Installation API  <br>production | [https://partner.api.aemo.com.au/v2/der-register](https://partner.api.aemo.com.au/v2/der-register) |\n\n## OAuth\n\n| **Environment** | **Base URL** |\n| --- | --- |\n| Pre-production | [https://api.preprod.aemo.com.au/oauth/v1/](https://api.preprod.aemo.com.au/oauth/v1/) |\n| Production | [https://api.prod.aemo.com.au/oauth/v1/](https://api.prod.aemo.com.au/oauth/v1/) |\n\n# Submission size\n\nA submission request or response has a payload limit of 10 MB (compressed or uncompressed).\n\n# Identifying API calls\n\nA transaction ID is assigned to every API call to uniquely identify every API request to help with support and triaging issues.\n\nIf there is an issue with a request, the Network Operator can provide the Transaction ID provided in the API response to assist AEMO in identifying any issues.\n\n<h1>Response codes</h1>\n\n| Response | Value | Description |\n| --- | --- | --- |\n| Successful response | 200 | 200 OK The API request was successful. |\n| Successful Created response | 201 | 201 Created The API request was successful and created a new record. |\n| Bad Request | 400 | 400 Bad Request The API request was malformed, check the submitted request parameters or body are valid. |\n| Invalid Credentials | 401 | 401 Unauthorized. Check that the provided credentials are correct and have not expired. |\n| Not found | 404 | 404 Resource Not Found - refer to example below. The URL used for the API is incorrect. |\n| Bad HTTP Method | 405 | 405 Method Not Allowed - refer to example below. The HTTP Method (GET, POST, PUT, etc…) is not valid for the API. |\n| Content-Length header required | 411 | 411 Length Required The Content-Length HTTP header was not provided. |\n| Unsupported media type | 415 | 415 Unsupported Media Type The Content-Type header must be application/json |\n| Business validation error | 422 | 422 Unprocessable Entity The request was well formed but the submitted content failed business validation rules. |\n| Too Many Requests | 429 | 429 Too Many Requests DER Register calls allow a maximum of 6000 requests per minute. Check that the API calls are not exceeding this limit. |\n| Internal Server Error | 500 | 500 Internal Server Error There was an unexpected error in AEMO’s systems while processing this request. Try again, or if this continues then raise a support call to AEMO. |\n| Application Unavailable | 503 | 503 Service Unavailable The API is not currently available. Check if there is a planned or unplanned outage. |\n\n<h1>Validation</h1>\n\nThere are several validation levels to ensure data is correctly submitted to the WEM DER Register by the Network Operator:\n\n- WEM DER NMI API: Two validation levels – JSON schema validation and first level validations.\n- WEM DER Installation API: Three validation levels – JSON schema validation, first level validations and second level validations.\n    \n\nFor more details on the validation errors and how to resolve them, see the [WEM DER Technical Specification v2.00](https://aemo.com.au/-/media/files/market-it-systems/der-guides/wem-der-register-technical-specification-and-release-schedule.pdf?la=en).\n\n## JSON schema validations\n\nAEMO's system validates the API request payload. If it fails validation, a 400 HTTP response status code is returned. A 1020 JSON error code can also be returned in the response with specific details of the error.\n\n## First level validation\n\nFirst level validations check the data submitted for a create or update API requests are valid according to the validation rules.\n\nA 200 or 201 response code indicates a successful request and the change is accepted to the DER Register data.\n\nIf the request fails first level validation the API returns a 422 HTTP response code. First level validation errors are indicated in the “code” field with an error code in the range of 1000 to 1999 with details of the error.\n\n## Second level validation\n\nWhen creating or updating DER Register records using the WEM DER Installation API, second level validations occur after the request has passed the first level validations and the API returns a successful 201 or 200 response.\n\nIf the request fails second level validation, errors are indicated in the response under “exceptions” with an error code of 2023, 2024 or 2040 and details of the error. The submitted data is accepted, but the installation stage is set to ‘Conditional’, and the data is recorded in the DER Register along with the exceptions.\n\nSee the WEM DERR Technical Specification for more information on resolving errors.\n\n# API endpoints and response details","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"26491644","collectionId":"87701887-506b-4f05-b204-fed896d5a7b4","publishedId":"2s9Xxzsrcb","public":true,"publicUrl":"https://documenter-api.postman.tech/view/26491644/2s9Xxzsrcb","privateUrl":"https://go.postman.co/documentation/26491644-87701887-506b-4f05-b204-fed896d5a7b4","customColor":{"top-bar":"FFFFFF","right-sidebar":"492249","highlight":"B766C2"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"212121","right-sidebar":"492249","highlight":"B766C2"}},{"name":"light","logo":null,"colors":{"top-bar":"FFFFFF","right-sidebar":"492249","highlight":"B766C2"}}]}},"version":"8.11.6","publishDate":"2023-11-23T01:34:32.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/768118b36f06c94b0306958b980558e6915839447e859fe16906e29d683976f0","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"}],"canonicalUrl":"https://documenter.gw.postman.com/view/metadata/2s9Xxzsrcb"}