OpenADR Alliance · AsyncAPI Specification
Openadr Alliance Webhooks
Version
View Spec
View on GitHub
EnergyUnited StatesUtilitiesElectricityDemand ResponseGridDEROpenADRStandardsSmart GridEV ChargingCertificationAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-07-27'
method: derived
source: >-
openapi/openadr-3-1-1-openapi.yaml (+ 3.1.0 / 3.0.1),
https://github.com/grid-coordination/openadr3-specification/blob/main/doc/
description: >-
Webhook / notification catalog for OpenADR 3. Notifications are subscription-driven
rather than a fixed list of named event types: a client creates a subscription naming the
object types and operations it wants, and the VTN delivers a notification envelope for
each matching change. The catalog below is therefore the cross-product of objectTypes and
operations that a VTN can deliver, plus the two transport bindings.
mandatory_for_implementers: true
mandatory_note: 'notifiersResponse.WEBHOOK is documented as "Currently MUST be true" — every OpenADR 3 VTN has to support the webhook binding.'
subscription_model:
create_operation: createSubscription (POST /subscriptions)
registration_field: subscription.objectOperations[].callbackUrl
registration_note: >-
callbackUrl is set per objectOperations entry, not once per subscription, so one
subscription can fan different object/operation combinations out to different endpoints.
filter_fields: [objectOperations.objects, objectOperations.operations, targets]
filter_note: >-
Target-based filtering works on the webhook binding only. The MQTT binding cannot do
fine-grained target filtering; object privacy there is enforced with VEN-scoped topics.
discovery_operations:
- {operationId: listAllNotifiers, path: 'GET /notifiers', returns: which notifier bindings the VTN supports}
since: '3.0.1 (the notifyEvent callback first appears in the 3.0.1 release)'
delivery:
method: POST
content_type: application/json
payload_schema: notification
payload_members: [objectType, operation, object, targets]
success_response: '200 — "Your server returns this code if it accepts the callback."'
failure_response: '400 — problem document'
authentication:
mechanism: subscriber-supplied bearer token
field: subscription.objectOperations[].bearerToken
required: false
default: null
spec_text: >-
"User provided token. To avoid custom integrations, callback endpoints should accept
the provided bearer token to authenticate VTN requests."
gap: >-
The notifyEvent callback itself declares security: [{}] in the OpenAPI, so the bearer
token is documented in the subscription schema but not modelled on the callback
operation. There is no payload signature, no timestamp, and no replay defence — the
token is a shared secret the receiver must compare itself.
retries: not specified
ordering: not specified
deduplication: not specified
event_types:
note: >-
Every combination below is expressible; which ones a client receives is set by the
objectOperations on its subscription.
object_types: [PROGRAM, EVENT, REPORT, SUBSCRIPTION, VEN, RESOURCE]
operations: [CREATE, READ, UPDATE, DELETE]
operations_note: >-
3.1.0 issue 209 changed notification operations from HTTP verbs to CRUD names. READ is in
the enum but is not a state change; CREATE, UPDATE and DELETE are the meaningful ones.
bindings:
- name: WEBHOOK
required: true
transport: HTTPS POST to subscriber callbackUrl
filtering: object type, operation, and targets
- name: MQTT
required: false
since: '3.1.0'
transport: MQTT broker advertised by the VTN
serialization: JSON
authentication: [anonymous, oauth2 bearer token, certificate]
filtering: object type and operation, via VTN-assigned (optionally VEN-scoped) topics
topic_discovery_operations:
- listAllMqttNotifierTopicsPrograms
- listAllMqttNotifierTopicsProgram
- listAllMqttNotifierTopicsEvents
- listAllMqttNotifierTopicsProgramEvents
- listAllMqttNotifierTopicsReports
- listAllMqttNotifierTopicsSubscriptions
- listAllMqttNotifierTopicsVens
- listAllMqttNotifierTopicsVen
- listAllMqttNotifierTopicsResources
- listAllMqttNotifierTopicsVenEvents
- listAllMqttNotifierTopicsVenPrograms
- listAllMqttNotifierTopicsVenResources
asyncapi: asyncapi/openadr-alliance-notifications-asyncapi.yml