OpenADR Alliance · AsyncAPI Specification

Openadr Alliance Webhooks

Version

View Spec View on GitHub EnergyUnited StatesUtilitiesElectricityDemand ResponseGridDEROpenADRStandardsSmart GridEV ChargingCertificationAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
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