Green Button Connect My Data (CMD) ESPI Resource Server API

The Green Button Connect My Data resource server API as specified by the Green Button Alliance against NAESB REQ.21 ESPI 4.0 — read access to ApplicationInformation, Authorization, UsagePoint and bulk Batch resources under /espi/1_1/resource, returned as ESPI/Atom XML and protected by OAuth 2.0 (authorization code and client credentials). GBA publishes the contract openly under Apache 2.0 on GitHub; the only base URL documented in it is GBA's own ESPI sandbox, which returned HTTP 403 to anonymous probes on 2026-07-27 and which GBA states is unavailable pending a new platform in 2026Q3. This is a specification of the interface every certified Data Custodian implements, not a live service run by GBA.

Documentation

Specifications

Other Resources

OpenAPI Specification

green-button-alliance-green-button-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Green Button API Documentation
  description: Green Button API - ESPI 4.0
  version: 1.0.0
  contact:
    name: Green Button Alliance
    url: https://www.greenbuttonalliance.org
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
  - url: https://sandbox.greenbuttonalliance.org:8443/DataCustodian
    description: GBA Green Button Sandbox
components:
  schemas:
    ApplicationInformation:
      type: object
      description: Contains information about a Third Party Application requesting access to DataCustodian services
      xml:
        name: ApplicationInformation
        namespace: http://naesb.org/espi
      properties:
        dataCustodianId:
          type: string
          description: Identifier for the Data Custodian
        dataCustodianApplicationStatus:
          type: integer
          description: Current status of the application (provided by Data Custodian)
        thirdPartyApplicationDescription:
          type: string
          description: Description of the Third Party Application
        thirdPartyApplicationStatus:
          type: integer
          description: Current status of the Third Party Application
        thirdPartyApplicationType:
          type: integer
          description: Type of application (1=Web, 2=Desktop, 3=Mobile, 4=Device)
        thirdPartyApplicationUse:
          type: integer
          description: Expected use of the application
        client_name:
          type: string
          description: Name of the application (OAuth client_name)
        client_id:
          type: string
          description: Identifier for the Third Party (OAuth client_id)
        client_secret:
          type: string
          description: Secret for the client (OAuth client_secret)
        redirect_uri:
          type: array
          items:
            type: string
          description: OAuth redirect URIs
        scope:
          type: array
          items:
            type: string
          description: OAuth scopes
        grant_types:
          type: array
          items:
            type: string
          description: Supported OAuth grant types
    Authorization:
      type: object
      description: Represents a permission granted by an owner for access to a resource
      xml:
        name: Authorization
        namespace: http://naesb.org/espi
      properties:
        status:
          type: integer
          description: Status of the authorization (0=Revoked, 1=Active, 2=Denied)
        expires_at:
          type: integer
          format: int64
          description: Expiration period for the access token (Unix timestamp)
        grant_type:
          type: string
          description: Type of grant being negotiated
        scope:
          type: string
          description: Negotiated scope of the authorization
        token_type:
          type: string
          description: Type of token (Bearer)
        resourceURI:
          type: string
          format: uri
          description: URI to access the authorized resource
        authorizationURI:
          type: string
          format: uri
          description: URI to update or delete this authorization
        customerResourceURI:
          type: string
          format: uri
          description: URI to access PII data authorized for this customer
    UsagePoint:
      type: object
      description: Logical point on a network at which consumption or production is measured or estimated
      xml:
        name: UsagePoint
        namespace: http://naesb.org/espi
      properties:
        roleFlags:
          type: string
          description: Specifies roles assigned to this usage point
        ServiceCategory:
          type: integer
          description: Category of service (0=electricity, 1=gas, 2=water, etc.)
        status:
          type: integer
          description: Current status (0=off, 1=on)
        isSdp:
          type: boolean
          description: Whether this is a service delivery point
        isVirtual:
          type: boolean
          description: Whether this is a virtual (logical) usage point
        connectionState:
          type: string
          description: Connection state relative to network
    AtomLink:
      type: object
      description: Atom link element (RFC 4287)
      xml:
        name: link
        namespace: http://www.w3.org/2005/Atom
      properties:
        href:
          type: string
          format: uri
          description: Link URI
        rel:
          type: string
          description: Link relationship type (e.g., 'self', 'up')
        type:
          type: string
          description: Media type (e.g., 'application/atom+xml')
    AtomContent:
      type: object
      description: Atom content element containing ESPI resource (RFC 4287)
      xml:
        name: content
        namespace: http://www.w3.org/2005/Atom
      properties:
        type:
          type: string
          description: Content media type (typically 'application/xml')
    AtomEntry:
      type: object
      description: Atom feed entry (RFC 4287) containing ESPI resource
      xml:
        name: entry
        namespace: http://www.w3.org/2005/Atom
      properties:
        id:
          type: string
          format: uri
          description: Unique entry identifier
        title:
          type: string
          description: Entry title
        published:
          type: string
          format: date-time
          description: ISO 8601 publication timestamp
        updated:
          type: string
          format: date-time
          description: ISO 8601 last update timestamp
        link:
          type: array
          items:
            $ref: '#/components/schemas/AtomLink'
          description: Entry links (minimum 2 required per Atom spec)
        content:
          $ref: '#/components/schemas/AtomContent'
    AtomFeed:
      type: object
      description: Atom Feed (RFC 4287) containing ESPI resources
      xml:
        name: feed
        namespace: http://www.w3.org/2005/Atom
      properties:
        id:
          type: string
          format: uri
          description: Feed identifier
        title:
          type: string
          description: Feed title
        updated:
          type: string
          format: date-time
          description: ISO 8601 timestamp of last feed update
        link:
          type: array
          items:
            $ref: '#/components/schemas/AtomLink'
          description: Feed links (minimum 1 required per Atom spec)
        entry:
          type: array
          items:
            $ref: '#/components/schemas/AtomEntry'
          description: Feed entries containing ESPI resources
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://sandbox.greenbuttonalliance.org:8443/oauth/authorize
          tokenUrl: https://sandbox.greenbuttonalliance.org:8443/oauth/token
          scopes: {}
        clientCredentials:
          tokenUrl: https://sandbox.greenbuttonalliance.org:8443/oauth/token
          scopes: {}
security:
  - oauth2: []
tags:
  - name: ApplicationInformation
    description: Application Information endpoints
  - name: Authorization
    description: Authorization endpoints
  - name: Batch
    description: Batch data transfer endpoints
  - name: UsagePoint
    description: Usage Point endpoints
paths:
  /espi/1_1/resource/ApplicationInformation:
    get:
      tags:
        - ApplicationInformation
      summary: Retrieve all Application Information [FB_33]
      operationId: findApplicationInformations
      parameters:
        - name: published-max
          in: query
          description: Maximum publication date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: published-min
          in: query
          description: Minimum publication date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: updated-max
          in: query
          description: Maximum update date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: updated-min
          in: query
          description: Minimum update date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: max-results
          in: query
          description: Maximum number of results to return
          schema:
            type: integer
            format: int64
        - name: start-index
          in: query
          description: Index of first result (1-indexed)
          schema:
            type: integer
            format: int64
        - name: depth
          in: query
          description: Response depth control
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/AtomFeed'
        '202':
          description: Accepted
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/AtomFeed'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
  /espi/1_1/resource/ApplicationInformation/{applicationInformationId}:
    get:
      tags:
        - ApplicationInformation
      summary: Retrieve Application Information by Id [FB_3]
      operationId: getApplicationInformation
      parameters:
        - name: applicationInformationId
          in: path
          required: true
          description: Unique identifier for the ApplicationInformation resource
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/ApplicationInformation'
        '202':
          description: Accepted
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/ApplicationInformation'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
  /espi/1_1/resource/Authorization:
    get:
      tags:
        - Authorization
      summary: Find all Authorizations [FB_3]
      operationId: findAuthorizations
      parameters:
        - name: published-max
          in: query
          description: Maximum publication date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: published-min
          in: query
          description: Minimum publication date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: updated-max
          in: query
          description: Maximum update date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: updated-min
          in: query
          description: Minimum update date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: max-results
          in: query
          description: Maximum number of results to return
          schema:
            type: integer
            format: int64
        - name: start-index
          in: query
          description: Index of first result (1-indexed)
          schema:
            type: integer
            format: int64
        - name: depth
          in: query
          description: Response depth control
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/AtomFeed'
        '202':
          description: Accepted
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/AtomFeed'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
  /espi/1_1/resource/Authorization/{authorizationId}:
    get:
      tags:
        - Authorization
      summary: Retrieve Authorization by Id [FB_3]
      operationId: getAuthorization
      parameters:
        - name: authorizationId
          in: path
          required: true
          description: Unique identifier for the Authorization resource
          schema:
            type: string
        - name: published-max
          in: query
          description: Maximum publication date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: published-min
          in: query
          description: Minimum publication date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: updated-max
          in: query
          description: Maximum update date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: updated-min
          in: query
          description: Minimum update date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: max-results
          in: query
          description: Maximum number of results to return
          schema:
            type: integer
            format: int64
        - name: start-index
          in: query
          description: Index of first result (1-indexed)
          schema:
            type: integer
            format: int64
        - name: depth
          in: query
          description: Response depth control
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/Authorization'
        '202':
          description: Accepted
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/Authorization'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
  /espi/1_1/resource/Batch/Bulk/{bulkId}:
    get:
      tags:
        - Batch
      summary: Request Bulk transfer [FB_35]
      operationId: downloadBulkData
      parameters:
        - name: bulkId
          in: path
          required: true
          description: Unique identifier for the Bulk transfer
          schema:
            type: string
        - name: published-max
          in: query
          description: Maximum publication date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: published-min
          in: query
          description: Minimum publication date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: updated-max
          in: query
          description: Maximum update date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: updated-min
          in: query
          description: Minimum update date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: max-results
          in: query
          description: Maximum number of results to return
          schema:
            type: integer
            format: int64
        - name: start-index
          in: query
          description: Index of first result (1-indexed)
          schema:
            type: integer
            format: int64
        - name: depth
          in: query
          description: Response depth control
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/AtomFeed'
        '202':
          description: Accepted
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/AtomFeed'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
  /espi/1_1/resource/UsagePoint:
    get:
      tags:
        - UsagePoint
      summary: Retrieve all Usage Points [FB_33]
      operationId: findUsagePoints
      parameters:
        - name: published-max
          in: query
          description: Maximum publication date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: published-min
          in: query
          description: Minimum publication date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: updated-max
          in: query
          description: Maximum update date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: updated-min
          in: query
          description: Minimum update date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: max-results
          in: query
          description: Maximum number of results to return
          schema:
            type: integer
            format: int64
        - name: start-index
          in: query
          description: Index of first result (1-indexed)
          schema:
            type: integer
            format: int64
        - name: depth
          in: query
          description: Response depth control
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/AtomFeed'
        '202':
          description: Accepted
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/AtomFeed'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
  /espi/1_1/resource/UsagePoint/{usagePointId}:
    get:
      tags:
        - UsagePoint
      summary: Retrieve Usage Point by Id [FB_32]
      operationId: getUsagePoint
      parameters:
        - name: usagePointId
          in: path
          required: true
          description: Unique identifier for the UsagePoint resource
          schema:
            type: string
        - name: published-max
          in: query
          description: Maximum publication date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: published-min
          in: query
          description: Minimum publication date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: updated-max
          in: query
          description: Maximum update date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: updated-min
          in: query
          description: Minimum update date (RFC 3339 instant)
          schema:
            type: string
            format: date
        - name: max-results
          in: query
          description: Maximum number of results to return
          schema:
            type: integer
            format: int64
        - name: start-index
          in: query
          description: Index of first result (1-indexed)
          schema:
            type: integer
            format: int64
        - name: depth
          in: query
          description: Response depth control
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/UsagePoint'
        '202':
          description: Accepted
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/UsagePoint'
        '400':
          description: Bad Request
        '403':
          description: Forbidden