{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"843e5d00-92f1-4eb2-83b0-6bbeefb62ae2","name":"Metering Exemption API Reference","description":"# Status\n\nReady. The design is ready for participants to use.\n\n# Purpose\n\nParticipants use these APIs to manage Meter Exemptions in MSATS.\n\nThis documentation explains the standards, rules, context, conventions, parameters, and methods for the API endpoints.\n\n# Audience\n\nThe primary audience is implementers and maintainers of APIs in participant organisations.\n\nThe secondary audience is BAs and other interested parties.\n\n# Assumed knowledge\n\n- API and JSON or YAML basics\n    \n- [API Reference](https://visualisations.aemo.com.au/aemo/web-help/Content/API_Reference/API_introduction.htm)\n    \n- [Connecting to AEMO's Market system](https://visualisations.aemo.com.au/aemo/web-help/Content/ConnectingToAEMO/Interfaces.htm)\n    \n- [TLS Certificate Management](https://visualisations.aemo.com.au/aemo/web-help/Content/TLSCertificateManagement/TLSCertificateManagement.htm)\n    \n\n# Prerequisites\n\nBefore you can use the Meter Exemptions API you must:\n\n- Have a Participant ID with an effective date of registration. If your company is a Registered Participant, it is set up during the registration process.\n    \n- Have a user ID and password with access rights provided by your company's participant administrator. For details, see user rights access section.\n    \n- Have an API gateway and a TLS certificate. Participant Users require access rights to create or view API or web meter exemptions\n    \n- Test your submission in the pre-production environment before submitting to production. AEMO encourages participants to use the pre-production environment to test procedures and train staff.\n    \n\n# Response format\n\nThe default API response is JSON but you can request a csv payload from GET requests.\n\nDepending on the Accept header value, the response returns in one of the following formats:\n\n- **application/json:** JSON schema\n    \n- **text/csv**: csv payload.\n    \n\n# Parameters\n\n- exemptionList: Query parameters\n    \n- exemptionDetails: Query parameters\n    \n- submitExemption: Query and Path parameters\n    \n\n# Submission gateway addresses\n\n## MarketNet\n\n- Production: {Base URL}/NEMRetail/v1/meterExemption\n    \n- Pre-production: {Base URL}/NEMRetail/v1/meterExemption\n    \n\nSee [AEMO API Reference &gt; About API &gt; URL format](https://visualisations.aemo.com.au/aemo/web-help/Content/API_Reference/URL_format.htm) for the {Base URL}.\n\n## Internet direct\n\nProduction: {Base URL}/NEMRetail/v1/meterExemption\n\nPre-production: {Base URL}/NEMRetail/v1/meterExemption\n\nSee [AEMO API Reference &gt; About API &gt; URL format](https://visualisations.aemo.com.au/aemo/web-help/Content/API_Reference/URL_format.htm) for the {Base URL}.\n\n# Related rules and procedures\n\n- [Exemption Procedure – Metering Installation Malfunctions](https://aemo.com.au/-/media/files/stakeholder_consultation/consultations/nem-consultations/2021/msdr-and-mcpi/final-stage-amendment-documents/exemption-procedure-meter-installation-malfunctions-v12-clean.pdf?la=en)\n    \n- [Meter Exemption Guideline Supplement to the Exemption Procedure](https://aemo.com.au/-/media/files/stakeholder_consultation/consultations/nem-consultations/2023/metering-installation-exemption-automation-consultation/metering-installation-exemption-guideline-clean.pdf?la=en)\n    \n- [Metrology Procedure: Part A](https://aemo.com.au/-/media/files/stakeholder_consultation/consultations/nem-consultations/2021/msdr-and-mcpi/final-stage-amendment-documents/metrology-procedure-part-a-v731-minor-amendment-process-clean.pdf?la=en)\n    \n- [MSDR and MCPI Effective Date Change Process](https://aemo.com.au/consultations/current-and-closed-consultations/msdr-and-mcpi-effective-date-change-process)\n    \n\n# Related documents\n\n- [API Reference](https://visualisations.aemo.com.au/aemo/web-help/Content/API_Reference/API_introduction.htm) which provides an overview of AEMO's APIs\n    \n- [Guide to Metering Exemptions](https://portal.preprod.nemnet.net.au/help/Content/MSATSMeterExemptions/Metering_Exemptions.htm) (this guide is currently under development)\n    \n\n# User rights access\n\nParticipant administrators provide access to the Metering Exemptions API using the following interactive entities:\n\n- **exemptionList**: Web Service Get Meter Exemption List\n    \n- **exemptionDetails**: Web Service Get Meter Exemption\n    \n- **submitExemption**: Web Service Submit Meter Exemption\n    \n\nParticipant users provide the base-64 encoded URM credentials provided by their participant administrator in the Basic Auth header.\n\n# Compression\n\nAEMO APIs support HTTP protocol compression controlled by the HTTP request header attributes, allowing compression before sending and responding.\n\n**Note**: The following applies only to the payload.\n\n| **Parameter** | **Value** |\n| --- | --- |\n| Content-Type | application/json or text/plain |\n| Content-Encoding | gzip, compress, or deflate  <br>**Note**: If not provided no compression is assumed |\n| Accept-Encoding | gzip, compress, or deflate  <br>**Note**: If not provided no compression is assumed |\n\n# Throttling\n\nTo control traffic, AEMO throttles some API requests. If Participant ID requests exceed the throttling limit, the API returns a 429 or 422 response. For more details, see Response codes.\n\n| **Endpoint** | **Limit** |\n| --- | --- |\n| submitExemption | 1 request per second per participantId.  <br>  <br>The participantId is identified from the X-initiatingParticipantID request header parameter.  <br>  <br>Participants systems must manage this Throttling limit because if you submit multiple JSON requests for the same participantId at the same time, AEMO may reject some. |\n\n# Response codes\n\n<table><tbody><tr><th><p>Code</p></th><th><p>Description</p></th><th><p>Scenario</p></th></tr><tr><td><div><p>200</p></div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div><p>OK</p></div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div><p>The request is processed</p><p>The data payload is included</p></div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td></tr><tr><td><div><p>400</p></div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div>Missing required header</div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div>A required field is missing from the request header. See Header parameters</div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td></tr><tr><td><div><p>400</p></div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div>Invalid header</div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div>An invalid field is provided in the request header. Either an unexpected field is included in the request or the value provided is improperly formed. See Header parameters</div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td></tr><tr><td><div>400</div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div>Invalid page size</div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div>The page size provided is non-numeric or greater than the maximum allowed page size. See Query parameters</div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td></tr><tr><td><div>400</div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div>Invalid version</div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div>An invalid version is requested. See Header parameters</div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td></tr><tr><td><div>413</div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div>Payload Too Large</div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div>Request payload is larger than limits defined by the server. See Submission size.</div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td></tr><tr><td><div><p>429</p></div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div><p>Too Many Requests</p></div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div><p>The total number of inbound API requests received within a minute have exceeded the threshold. See Throttling.</p></div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td></tr><tr><td><div><p>500</p></div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div><p>Internal server error</p></div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div><p>An unforeseen error occurred processing the request</p></div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td></tr><tr><td><div><p>All other 5XX</p></div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div><p>Service unavailable</p></div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td><td><div><p>Service is unavailable</p></div><div contenteditable=\"false\"><div><div><div></div></div></div><div></div></div></td></tr></tbody></table>\n\n# About Metering Exemptions API\n\n## Meter exemption process\n\nThe Metering Exemptions API automates the registration and maintenance of a Meter Exemption and associated NMIs in MSATS. See the [Guide to Metering Exemptions](https://portal.preprod.nemnet.net.au/help/Content/MSATSMeterExemptions/Metering_Exemptions.htm) for details.\n\n## Metering exemption API details\n\n|  |  |\n| --- | --- |\n| **Available interfaces** | MSATS Web Portal > Metering Exemptions API |\n| **Participant role** | Metering Coordinator (MC)  <br>MSATS Role: Responsible Person (RP) |\n| **Functions** | Create, monitor, and resolve exemptions for their Participant ID |\n| **Payload format** | json or csv |\n| **CATS notifications** | None |\n\n## Submission rules\n\n- The entire submission must be valid otherwise it is rejected.\n    \n- The active Metering Coordinator in the NMI must match the Metering Coordinator on the exemption otherwise it is rejected.\n    \n\n## Submission size\n\nThe Meter Exemptions API accepts up to 75,000 NMIs in a JSON or csv request payload.\n\n## Submission response\n\nValid requests receive a 200 response and submission related data.\n\nIf there is an error in the submission request the API rejects the request and returns a response code with a description of the error. In this case correct the error and resubmit the request.\n\n# Validation\n\n| **Endpoint** | **Validation** | **Check** | **Error message** |\n| --- | --- | --- | --- |\n| All | Request header parameters | X-initiatingParticipantID is a mandatory field | Header Incorrect: Initiating Participant Id must be provided |\n|  |  | X-market is a mandatory field | Header Incorrect: Market must be provided |\n|  |  | X-market is NEM | Header incorrect: Invalid market |\n| exemptionList | Request query parameters | X-initiatingParticipantID matches the participantID if supplied | participantId must match header Participant ID |\n| exemptionDetails | Request query parameters | meterExemptionId must be a valid number | meterExemptionId must be a valid number |\n|  |  | NMI value is alphanumeric | NMI must be alphanumeric |\n| submitExemption | Request query parameters | Action is a mandatory field | Action is a mandatory field |\n\n# FAQs\n\n## General FAQs\n\nSee [Guide to Metering Exemptions FAQ](https://portal.preprod.nemnet.net.au/help/Content/MSATSMeterExemptions/FAQs.htm) for details.\n\n## API FAQs\n\n#### How is an exemptionID returned?\n\nA new exemptionID is returned as a payload response when a new meter exemption is successfully created 200 OK. See **submitExemption** endpoint for details.\n\n#### When will other Participants be notified of the NMI exemption?\n\nAny NMI with a status change is identified during the nightly MSATS batch process. When the NMI status is changes to Active, the two NMI standing data fields - Meter Malfunction Exemption Number and Meter Malfunction Exemption Expiry Date are populated. If the NMI status is changed from Active to another value, the fields' values are removed.\n\nUpdates are processed in a CR5101 which notifies all relevant participants on completion.\n\n#### When is a sandpit environment available to test the Metering Exemption APIs?\n\nIt is available in pre-production from 2 October 2023.\n\n# Glossary\n\nFor help with terms see:\n\n- [National Electricity Rules Glossary](https://www.aemc.gov.au/energy-system/energy-system-0)\n    \n- [Industry Terminology](https://aemo.com.au/learn/industry-terminology)\n    \n\n# Endpoints","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"25708789","team":4642115,"collectionId":"843e5d00-92f1-4eb2-83b0-6bbeefb62ae2","publishedId":"2s93RL1GeB","public":true,"publicUrl":"https://documenter-api.postman.tech/view/25708789/2s93RL1GeB","privateUrl":"https://go.postman.co/documentation/25708789-843e5d00-92f1-4eb2-83b0-6bbeefb62ae2","customColor":{"top-bar":"FFFFFF","right-sidebar":"492249","highlight":"B766C2"},"documentationLayout":"classic-double-column","customisation":null,"version":"8.10.0","publishDate":"2023-03-22T05:57:00.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"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/b42e365e749ff322a8d7438d3c88372c8e3122f8a65cc93a7cf89cc24a7781ad","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/2s93RL1GeB"}