n3rgy · AsyncAPI Specification
N3Rgy Push Notifications Webhooks
Version
View Spec
View on GitHub
EnergyUnited KingdomUtilitiesSmart MeteringElectricityGasSmart Meter DataConsentMeteringEnergy DataAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-07-27'
method: searched
source: >-
https://customer-api-user-manuals.data.n3rgy.com/requests/ (Push Notification
section) and openapi/n3rgy-customer-service-api-v2-openapi.yaml
(/push/configuration, /push/status).
spec_type: none
asyncapi_published: false
description: >-
n3rgy DOES operate an event/push surface — "Push Notification" — but publishes
no AsyncAPI document for it. Instead of polling the reading endpoints, a
customer registers a single HTTPS endpoint (`uri`) and a per-device-type
subscription list, and n3rgy pushes to that endpoint when new readings arrive
for the subscribed utility/reading-type combinations. The configuration and the
delivery status are both managed through the REST contract, which is what makes
the surface machine-discoverable at all. What n3rgy does NOT publish is the
PAYLOAD SCHEMA of the pushed message, nor a signing/verification scheme, nor a
retry policy — so no AsyncAPI document has been generated here; fabricating one
would invent a message contract that does not exist. The delivery-status
endpoint (GET /push/status) is the only feedback channel, returning the last
HTTP status and response body n3rgy saw from the subscriber.
subscription_model:
style: single global endpoint per customer, subscribed by device type + utility type
registration: POST /push/configuration
endpoint_field: uri
scope: customer account (one URI for the whole account, not per property)
device_types:
- name: esme
label: Electricity Smart Metering Equipment
utility_types: [IMPORT, EXPORT, TARIFF]
- name: gsme
label: Gas Smart Metering Equipment
utility_types: [IMPORT, TARIFF]
replace_semantics: >-
POST /push/configuration REPLACES all existing configuration. Sending an
empty body resets both esme and gsme lists. Setting esme or gsme to an empty
list removes those configurations. Setting `uri` to empty does NOT remove the
registered endpoint.
partial_validation: >-
"If the entire body is invalid, an error is returned... If only a few entries
are invalid, they are highlighted in the response and the process continues to
the valid entries."
events:
- name: reading available
trigger: >-
A new reading of a subscribed reading type becomes available for a device
type the customer has subscribed. The developer guide documents the
SUBSCRIPTION dimensions (device type x utility type) but not a named event
catalogue.
subscribed_by:
- {device_type: esme, utility_type: IMPORT}
- {device_type: esme, utility_type: EXPORT}
- {device_type: esme, utility_type: TARIFF}
- {device_type: gsme, utility_type: IMPORT}
- {device_type: gsme, utility_type: TARIFF}
payload_schema: not published
delivery: HTTP POST to the customer-registered uri
signing: not published
retry_policy: not published
management_operations:
- operationId: GetPushNotificationConfiguration
method: GET
path: /push/configuration
summary: Read the current push configuration
response_example: |
{
"pushNotificationURL": "endpoint.com",
"deviceConfigurations": {
"ELECTRICITY": ["IMPORT", "TARIFF"]
}
}
- operationId: EditPushNotificationConfiguration
method: POST
path: /push/configuration
summary: Create or replace the push configuration
success_status: 204
request_example: |
{
"uri": "www.dummy.url.com",
"esme": ["IMPORT", "TARIFF"],
"gsme": ["IMPORT"]
}
schema: PushNotificationBodyRequest
- operationId: DeletePushNotificationConfiguration
method: DELETE
path: /push/configuration
summary: Delete the push configuration
- operationId: RetrievePushNotificationStatus
method: GET
path: /push/status
summary: Read the outcome of the most recent delivery attempt
response_example: |
{
"lastHttpStatus": "200",
"lastResponse": "Response Body obtained if any exists.",
"date": "2024-06-02T12:00:00.0000"
}
errors:
- {status: 404, message: No records for push notification status found at this time.}
subscriber_requirements:
- Expose a public HTTPS endpoint that accepts POST.
- >-
Return a 2xx quickly — n3rgy records the last HTTP status and response body
and exposes them via GET /push/status; that is the only delivery telemetry.
- >-
Do not rely on a signature: n3rgy publishes no webhook signing secret or
signature header. Treat the pushed payload as untrusted and re-fetch
authoritative data with RetrieveDataForReadingType.
gaps:
- No AsyncAPI (or any) machine-readable description of the pushed message.
- No published payload schema, event name, or event id.
- No signing / verification mechanism documented.
- No retry, backoff or dead-letter policy documented.
- >-
One endpoint per customer account — no per-property or per-MPxN routing, so
subscribers must fan out themselves.
history:
- {version: '1.12', change: Push Notification API specification added to the developer guide}
- {version: '1.15', change: Push Notification specification enhanced}
cross_references:
openapi: openapi/n3rgy-customer-service-api-v2-openapi.yaml
conventions: conventions/n3rgy-conventions.yml
errors: errors/n3rgy-problem-types.yml