Xcel Energy Smart Meter IEEE 2030.5 API

IEEE 2030.5 compliant API server built into Itron Gen 5 Riva smart meters deployed by Xcel Energy. Provides real-time and time-delineated energy usage data including solar production information directly from the meter device on the local network. Supports meter reading, usage monitoring, and demand response integration following the Smart Energy Profile 2.0 (IEEE 2030.5) specification.

OpenAPI Specification

xcel-energy-smart-meter-api.yaml Raw ↑
openapi: 3.0.3
info:
  title: Xcel Energy Smart Meter IEEE 2030.5 API
  summary: IEEE 2030.5 (SEP 2.0) REST API exposed by Itron Gen 5 Riva smart meters on the local network.
  description: >
    IEEE 2030.5 / Smart Energy Profile 2.0 compliant API server built into
    Itron Gen 5 Riva smart meters deployed by Xcel Energy. Provides
    real-time and time-delineated energy usage data including solar
    production information directly from the meter device on the local
    network. Resources follow the IEEE 2030.5 function-set hierarchy
    rooted at the DeviceCapability resource (/dcap), and clients walk
    the link graph to End Devices, Function Set Assignments, Time, DER
    programs, Demand Response programs, MirrorUsagePoints, and
    UsagePoints. All access is mutually authenticated with TLS using a
    device certificate identified by an LFDI/SFDI.
  version: '1.0'
  contact:
    name: Xcel Energy Developer Portal
    url: https://developer-apim.aws.xcelenergy.com/
  x-generated-from: documentation
  x-last-validated: '2026-05-03'
  x-standards:
    - IEEE 2030.5-2018
    - Smart Energy Profile 2.0
servers:
  - url: https://{meterHost}
    description: Itron Gen 5 Riva smart meter on the local network (mTLS).
    variables:
      meterHost:
        default: 192.168.1.10
        description: Hostname or IP of the local meter device.
tags:
  - name: DeviceCapability
    description: Root resource that lists the function sets supported by the meter.
  - name: Time
    description: Current device time and time-zone configuration.
  - name: EndDevice
    description: End devices managed by the meter (the meter itself and any subordinate devices).
  - name: SelfDevice
    description: Convenience resource referring to the device that hosts the API.
  - name: FunctionSetAssignments
    description: Groups of function sets assigned to an EndDevice by the server operator.
  - name: Registration
    description: EndDevice registration and provisioning state.
  - name: DeviceInformation
    description: Manufacturer, hardware, and firmware metadata for a device.
  - name: DeviceStatus
    description: Operational status, op-time, and event indicators for a device.
  - name: PowerStatus
    description: Real-time power flow and battery status for a device.
  - name: Log
    description: Log events emitted by the device.
  - name: Configuration
    description: Configuration resource for a device.
  - name: DER
    description: Distributed Energy Resource programs, controls, and settings.
  - name: DemandResponse
    description: Demand Response programs and load control events.
  - name: Messaging
    description: Text and HTML messages targeted at end-users.
  - name: UsagePoint
    description: Read-only metered points exposed by the device.
  - name: MirrorUsagePoint
    description: Client-supplied mirror usage points used to publish readings to the server.
  - name: Response
    description: Acknowledgement responses for received events.
  - name: Subscription
    description: Subscription/notification resources for resource-change events.
paths:
  /dcap:
    get:
      operationId: getDeviceCapability
      summary: Get the device capability index
      description: >
        Returns the DeviceCapability resource — the root of the IEEE 2030.5
        link graph. Clients use this resource to discover the URIs of all
        supported function sets on the meter.
      tags: [DeviceCapability]
      security:
        - mtls: []
      responses:
        '200':
          description: DeviceCapability resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/DeviceCapability' } }
            application/sep-exi: { schema: { $ref: '#/components/schemas/DeviceCapability' } }
        '401': { $ref: '#/components/responses/Unauthorized' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /tm:
    get:
      operationId: getTime
      summary: Get device time and time-zone parameters
      description: Returns the Time resource describing the current UTC time and the device time zone.
      tags: [Time]
      security:
        - mtls: []
      responses:
        '200':
          description: Time resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/Time' } }
        '401': { $ref: '#/components/responses/Unauthorized' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /sdev:
    get:
      operationId: getSelfDevice
      summary: Get the SelfDevice resource
      description: >
        Returns SelfDevice, a convenience EndDevice subtype representing the
        device that hosts this API server.
      tags: [SelfDevice]
      security:
        - mtls: []
      responses:
        '200':
          description: SelfDevice resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/SelfDevice' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /edev:
    get:
      operationId: listEndDevices
      summary: List EndDevices
      description: Returns the EndDeviceList containing all EndDevices managed by the server.
      tags: [EndDevice]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/StartIndex'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: EndDeviceList resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/EndDeviceList' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    post:
      operationId: createEndDevice
      summary: Register a new EndDevice
      description: Posts a new EndDevice resource to register a client with the server.
      tags: [EndDevice]
      security:
        - mtls: []
      requestBody:
        required: true
        content:
          application/sep+xml: { schema: { $ref: '#/components/schemas/EndDevice' } }
      responses:
        '201':
          description: EndDevice created. The Location header contains the new resource URI.
          headers:
            Location: { schema: { type: string }, description: URI of the new EndDevice resource. }
        '400': { $ref: '#/components/responses/BadRequest' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /edev/{edevId}:
    get:
      operationId: getEndDevice
      summary: Get an EndDevice
      description: Returns a single EndDevice resource identified by edevId.
      tags: [EndDevice]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/EdevId'
      responses:
        '200':
          description: EndDevice resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/EndDevice' } }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    put:
      operationId: updateEndDevice
      summary: Update an EndDevice
      description: Replaces an existing EndDevice resource.
      tags: [EndDevice]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/EdevId'
      requestBody:
        required: true
        content:
          application/sep+xml: { schema: { $ref: '#/components/schemas/EndDevice' } }
      responses:
        '204': { description: EndDevice updated successfully. }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    delete:
      operationId: deleteEndDevice
      summary: Delete an EndDevice
      tags: [EndDevice]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/EdevId'
      responses:
        '204': { description: EndDevice removed. }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /edev/{edevId}/reg:
    get:
      operationId: getRegistration
      summary: Get EndDevice registration
      description: Returns the Registration resource for an EndDevice including the pIN field used by clients to validate provisioning.
      tags: [Registration]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/EdevId'
      responses:
        '200':
          description: Registration resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/Registration' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /edev/{edevId}/di:
    get:
      operationId: getDeviceInformation
      summary: Get DeviceInformation
      description: Returns manufacturer, hardware, and firmware metadata for the EndDevice.
      tags: [DeviceInformation]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/EdevId'
      responses:
        '200':
          description: DeviceInformation resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/DeviceInformation' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /edev/{edevId}/dstat:
    get:
      operationId: getDeviceStatus
      summary: Get DeviceStatus
      description: Returns operational status, op-time, and event indicators for the EndDevice.
      tags: [DeviceStatus]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/EdevId'
      responses:
        '200':
          description: DeviceStatus resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/DeviceStatus' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /edev/{edevId}/ps:
    get:
      operationId: getPowerStatus
      summary: Get PowerStatus
      description: Returns real-time power flow, battery state, and grid-connection state for the EndDevice.
      tags: [PowerStatus]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/EdevId'
      responses:
        '200':
          description: PowerStatus resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/PowerStatus' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /edev/{edevId}/log:
    get:
      operationId: listLogEvents
      summary: List LogEvents
      description: Returns the LogEventList for an EndDevice.
      tags: [Log]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/EdevId'
        - $ref: '#/components/parameters/StartIndex'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: LogEventList resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/LogEventList' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /edev/{edevId}/cfg:
    get:
      operationId: getConfiguration
      summary: Get device Configuration
      description: Returns the Configuration resource describing tunable parameters of the EndDevice.
      tags: [Configuration]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/EdevId'
      responses:
        '200':
          description: Configuration resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/Configuration' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /edev/{edevId}/fsa:
    get:
      operationId: listFunctionSetAssignments
      summary: List FunctionSetAssignments for an EndDevice
      description: Returns the FunctionSetAssignmentsList associated with the EndDevice.
      tags: [FunctionSetAssignments]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/EdevId'
      responses:
        '200':
          description: FunctionSetAssignmentsList resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/FunctionSetAssignmentsList' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /derp:
    get:
      operationId: listDERPrograms
      summary: List DER programs
      description: Returns the DERProgramList — programs that schedule controls for distributed energy resources such as PV and storage.
      tags: [DER]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/StartIndex'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: DERProgramList resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/DERProgramList' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /derp/{derpId}:
    get:
      operationId: getDERProgram
      summary: Get a DER program
      tags: [DER]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/DerpId'
      responses:
        '200':
          description: DERProgram resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/DERProgram' } }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /derp/{derpId}/derc:
    get:
      operationId: listDERControls
      summary: List DERControls for a DER program
      tags: [DER]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/DerpId'
      responses:
        '200':
          description: DERControlList resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/DERControlList' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /der:
    get:
      operationId: listDERs
      summary: List Distributed Energy Resources
      tags: [DER]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/StartIndex'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: DERList resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/DERList' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /drp:
    get:
      operationId: listDemandResponsePrograms
      summary: List Demand Response programs
      description: Returns the DemandResponseProgramList for load-control coordination with the utility.
      tags: [DemandResponse]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/StartIndex'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: DemandResponseProgramList resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/DemandResponseProgramList' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /drp/{drpId}:
    get:
      operationId: getDemandResponseProgram
      summary: Get a Demand Response program
      tags: [DemandResponse]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/DrpId'
      responses:
        '200':
          description: DemandResponseProgram resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/DemandResponseProgram' } }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /drp/{drpId}/edrc:
    get:
      operationId: listEndDeviceControls
      summary: List EndDeviceControls for a DR program
      description: Returns EndDeviceControl events scheduling load-control for participants of the DR program.
      tags: [DemandResponse]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/DrpId'
      responses:
        '200':
          description: EndDeviceControlList resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/EndDeviceControlList' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /msg:
    get:
      operationId: listMessagingPrograms
      summary: List messaging programs
      description: Returns the MessagingProgramList — text and HTML messages targeted at end-users.
      tags: [Messaging]
      security:
        - mtls: []
      responses:
        '200':
          description: MessagingProgramList resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/MessagingProgramList' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /upt:
    get:
      operationId: listUsagePoints
      summary: List read-only UsagePoints
      description: Returns the UsagePointList — meter-managed UsagePoints exposing read-only readings.
      tags: [UsagePoint]
      security:
        - mtls: []
      responses:
        '200':
          description: UsagePointList resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/UsagePointList' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /upt/{uptId}:
    get:
      operationId: getUsagePoint
      summary: Get a UsagePoint
      tags: [UsagePoint]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/UptId'
      responses:
        '200':
          description: UsagePoint resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/UsagePoint' } }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /upt/{uptId}/mr:
    get:
      operationId: listMeterReadings
      summary: List MeterReadings for a UsagePoint
      tags: [UsagePoint]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/UptId'
      responses:
        '200':
          description: MeterReadingList resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/MeterReadingList' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /upt/{uptId}/mr/{mrId}/r:
    get:
      operationId: listReadings
      summary: List Readings for a MeterReading
      tags: [UsagePoint]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/UptId'
        - $ref: '#/components/parameters/MrId'
        - $ref: '#/components/parameters/StartIndex'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: ReadingList resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/ReadingList' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /mup:
    get:
      operationId: listMirrorUsagePoints
      summary: List MirrorUsagePoints
      description: Returns the MirrorUsagePointList — client-supplied mirror points used to publish readings to the server.
      tags: [MirrorUsagePoint]
      security:
        - mtls: []
      responses:
        '200':
          description: MirrorUsagePointList resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/MirrorUsagePointList' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    post:
      operationId: createMirrorUsagePoint
      summary: Create a MirrorUsagePoint
      description: Posts a new MirrorUsagePoint to publish readings.
      tags: [MirrorUsagePoint]
      security:
        - mtls: []
      requestBody:
        required: true
        content:
          application/sep+xml: { schema: { $ref: '#/components/schemas/MirrorUsagePoint' } }
      responses:
        '201':
          description: MirrorUsagePoint created.
          headers:
            Location: { schema: { type: string }, description: URI of the new MirrorUsagePoint resource. }
        '400': { $ref: '#/components/responses/BadRequest' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /mup/{mupId}:
    post:
      operationId: postMirrorMeterReading
      summary: Publish a MirrorMeterReading
      description: Posts a MirrorMeterReading containing readings to be published against the MirrorUsagePoint.
      tags: [MirrorUsagePoint]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/MupId'
      requestBody:
        required: true
        content:
          application/sep+xml: { schema: { $ref: '#/components/schemas/MirrorMeterReading' } }
      responses:
        '201': { description: Mirror reading accepted. }
        '400': { $ref: '#/components/responses/BadRequest' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /rsp:
    get:
      operationId: listResponseSets
      summary: List ResponseSets
      tags: [Response]
      security:
        - mtls: []
      responses:
        '200':
          description: ResponseSetList resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/ResponseSetList' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    post:
      operationId: postResponse
      summary: Post a Response acknowledgement
      description: Posts a Response acknowledging receipt or completion of a server-issued event.
      tags: [Response]
      security:
        - mtls: []
      requestBody:
        required: true
        content:
          application/sep+xml: { schema: { $ref: '#/components/schemas/Response' } }
      responses:
        '201': { description: Response recorded. }
        '400': { $ref: '#/components/responses/BadRequest' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /sub:
    get:
      operationId: listSubscriptions
      summary: List Subscriptions
      description: Returns the SubscriptionList describing client subscriptions to resource-change notifications.
      tags: [Subscription]
      security:
        - mtls: []
      responses:
        '200':
          description: SubscriptionList resource.
          content:
            application/sep+xml: { schema: { $ref: '#/components/schemas/SubscriptionList' } }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    post:
      operationId: createSubscription
      summary: Create a Subscription
      tags: [Subscription]
      security:
        - mtls: []
      requestBody:
        required: true
        content:
          application/sep+xml: { schema: { $ref: '#/components/schemas/Subscription' } }
      responses:
        '201':
          description: Subscription created.
          headers:
            Location: { schema: { type: string }, description: URI of the new Subscription resource. }
        '400': { $ref: '#/components/responses/BadRequest' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /sub/{subId}:
    delete:
      operationId: deleteSubscription
      summary: Delete a Subscription
      tags: [Subscription]
      security:
        - mtls: []
      parameters:
        - $ref: '#/components/parameters/SubId'
      responses:
        '204': { description: Subscription removed. }
        '404': { $ref: '#/components/responses/NotFound' }
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  parameters:
    EdevId:
      name: edevId
      in: path
      required: true
      description: Numeric identifier of an EndDevice resource.
      schema: { type: integer, minimum: 0, example: 0 }
    DerpId:
      name: derpId
      in: path
      required: true
      description: Identifier of a DERProgram resource.
      schema: { type: integer, minimum: 0, example: 0 }
    DrpId:
      name: drpId
      in: path
      required: true
      description: Identifier of a DemandResponseProgram resource.
      schema: { type: integer, minimum: 0, example: 0 }
    UptId:
      name: uptId
      in: path
      required: true
      description: Identifier of a UsagePoint resource.
      schema: { type: integer, minimum: 0, example: 0 }
    MrId:
      name: mrId
      in: path
      required: true
      description: Identifier of a MeterReading resource.
      schema: { type: integer, minimum: 0, example: 0 }
    MupId:
      name: mupId
      in: path
      required: true
      description: Identifier of a MirrorUsagePoint resource.
      schema: { type: integer, minimum: 0, example: 0 }
    SubId:
      name: subId
      in: path
      required: true
      description: Identifier of a Subscription resource.
      schema: { type: integer, minimum: 0, example: 0 }
    StartIndex:
      name: s
      in: query
      required: false
      description: 0-based start index for paginated lists.
      schema: { type: integer, minimum: 0, example: 0 }
    Limit:
      name: l
      in: query
      required: false
      description: Maximum number of list items to return.
      schema: { type: integer, minimum: 1, maximum: 255, example: 25 }
  responses:
    Unauthorized:
      description: TLS authentication failed or the client certificate is not authorized.
    BadRequest:
      description: The request body or parameters were invalid.
    NotFound:
      description: The requested resource was not found.
  securitySchemes:
    mtls:
      type: mutualTLS
      description: >
        IEEE 2030.5 requires mutual TLS authentication. Clients present a
        device certificate whose subject contains the LFDI/SFDI used to
        authorize access. Plain HTTP is not permitted.
  schemas:
    Resource:
      type: object
      description: Base IEEE 2030.5 Resource type that all resources inherit from.
      properties:
        href: { type: string, description: Stable URI of the resource. }
    Link:
      type: object
      description: Link to another resource in the IEEE 2030.5 graph.
      properties:
        href: { type: string }
    DeviceCapability:
      allOf:
        - $ref: '#/components/schemas/Resource'
        - type: object
          properties:
            pollRate: { type: integer, example: 900, description: Recommended poll rate in seconds. }
            EndDeviceListLink: { $ref: '#/components/schemas/Link' }
            SelfDeviceLink: { $ref: '#/components/schemas/Link' }
            TimeLink: { $ref: '#/components/schemas/Link' }
            MirrorUsagePointListLink: { $ref: '#/components/schemas/Link' }
            UsagePointListLink: { $ref: '#/components/schemas/Link' }
            DERProgramListLink: { $ref: '#/components/schemas/Link' }
            DemandResponseProgramListLink: { $ref: '#/components/schemas/Link' }
            MessagingProgramListLink: { $ref: '#/components/schemas/Link' }
            ResponseSetListLink: { $ref: '#/components/schemas/Link' }
    Time:
      allOf:
        - $ref: '#/components/schemas/Resource'
        - type: object
          properties:
            currentTime: { type: integer, description: Current time as epoch seconds. }
            tzOffset: { type: integer, description: Offset of local time from UTC in seconds. }
            dstOffset: { type: integer, description: DST offset from local standard time in seconds. }
            dstStartTime: { type: integer }
            dstEndTime: { type: integer }
            quality: { type: integer, description: Time-source quality enumerated value. }
            localTime: { type: integer }
    EndDevice:
      allOf:
        - $ref: '#/components/schemas/Resource'
        - type: object
          properties:
            sFDI: { type: integer, format: int64, description: Short-form device identifier. }
            lFDI: { type: string, description: Long-form device identifier (32 hex characters). }
            deviceCategory: { type: string, description: Hex-encoded DeviceCategoryType. }
            postRate: { type: integer }
            enabled: { type: boolean }
            changedTime: { type: integer }
            RegistrationLink: { $ref: '#/components/schemas/Link' }
            DeviceInformationLink: { $ref: '#/components/schemas/Link' }
            DeviceStatusLink: { $ref: '#/components/schemas/Link' }
            PowerStatusLink: { $ref: '#/components/schemas/Link' }
            LogEventListLink: { $ref: '#/components/schemas/Link' }
            ConfigurationLink: { $ref: '#/components/schemas/Link' }
            FunctionSetAssignmentsListLink: { $ref: '#/components/schemas/Link' }
    EndDeviceList:
      allOf:
        - $ref: '#/components/schemas/Resource'
        - type: object
          properties:
            all: { type: integer }
            results: { type: integer }
            EndDevice:
              type: array
              items: { $ref: '#/components/schemas/EndDevice' }
    SelfDevice:
      allOf:
        - $ref: '#/components/schemas/EndDevice'
        - type: object
          description: Convenience EndDevice subtype representing the device that hosts the API server.
    Registration:
      allOf:
        - $ref: '#/components/schemas/Resource'
        - type: object
          properties:
            dateTimeRegistered: { type: integer }
            pIN: { type: integer, description: Personal identification number for client validation. }
    DeviceInformation:
      allOf:
        - $ref: '#/components/schemas/Resource'
        - type: object
          properties:
            mfID: { type: integer, description: Manufacturer ID. }
            mfModel: { type: string }
            mfSerNum: { type: string }
            primaryPower: { type: integer, description: 'Primary power source enum.' }
            secondaryPower: { type: integer }
            swActTime: { type: integer }
            swVer: { type: string }
            functionsImplemented: { type: string, description: Hex-encoded FunctionsImplementedType. }
    DeviceStatus:
      allOf:
        - $ref: '#/components/schemas/Resource'
        - type: object
          properties:
            opState: { type: integer, description: '0=N/A, 1=normal, 2=test, 3=disable.' }
            opTime: { type: integer, description: Operating time in seconds. }
            timeLink: { $ref: '#/components/schemas/Link' }
            onCount: { type: integer }
    PowerStatus:
      allOf:
        - $ref: '#/components/schemas/Resource'
        - type: object
          properties:
            currentPowerSource: { type: integer }
            estimatedChargeRemaining: { type: integer }
            estimatedTimeRemaining: { type: integer }
            sessionTimeOnBattery: { type: integer }
            totalTimeOnBattery: { type: integer }
            PEVInfo:
              type: object
              properties:
                chargingPowerNow: { type: integer }
                energyRequestNow: { type: integer }
                maxForwardPower: { type: integer }
    LogEventList:
      allOf:
        - $ref: '#/components/schemas/Resource'
        - type: object
          properties:
            all: { type: integer }
            results: { type: integer }
            LogEvent:
              type: array
              items:
                type: object
                properties:
                  createdDateTime: { type: integer }
                  details: { type: string }
                  extendedData: { type: integer }
                  functionSet: { type: integer }
                  logEventCode: { type: integer }
                  logEventID: { type: integer }
                  logEventPEN: { type: integer }
                  profileID: { type: integer }
    Configuration:
      allOf:
        - $ref: '#/components/schemas/Resource'
        - type: object
          properties:
            currentLocaleLink: { $ref: '#/components/schemas/Link' }
            powerConfigurationLink: { $ref: '#/components/schemas/Link' }
            userInterfaceConfigurationLink: { $ref: '#/components/schemas/Link' }
    FunctionSetAssignmentsList:
      allOf:
        - $ref: '#/components/schemas/Resource'
        - type: object
          properties:
            all: { type: integer }
            results: { type: integer }
            FunctionSetAssignments:
              type: array
              items:
                allOf:
                  - $ref: '#/components

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