Xcel Energy Green Button Connect My Data API

Green Button Connect My Data API based on the ESPI (Energy Services Provider Interface) standard developed by NAESB. Enables authorized third-party applications to access customer electricity and natural gas usage data from Xcel Energy smart meters. Supports RESTful access to metered resource data including usage intervals, billing data, and meter readings. Customer authorization is granted via OAuth 2.0 and follows the Green Button Connect specification used by utilities across North America.

OpenAPI Specification

xcel-energy-green-button-api.yaml Raw ↑
openapi: 3.0.3
info:
  title: Xcel Energy Green Button Connect My Data API
  summary: OAuth 2.0 authorized customer energy usage data based on the NAESB ESPI standard.
  description: >
    Xcel Energy Green Button Connect My Data API based on the ESPI (Energy
    Services Provider Interface) standard developed by NAESB. Enables
    authorized third-party applications to access customer electricity and
    natural gas usage data captured by Xcel Energy smart meters. Resources
    are exposed as Atom feeds and entries containing UsagePoint,
    MeterReading, IntervalBlock, ReadingType, ElectricPowerUsageSummary,
    ElectricPowerQualitySummary, LocalTimeParameters, and customer
    information. Customer authorization is granted via OAuth 2.0 and
    follows the Green Button Connect specification used by utilities
    across North America.
  version: 1.1.0
  contact:
    name: Xcel Energy Developer Portal
    url: https://developer-apim.aws.xcelenergy.com/
  license:
    name: Proprietary
    url: https://www.xcelenergy.com/privacy_policy
  x-generated-from: documentation
  x-last-validated: '2026-05-03'
  x-standards:
    - NAESB ESPI 1.1
    - Green Button Connect My Data
servers:
  - url: https://api.xcelenergy.com/DataCustodian/espi/1_1/resource
    description: Xcel Energy Data Custodian (Production)
  - url: https://developer-apim.aws.xcelenergy.com/DataCustodian/espi/1_1/resource
    description: Xcel Energy Developer Sandbox
tags:
  - name: Authorization
    description: OAuth 2.0 authorizations granted by retail customers to third-party applications.
  - name: ApplicationInformation
    description: Third-party application registration metadata used by the Data Custodian.
  - name: UsagePoint
    description: Logical metered points that produce energy usage data for a service.
  - name: MeterReading
    description: Container for measured IntervalBlocks captured at a UsagePoint.
  - name: IntervalBlock
    description: Time-series interval-level energy usage data captured at a meter.
  - name: ReadingType
    description: Metadata describing the units, multiplier, accumulation, and flow direction of meter readings.
  - name: ElectricPowerUsageSummary
    description: Billing-period aggregate summaries of electric power usage.
  - name: ElectricPowerQualitySummary
    description: Aggregate power-quality measurements for a UsagePoint.
  - name: LocalTimeParameters
    description: Time zone and daylight-savings-time parameters used to interpret interval timestamps.
  - name: RetailCustomer
    description: Retail customer, account, agreement, service location, and meter information.
  - name: Batch
    description: Bulk Atom feeds aggregating multiple resources for a subscription.
  - name: ServiceStatus
    description: Operational status of the Green Button Connect My Data service.
paths:
  /ApplicationInformation/{applicationInformationId}:
    get:
      operationId: getApplicationInformation
      summary: Retrieve application registration details
      description: >
        Returns the ApplicationInformation entry registered for a third-party
        application, including OAuth client metadata and scope strings.
      tags: [ApplicationInformation]
      security:
        - registrationAccessToken: []
      parameters:
        - $ref: '#/components/parameters/ApplicationInformationId'
      responses:
        '200':
          description: Atom entry containing the ApplicationInformation resource.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/ApplicationInformation'
        '401': { $ref: '#/components/responses/Unauthorized' }
        '403': { $ref: '#/components/responses/Forbidden' }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /Authorization:
    get:
      operationId: listAuthorizations
      summary: List customer authorizations granted to the application
      description: >
        Returns an Atom feed of Authorization entries granted by retail
        customers to the calling third-party application.
      tags: [Authorization]
      security:
        - clientAccessToken: []
      parameters:
        - $ref: '#/components/parameters/PublishedMin'
        - $ref: '#/components/parameters/PublishedMax'
        - $ref: '#/components/parameters/UpdatedMin'
        - $ref: '#/components/parameters/UpdatedMax'
        - $ref: '#/components/parameters/MaxResults'
        - $ref: '#/components/parameters/StartIndex'
      responses:
        '200':
          description: Atom feed of Authorization entries.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/AuthorizationFeed'
        '401': { $ref: '#/components/responses/Unauthorized' }
        '403': { $ref: '#/components/responses/Forbidden' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /Authorization/{authorizationId}:
    get:
      operationId: getAuthorization
      summary: Retrieve a single customer authorization
      description: Returns the Authorization entry identified by authorizationId.
      tags: [Authorization]
      security:
        - clientAccessToken: []
      parameters:
        - $ref: '#/components/parameters/AuthorizationId'
      responses:
        '200':
          description: Atom entry containing the Authorization resource.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/Authorization'
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /Subscription/{subscriptionId}/UsagePoint:
    get:
      operationId: listUsagePoints
      summary: List UsagePoints for a subscription
      description: >
        Returns an Atom feed of UsagePoint entries the customer has
        authorized for the subscription.
      tags: [UsagePoint]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
        - $ref: '#/components/parameters/PublishedMin'
        - $ref: '#/components/parameters/PublishedMax'
        - $ref: '#/components/parameters/UpdatedMin'
        - $ref: '#/components/parameters/UpdatedMax'
      responses:
        '200':
          description: Atom feed of UsagePoint entries.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/UsagePointFeed'
        '401': { $ref: '#/components/responses/Unauthorized' }
        '403': { $ref: '#/components/responses/Forbidden' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /Subscription/{subscriptionId}/UsagePoint/{usagePointId}:
    get:
      operationId: getUsagePoint
      summary: Retrieve a single UsagePoint
      description: Returns the UsagePoint entry identified by usagePointId.
      tags: [UsagePoint]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
        - $ref: '#/components/parameters/UsagePointId'
      responses:
        '200':
          description: Atom entry containing the UsagePoint resource.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/UsagePoint'
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /Subscription/{subscriptionId}/UsagePoint/{usagePointId}/MeterReading:
    get:
      operationId: listMeterReadings
      summary: List MeterReadings for a UsagePoint
      description: >
        Returns an Atom feed of MeterReading entries captured at the
        specified UsagePoint.
      tags: [MeterReading]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
        - $ref: '#/components/parameters/UsagePointId'
        - $ref: '#/components/parameters/PublishedMin'
        - $ref: '#/components/parameters/PublishedMax'
      responses:
        '200':
          description: Atom feed of MeterReading entries.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/MeterReadingFeed'
        '401': { $ref: '#/components/responses/Unauthorized' }
        '403': { $ref: '#/components/responses/Forbidden' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /Subscription/{subscriptionId}/UsagePoint/{usagePointId}/MeterReading/{meterReadingId}:
    get:
      operationId: getMeterReading
      summary: Retrieve a single MeterReading
      description: Returns the MeterReading entry identified by meterReadingId.
      tags: [MeterReading]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
        - $ref: '#/components/parameters/UsagePointId'
        - $ref: '#/components/parameters/MeterReadingId'
      responses:
        '200':
          description: Atom entry containing the MeterReading resource.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/MeterReading'
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /Subscription/{subscriptionId}/UsagePoint/{usagePointId}/MeterReading/{meterReadingId}/IntervalBlock:
    get:
      operationId: listIntervalBlocks
      summary: List IntervalBlocks for a MeterReading
      description: >
        Returns an Atom feed of IntervalBlock entries containing the
        time-series interval readings for the MeterReading.
      tags: [IntervalBlock]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
        - $ref: '#/components/parameters/UsagePointId'
        - $ref: '#/components/parameters/MeterReadingId'
        - $ref: '#/components/parameters/PublishedMin'
        - $ref: '#/components/parameters/PublishedMax'
      responses:
        '200':
          description: Atom feed of IntervalBlock entries.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/IntervalBlockFeed'
        '401': { $ref: '#/components/responses/Unauthorized' }
        '403': { $ref: '#/components/responses/Forbidden' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /Subscription/{subscriptionId}/UsagePoint/{usagePointId}/MeterReading/{meterReadingId}/IntervalBlock/{intervalBlockId}:
    get:
      operationId: getIntervalBlock
      summary: Retrieve a single IntervalBlock
      description: Returns the IntervalBlock entry identified by intervalBlockId.
      tags: [IntervalBlock]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
        - $ref: '#/components/parameters/UsagePointId'
        - $ref: '#/components/parameters/MeterReadingId'
        - $ref: '#/components/parameters/IntervalBlockId'
      responses:
        '200':
          description: Atom entry containing the IntervalBlock resource.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/IntervalBlock'
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /ReadingType/{readingTypeId}:
    get:
      operationId: getReadingType
      summary: Retrieve a ReadingType
      description: >
        Returns the ReadingType entry that describes the units, multiplier,
        accumulation behavior, and flow direction of an associated
        MeterReading.
      tags: [ReadingType]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/ReadingTypeId'
      responses:
        '200':
          description: Atom entry containing the ReadingType resource.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/ReadingType'
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /Subscription/{subscriptionId}/UsagePoint/{usagePointId}/UsageSummary:
    get:
      operationId: listElectricPowerUsageSummaries
      summary: List ElectricPowerUsageSummaries for a UsagePoint
      description: >
        Returns an Atom feed of ElectricPowerUsageSummary entries containing
        billing-period aggregate energy usage and demand information for the
        UsagePoint.
      tags: [ElectricPowerUsageSummary]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
        - $ref: '#/components/parameters/UsagePointId'
        - $ref: '#/components/parameters/PublishedMin'
        - $ref: '#/components/parameters/PublishedMax'
      responses:
        '200':
          description: Atom feed of ElectricPowerUsageSummary entries.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/ElectricPowerUsageSummaryFeed'
        '401': { $ref: '#/components/responses/Unauthorized' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /Subscription/{subscriptionId}/UsagePoint/{usagePointId}/UsageSummary/{usageSummaryId}:
    get:
      operationId: getElectricPowerUsageSummary
      summary: Retrieve a single ElectricPowerUsageSummary
      description: Returns the ElectricPowerUsageSummary entry identified by usageSummaryId.
      tags: [ElectricPowerUsageSummary]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
        - $ref: '#/components/parameters/UsagePointId'
        - $ref: '#/components/parameters/UsageSummaryId'
      responses:
        '200':
          description: Atom entry containing the ElectricPowerUsageSummary resource.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/ElectricPowerUsageSummary'
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /Subscription/{subscriptionId}/UsagePoint/{usagePointId}/ElectricPowerQualitySummary:
    get:
      operationId: listElectricPowerQualitySummaries
      summary: List ElectricPowerQualitySummaries for a UsagePoint
      description: >
        Returns an Atom feed of ElectricPowerQualitySummary entries
        describing power-quality measurements for the UsagePoint.
      tags: [ElectricPowerQualitySummary]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
        - $ref: '#/components/parameters/UsagePointId'
      responses:
        '200':
          description: Atom feed of ElectricPowerQualitySummary entries.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/ElectricPowerQualitySummaryFeed'
        '401': { $ref: '#/components/responses/Unauthorized' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /Subscription/{subscriptionId}/UsagePoint/{usagePointId}/ElectricPowerQualitySummary/{powerQualitySummaryId}:
    get:
      operationId: getElectricPowerQualitySummary
      summary: Retrieve a single ElectricPowerQualitySummary
      description: Returns the ElectricPowerQualitySummary entry identified by powerQualitySummaryId.
      tags: [ElectricPowerQualitySummary]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
        - $ref: '#/components/parameters/UsagePointId'
        - $ref: '#/components/parameters/PowerQualitySummaryId'
      responses:
        '200':
          description: Atom entry containing the ElectricPowerQualitySummary resource.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/ElectricPowerQualitySummary'
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /LocalTimeParameters/{localTimeParametersId}:
    get:
      operationId: getLocalTimeParameters
      summary: Retrieve LocalTimeParameters
      description: >
        Returns the LocalTimeParameters entry describing the time zone and
        daylight-savings-time rules used to interpret meter timestamps.
      tags: [LocalTimeParameters]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/LocalTimeParametersId'
      responses:
        '200':
          description: Atom entry containing the LocalTimeParameters resource.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/LocalTimeParameters'
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /RetailCustomer/{authorizationId}/Customer:
    get:
      operationId: listCustomers
      summary: List retail customers for an authorization
      description: Returns an Atom feed of Customer entries authorized to share customer information.
      tags: [RetailCustomer]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/AuthorizationId'
      responses:
        '200':
          description: Atom feed of Customer entries.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/CustomerFeed'
        '401': { $ref: '#/components/responses/Unauthorized' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /RetailCustomer/{authorizationId}/Customer/{customerId}/CustomerAccount:
    get:
      operationId: listCustomerAccounts
      summary: List CustomerAccounts for a retail customer
      description: Returns an Atom feed of CustomerAccount entries for the customer.
      tags: [RetailCustomer]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/AuthorizationId'
        - $ref: '#/components/parameters/CustomerId'
      responses:
        '200':
          description: Atom feed of CustomerAccount entries.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/CustomerAccountFeed'
        '401': { $ref: '#/components/responses/Unauthorized' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /RetailCustomer/{authorizationId}/Customer/{customerId}/CustomerAccount/{customerAccountId}/CustomerAgreement:
    get:
      operationId: listCustomerAgreements
      summary: List CustomerAgreements for a CustomerAccount
      description: Returns an Atom feed of CustomerAgreement entries for the account.
      tags: [RetailCustomer]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/AuthorizationId'
        - $ref: '#/components/parameters/CustomerId'
        - $ref: '#/components/parameters/CustomerAccountId'
      responses:
        '200':
          description: Atom feed of CustomerAgreement entries.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/CustomerAgreementFeed'
        '401': { $ref: '#/components/responses/Unauthorized' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /Batch/Subscription/{subscriptionId}:
    get:
      operationId: getBatchForSubscription
      summary: Bulk Atom feed for a subscription
      description: >
        Returns a Batch Atom feed containing all UsagePoint, MeterReading,
        IntervalBlock, ReadingType, ElectricPowerUsageSummary, and
        ElectricPowerQualitySummary entries authorized under the
        subscription, optionally filtered by published or updated time.
      tags: [Batch]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
        - $ref: '#/components/parameters/PublishedMin'
        - $ref: '#/components/parameters/PublishedMax'
        - $ref: '#/components/parameters/UpdatedMin'
        - $ref: '#/components/parameters/UpdatedMax'
      responses:
        '200':
          description: Atom feed containing the batch of resources.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/BatchFeed'
        '202':
          description: Request accepted; the batch is being processed asynchronously.
        '401': { $ref: '#/components/responses/Unauthorized' }
        '429': { $ref: '#/components/responses/RateLimited' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /Batch/Subscription/{subscriptionId}/UsagePoint/{usagePointId}:
    get:
      operationId: getBatchForUsagePoint
      summary: Bulk Atom feed for a single UsagePoint
      description: >
        Returns a Batch Atom feed containing the resources associated with
        a single UsagePoint authorized under the subscription.
      tags: [Batch]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
        - $ref: '#/components/parameters/UsagePointId'
        - $ref: '#/components/parameters/PublishedMin'
        - $ref: '#/components/parameters/PublishedMax'
      responses:
        '200':
          description: Atom feed containing the UsagePoint batch.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/BatchFeed'
        '401': { $ref: '#/components/responses/Unauthorized' }
        '429': { $ref: '#/components/responses/RateLimited' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /Batch/RetailCustomer/{authorizationId}:
    get:
      operationId: getBatchForRetailCustomer
      summary: Bulk Atom feed for a retail customer
      description: >
        Returns a Batch Atom feed containing the customer information
        resources for an authorized retail customer.
      tags: [Batch]
      security:
        - accessToken: []
      parameters:
        - $ref: '#/components/parameters/AuthorizationId'
      responses:
        '200':
          description: Atom feed containing the retail customer batch.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/BatchFeed'
        '401': { $ref: '#/components/responses/Unauthorized' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /ReadServiceStatus:
    get:
      operationId: readServiceStatus
      summary: Get current service status
      description: Returns the operational status of the Green Button Connect My Data service.
      tags: [ServiceStatus]
      security:
        - clientAccessToken: []
      responses:
        '200':
          description: Service status payload.
          content:
            application/atom+xml:
              schema:
                $ref: '#/components/schemas/ServiceStatus'
        '503': { $ref: '#/components/responses/ServiceUnavailable' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  parameters:
    ApplicationInformationId:
      name: applicationInformationId
      in: path
      required: true
      description: Identifier of an ApplicationInformation entry registered with the Data Custodian.
      schema: { type: string, example: '1' }
    AuthorizationId:
      name: authorizationId
      in: path
      required: true
      description: Identifier of an Authorization granted by a retail customer.
      schema: { type: string, example: 'auth-1234' }
    SubscriptionId:
      name: subscriptionId
      in: path
      required: true
      description: Identifier of a Subscription created from an Authorization.
      schema: { type: string, example: 'sub-5678' }
    UsagePointId:
      name: usagePointId
      in: path
      required: true
      description: Identifier of a UsagePoint within a Subscription.
      schema: { type: string, example: '1' }
    MeterReadingId:
      name: meterReadingId
      in: path
      required: true
      description: Identifier of a MeterReading within a UsagePoint.
      schema: { type: string, example: '1' }
    IntervalBlockId:
      name: intervalBlockId
      in: path
      required: true
      description: Identifier of an IntervalBlock within a MeterReading.
      schema: { type: string, example: '1' }
    ReadingTypeId:
      name: readingTypeId
      in: path
      required: true
      description: Identifier of a ReadingType resource.
      schema: { type: string, example: '1' }
    UsageSummaryId:
      name: usageSummaryId
      in: path
      required: true
      description: Identifier of an ElectricPowerUsageSummary resource.
      schema: { type: string, example: '1' }
    PowerQualitySummaryId:
      name: powerQualitySummaryId
      in: path
      required: true
      description: Identifier of an ElectricPowerQualitySummary resource.
      schema: { type: string, example: '1' }
    LocalTimeParametersId:
      name: localTimeParametersId
      in: path
      required: true
      description: Identifier of a LocalTimeParameters resource.
      schema: { type: string, example: '1' }
    CustomerId:
      name: customerId
      in: path
      required: true
      description: Identifier of a retail Customer resource.
      schema: { type: string, example: '1' }
    CustomerAccountId:
      name: customerAccountId
      in: path
      required: true
      description: Identifier of a CustomerAccount resource.
      schema: { type: string, example: '1' }
    PublishedMin:
      name: published-min
      in: query
      required: false
      description: Lower bound (inclusive) for the Atom entry published timestamp, in epoch seconds or ISO 8601.
      schema: { type: string, example: '2026-01-01T00:00:00Z' }
    PublishedMax:
      name: published-max
      in: query
      required: false
      description: Upper bound (inclusive) for the Atom entry published timestamp, in epoch seconds or ISO 8601.
      schema: { type: string, example: '2026-04-30T23:59:59Z' }
    UpdatedMin:
      name: updated-min
      in: query
      required: false
      description: Lower bound (inclusive) for the Atom entry updated timestamp.
      schema: { type: string, example: '2026-01-01T00:00:00Z' }
    UpdatedMax:
      name: updated-max
      in: query
      required: false
      description: Upper bound (inclusive) for the Atom entry updated timestamp.
      schema: { type: string, example: '2026-04-30T23:59:59Z' }
    MaxResults:
      name: max-results
      in: query
      required: false
      description: Maximum number of entries to return in the feed.
      schema: { type: integer, minimum: 1, maximum: 1000, example: 100 }
    StartIndex:
      name: start-index
      in: query
      required: false
      description: 1-based index of the first entry to return for paginated feeds.
      schema: { type: integer, minimum: 1, example: 1 }
  responses:
    Unauthorized:
      description: Authentication failed or the access token is invalid or expired.
    Forbidden:
      description: The token type does not grant access to the requested endpoint or resource.
    NotFound:
      description: The requested resource was not found or is not authorized for this token.
    RateLimited:
      description: Too many requests; back off and retry after the indicated interval.
    ServiceUnavailable:
      description: The Data Custodian is temporarily unavailable, often for scheduled maintenance.
  securitySchemes:
    accessToken:
      type: oauth2
      description: Customer-scoped access token issued via the OAuth 2.0 authorization-code grant.
      flows:
        authorizationCode:
          authorizationUrl: https://api.xcelenergy.com/DataCustodian/oauth/authorize
          tokenUrl: https://api.xcelenergy.com/DataCustodian/oauth/token
          refreshUrl: https://api.xcelenergy.com/DataCustodian/oauth/token
          scopes:
            FB=4_5_15;IntervalDuration=900;BlockDuration=monthly;HistoryLength=34128000: Standard ESPI scope string for 15-minute electric usage data with 13 months of history.
    clientAccessToken:
      type: oauth2
      description: Application-scoped client access token used for management endpoints (Authorization list, Bulk, ServiceStatus).
      flows:
        clientCredentials:
          tokenUrl: https://api.xcelenergy.com/DataCustodian/oauth/token
          scopes:
            DataCustodian_Admin_Access: Administrative scope used for application-level operations.
    registrationAccessToken:
      type: http
      scheme: bearer
      bearerFormat: Registration Access Token
      description: Token issued at application registration; used to read or update ApplicationInformation.
  schemas:
    AtomEntry:
      type: object
      description: Atom entry envelope used to wrap ESPI resource payloads.
      properties:
        id: { type: string, description: Stable URI for the entry. }
        title: { type: string, description: Human-readable title of the entry. }
        published: { type: string, format: date-time, description: Time the entry was first published. }
        updated: { type: string, format: date-time, description: Time the entry was last updated. }
        link:
          type: array
          description: Atom link relations (self, up, related).
          items:
            type: object
            properties:
              rel: { type: string, example: self }
              href: { type: string, example: 'UsagePoint/1' }
        content: { type: object, description: ESPI XML payload content. }
    AtomFeed:
      type: object
      description: Atom feed envelope used to wrap collections of ESPI resource entries.
      properties:
        id: { type: string }
        title: { type: string }
        updated: { type: string, format: date-time }
        link:
          type: array
          items:
            type: object
            properties:
              rel: { type: string }
              href: { type: string }
        entry:
          type: array
          items: { $ref: '#/components/schemas/AtomEntry' }
    ApplicationInformation:
      allOf:
        - $ref: '#/components/schemas/AtomEntry'
        - type: object
          description: Registration metadata for a third-party application.
          properties:
            dataCustodianApplicationStatus: { type: integer, example: 1, description: '1 = active, 2 = on hold, 3 = revoked.' }
            thirdPartyApplicationDescription: { type: string }
            thirdPartyApplicationStatus: { type: integer, example: 1 }
            thirdPartyApplicationType: { type: integer, example: 3 }
            thirdPartyApplicationUse: { type: integer, example: 4 }
            thirdPartyPhone: { type: string }
            authorizationServerAuthorizationEndpoint: { type: string, format: uri }
            authorizationServerRegistrationEndpoint: { type: string, format: uri }
            authorizationServerTokenEndpoint: { type: string, format: uri }
            client_id: { type: string }
            client_secret: { type: string }
            client_id_issued_at: { type: integer }
            client_secret_expires_at: { type: integer }
            redirect_uri: { type: string, format: uri }
            scope:
              type: array
              items: { type: string, example: 'FB=4_5_15;IntervalDuration=900;BlockDuration=monthly;HistoryLength=34128000' }
            tokenEndpointAuthMethod: { type: string, example: client_secret_basic }
    Authorization:
      allOf:
        - $ref: '#/components/schemas/AtomEntry'
        - type: object
    

# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/xcel-energy/refs/heads/main/openapi/xcel-energy-green-button-api.yaml