Green Button Alliance · AsyncAPI Specification
Green Button Alliance Webhooks
Version
View Spec
View on GitHub
EnergyUnited StatesUtilitiesElectricityGasWaterSmart MeteringGreen ButtonESPIStandards BodyCertificationConsumer Energy DataAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-07-27'
method: searched
source: >-
https://www.greenbuttonalliance.org/function-blocks (FB_39, FB_69),
openapi/green-button-alliance-application-information-openapi.yml
(thirdPartyNotifyUri), and
https://github.com/GreenButtonAlliance/OpenESPI-GreenButton-Java/tree/main/contracts
spec_type: Webhooks
asyncapi_published: false
asyncapi_note: >-
Green Button has a real, certifiable push surface but GBA publishes NO AsyncAPI
document for it. This file is the webhook catalog, not a fabricated AsyncAPI. Green
Button's push model is notable in API design history - GBA's own article "How Green
Button made the pull-only OAuth standard support push APIs too"
(greenbuttonalliance.org/news) describes it as an extension of OAuth 2.0 rather
than a fork of it.
description: >-
The Data Custodian to Third Party notification channel. When new energy data is
available for an authorized subscription, the Data Custodian POSTs an ESPI BatchList
XML document to the Third Party's registered thirdPartyNotifyUri; the Third Party
then pulls each listed resource URI with its bearer token. Delivery is the push;
the payload is a list of URIs to fetch, not the data itself.
transport: HTTPS POST
delivery_model: notification-then-pull
certification:
function_blocks:
- id: FB_39
name: Usage Data PUSH Model
requirement: CMD-MANDATORY
url: https://www.greenbuttonalliance.org/fb39
categories: [Protocol]
- id: FB_69
name: Retail Customer PUSH Model
requirement: CMD-MANDATORY
url: https://www.greenbuttonalliance.org/fb69
note: >-
Both push Function Blocks are CMD-MANDATORY - a Data Custodian cannot be Green
Button Connect My Data certified without implementing the push model.
subscription_registration:
field: thirdPartyNotifyUri
resource: ApplicationInformation
description: >-
"URI value used to notify the Third Party application the Data Custodian has data
available" - registered by the Third Party at client-registration time (RFC 7591),
not per-subscription.
example: https://sandbox.greenbuttonalliance.org:8443/ThirdParty/espi/1_1/Notification
source: openapi/green-button-alliance-application-information-openapi.yml
events:
- name: BatchList notification
direction: data-custodian-to-third-party
method: POST
target: '{thirdPartyNotifyUri}'
content_type: application/xml
payload_root: BatchList
namespace: http://naesb.org/espi
payload_shape: >-
<BatchList> containing one or more <resources> elements, each a fully-qualified
subscription batch URI, optionally carrying published-min / published-max bounds
for the window of new data.
example_file: examples/green-button-alliance-notification-batchlist.xml
example_value: >-
https://{datacustodian}/DataCustodian/espi/1_1/resource/Batch/Subscription/503888?published-min=2025-01-01T00:00:00Z&published-max=2025-02-01T00:00:00Z
consumer_action: >-
GET each listed resource URI with the subscription's OAuth 2.0 bearer token to
retrieve the Atom/ESPI feed of new data.
- name: Back-channel subscription provisioning
direction: authorization-server-to-data-custodian
method: POST
target: '{dc}/internal/backchannel/v1/subscriptions'
content_type: application/json
success_status: 201
description: >-
At token-mint time the Authorization Server calls the Data Custodian to provision
the Authorization plus Subscription(s) the customer approved on the DC-hosted
authorization screen. GBA's README is explicit that this is an IMPLEMENTATION
contract, not part of the ESPI standard.
request_fields: [correlation_id, client_id, granted_scope, retail_customer_id, selected_usage_point_ids]
response_fields: [authorization_id, resource_subscription_id, customer_subscription_id, resource_uri, authorization_uri, customer_resource_uri]
example_request: examples/green-button-alliance-backchannel-subscription-request.json
example_response: examples/green-button-alliance-backchannel-subscription-response.json
internal: true
security:
scheme: OAuth 2.0 bearer on the subsequent pull; the notification POST itself is authenticated per the Data Custodian's registration with the Third Party.
detail: authentication/green-button-alliance-authentication.yml
signature_verification: null
signature_note: No webhook signing scheme (HMAC header, JWS) is documented in any public GBA artifact.
retry_policy: null
retry_note: No retry, backoff or delivery-guarantee contract is published; the normative rules sit in the paywalled NAESB REQ.21 standard.
alternatives:
- name: SFTP bulk transfer
function_blocks: [FB_34 SFTP for Usage Data Bulk, FB_66 SFTP for Retail Customer Bulk]
- name: REST bulk transfer
function_blocks: [FB_35 REST for Usage Data Bulk, FB_67 REST for Retail Customer Bulk]
operation: openapi/green-button-alliance-green-button-api-openapi.yml#downloadBulkData
gaps:
- No AsyncAPI document.
- No event catalog page on greenbuttonalliance.org - the push model is documented only as certification Function Blocks and via the paywalled standard.
- No webhook signature or replay-protection scheme is published.