diff --git a/openapi/components/responses/AtomEntry_Customer.yaml b/openapi/components/responses/AtomEntry_Customer.yaml
new file mode 100644
index 0000000..00164f5
--- /dev/null
+++ b/openapi/components/responses/AtomEntry_Customer.yaml
@@ -0,0 +1,26 @@
+description: >-
+ OK - Returns an Atom entry containing a single Customer resource.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomEntry.yaml'
+ examples:
+ CustomerEntry:
+ summary: A single Customer entry
+ value: |
+
+ urn:uuid:c8e5f2d9-3a7b-5e4c-9d1f-6b8a2c3e5d7f
+
+
+
+ Customer
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ 0
+ en_US
+ John Smith
+
+
+
diff --git a/openapi/components/responses/AtomEntry_CustomerAccount.yaml b/openapi/components/responses/AtomEntry_CustomerAccount.yaml
new file mode 100644
index 0000000..857421f
--- /dev/null
+++ b/openapi/components/responses/AtomEntry_CustomerAccount.yaml
@@ -0,0 +1,25 @@
+description: >-
+ OK - Returns an Atom entry containing a single CustomerAccount resource.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomEntry.yaml'
+ examples:
+ CustomerAccountEntry:
+ summary: A single CustomerAccount entry
+ value: |
+
+ urn:uuid:e3f7b9d1-5c8a-6e4d-9f2b-7a1c5e8d3f6b
+
+
+
+ CustomerAccount
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ 15
+ ACC-123456
+
+
+
diff --git a/openapi/components/responses/AtomEntry_CustomerAgreement.yaml b/openapi/components/responses/AtomEntry_CustomerAgreement.yaml
new file mode 100644
index 0000000..1c3657c
--- /dev/null
+++ b/openapi/components/responses/AtomEntry_CustomerAgreement.yaml
@@ -0,0 +1,25 @@
+description: >-
+ OK - Returns an Atom entry containing a single CustomerAgreement resource.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomEntry.yaml'
+ examples:
+ CustomerAgreementEntry:
+ summary: A single CustomerAgreement entry
+ value: |
+
+ urn:uuid:a9f3c5e8-7b6d-5e4c-9f2a-8d1c6e5b3a7f
+
+
+
+ CustomerAgreement
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ 840
+ AGR-789012
+
+
+
diff --git a/openapi/components/responses/AtomEntry_EndDevice.yaml b/openapi/components/responses/AtomEntry_EndDevice.yaml
new file mode 100644
index 0000000..0cc373a
--- /dev/null
+++ b/openapi/components/responses/AtomEntry_EndDevice.yaml
@@ -0,0 +1,24 @@
+description: >-
+ OK - Returns an Atom entry containing a single EndDevice resource.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomEntry.yaml'
+ examples:
+ EndDeviceEntry:
+ summary: A single EndDevice entry
+ value: |
+
+ urn:uuid:e9f5d3c8-6b7a-5e4d-9f2c-7a1d6e5b8c3f
+
+
+ EndDevice
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ false
+ false
+
+
+
diff --git a/openapi/components/responses/AtomEntry_Meter.yaml b/openapi/components/responses/AtomEntry_Meter.yaml
new file mode 100644
index 0000000..06e96fd
--- /dev/null
+++ b/openapi/components/responses/AtomEntry_Meter.yaml
@@ -0,0 +1,24 @@
+description: >-
+ OK - Returns an Atom entry containing a single Meter resource.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomEntry.yaml'
+ examples:
+ MeterEntry:
+ summary: A single Meter entry
+ value: |
+
+ urn:uuid:a8f7e6d5-9c8b-5e4d-9f2a-7d1c6e5b8a3f
+
+
+ Meter
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ 16S
+ 900
+
+
+
diff --git a/openapi/components/responses/AtomEntry_ProgramDateIdMappings.yaml b/openapi/components/responses/AtomEntry_ProgramDateIdMappings.yaml
new file mode 100644
index 0000000..3be466f
--- /dev/null
+++ b/openapi/components/responses/AtomEntry_ProgramDateIdMappings.yaml
@@ -0,0 +1,22 @@
+description: >-
+ OK - Returns an Atom entry containing a single ProgramDateIdMappings resource.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomEntry.yaml'
+ examples:
+ ProgramDateIdMappingsEntry:
+ summary: A single ProgramDateIdMappings entry
+ value: |
+
+ urn:uuid:f8e9d6c7-5b4a-5e4d-9f2c-7a1d6e5b8c3f
+
+
+ ProgramDateIdMappings
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+
+
+
diff --git a/openapi/components/responses/AtomEntry_ServiceLocation.yaml b/openapi/components/responses/AtomEntry_ServiceLocation.yaml
new file mode 100644
index 0000000..fbb5909
--- /dev/null
+++ b/openapi/components/responses/AtomEntry_ServiceLocation.yaml
@@ -0,0 +1,24 @@
+description: >-
+ OK - Returns an Atom entry containing a single ServiceLocation resource.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomEntry.yaml'
+ examples:
+ ServiceLocationEntry:
+ summary: A single ServiceLocation entry
+ value: |
+
+ urn:uuid:c7f9e5d2-8a6b-5e4c-9f3a-7d1c6e5b8a2f
+
+
+
+ ServiceLocation
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ false
+
+
+
diff --git a/openapi/components/responses/AtomEntry_ServiceSupplier.yaml b/openapi/components/responses/AtomEntry_ServiceSupplier.yaml
new file mode 100644
index 0000000..3aae824
--- /dev/null
+++ b/openapi/components/responses/AtomEntry_ServiceSupplier.yaml
@@ -0,0 +1,23 @@
+description: >-
+ OK - Returns an Atom entry containing a single ServiceSupplier resource.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomEntry.yaml'
+ examples:
+ ServiceSupplierEntry:
+ summary: A single ServiceSupplier entry
+ value: |
+
+ urn:uuid:c8f9e6d5-7b6a-5e4c-9f2d-8a1c6e5b7a3f
+
+
+ ServiceSupplier
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ 0
+
+
+
diff --git a/openapi/components/responses/AtomEntry_Statement.yaml b/openapi/components/responses/AtomEntry_Statement.yaml
new file mode 100644
index 0000000..6dfb28f
--- /dev/null
+++ b/openapi/components/responses/AtomEntry_Statement.yaml
@@ -0,0 +1,23 @@
+description: >-
+ OK - Returns an Atom entry containing a single Statement resource.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomEntry.yaml'
+ examples:
+ StatementEntry:
+ summary: A single Statement entry
+ value: |
+
+ urn:uuid:e8f9d6c7-6b5a-5e4d-9f2c-7a1d6e5b8c3f
+
+
+ Statement
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ 1697820000
+
+
+
diff --git a/openapi/components/responses/AtomFeed_Customer.yaml b/openapi/components/responses/AtomFeed_Customer.yaml
new file mode 100644
index 0000000..0a0a593
--- /dev/null
+++ b/openapi/components/responses/AtomFeed_Customer.yaml
@@ -0,0 +1,32 @@
+description: >-
+ OK - Returns an Atom feed containing a collection of Customer entries.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomFeed.yaml'
+ examples:
+ CustomerFeed:
+ summary: A feed containing Customer resources
+ value: |
+
+ urn:uuid:b47f3a45-8d21-5c19-a3d2-7f1e4b9c6a08
+
+ Customer
+ 2023-10-20T17:33:23.054424Z
+
+ urn:uuid:c8e5f2d9-3a7b-5e4c-9d1f-6b8a2c3e5d7f
+
+
+
+ Customer
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ 0
+ en_US
+ John Smith
+
+
+
+
diff --git a/openapi/components/responses/AtomFeed_CustomerAccount.yaml b/openapi/components/responses/AtomFeed_CustomerAccount.yaml
new file mode 100644
index 0000000..59839c9
--- /dev/null
+++ b/openapi/components/responses/AtomFeed_CustomerAccount.yaml
@@ -0,0 +1,31 @@
+description: >-
+ OK - Returns an Atom feed containing a collection of CustomerAccount entries.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomFeed.yaml'
+ examples:
+ CustomerAccountFeed:
+ summary: A feed containing CustomerAccount resources
+ value: |
+
+ urn:uuid:d5a9c8f2-4e6b-5d7a-8c3e-1f9b6a5d8c2e
+
+ CustomerAccount
+ 2023-10-20T17:33:23.054424Z
+
+ urn:uuid:e3f7b9d1-5c8a-6e4d-9f2b-7a1c5e8d3f6b
+
+
+
+ CustomerAccount
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ 15
+ ACC-123456
+
+
+
+
diff --git a/openapi/components/responses/AtomFeed_CustomerAgreement.yaml b/openapi/components/responses/AtomFeed_CustomerAgreement.yaml
new file mode 100644
index 0000000..f84a938
--- /dev/null
+++ b/openapi/components/responses/AtomFeed_CustomerAgreement.yaml
@@ -0,0 +1,31 @@
+description: >-
+ OK - Returns an Atom feed containing a collection of CustomerAgreement entries.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomFeed.yaml'
+ examples:
+ CustomerAgreementFeed:
+ summary: A feed containing CustomerAgreement resources
+ value: |
+
+ urn:uuid:f2d8c9e5-6a7b-5c4d-8e3f-9b1a6c5d8e2f
+
+ CustomerAgreement
+ 2023-10-20T17:33:23.054424Z
+
+ urn:uuid:a9f3c5e8-7b6d-5e4c-9f2a-8d1c6e5b3a7f
+
+
+
+ CustomerAgreement
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ 840
+ AGR-789012
+
+
+
+
diff --git a/openapi/components/responses/AtomFeed_EndDevice.yaml b/openapi/components/responses/AtomFeed_EndDevice.yaml
new file mode 100644
index 0000000..b963eec
--- /dev/null
+++ b/openapi/components/responses/AtomFeed_EndDevice.yaml
@@ -0,0 +1,30 @@
+description: >-
+ OK - Returns an Atom feed containing a collection of EndDevice entries.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomFeed.yaml'
+ examples:
+ EndDeviceFeed:
+ summary: A feed containing EndDevice resources
+ value: |
+
+ urn:uuid:d8e9f5c3-7a6b-5e4d-9f2c-8a1d6e5c8b3f
+
+ EndDevice
+ 2023-10-20T17:33:23.054424Z
+
+ urn:uuid:e9f5d3c8-6b7a-5e4d-9f2c-7a1d6e5b8c3f
+
+
+ EndDevice
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ false
+ false
+
+
+
+
diff --git a/openapi/components/responses/AtomFeed_Meter.yaml b/openapi/components/responses/AtomFeed_Meter.yaml
new file mode 100644
index 0000000..0b038fa
--- /dev/null
+++ b/openapi/components/responses/AtomFeed_Meter.yaml
@@ -0,0 +1,30 @@
+description: >-
+ OK - Returns an Atom feed containing a collection of Meter entries.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomFeed.yaml'
+ examples:
+ MeterFeed:
+ summary: A feed containing Meter resources
+ value: |
+
+ urn:uuid:f9e6d4c8-7b6a-5e4d-9f2c-8a1d6e5c7b3f
+
+ Meter
+ 2023-10-20T17:33:23.054424Z
+
+ urn:uuid:a8f7e6d5-9c8b-5e4d-9f2a-7d1c6e5b8a3f
+
+
+ Meter
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ 16S
+ 900
+
+
+
+
diff --git a/openapi/components/responses/AtomFeed_ProgramDateIdMappings.yaml b/openapi/components/responses/AtomFeed_ProgramDateIdMappings.yaml
new file mode 100644
index 0000000..eabeae7
--- /dev/null
+++ b/openapi/components/responses/AtomFeed_ProgramDateIdMappings.yaml
@@ -0,0 +1,28 @@
+description: >-
+ OK - Returns an Atom feed containing a collection of ProgramDateIdMappings entries.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomFeed.yaml'
+ examples:
+ ProgramDateIdMappingsFeed:
+ summary: A feed containing ProgramDateIdMappings resources
+ value: |
+
+ urn:uuid:e9f7d5c8-6b5a-5e4d-9f2c-8a1d6e5c7b3f
+
+ ProgramDateIdMappings
+ 2023-10-20T17:33:23.054424Z
+
+ urn:uuid:f8e9d6c7-5b4a-5e4d-9f2c-7a1d6e5b8c3f
+
+
+ ProgramDateIdMappings
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+
+
+
+
diff --git a/openapi/components/responses/AtomFeed_ServiceLocation.yaml b/openapi/components/responses/AtomFeed_ServiceLocation.yaml
new file mode 100644
index 0000000..c156d79
--- /dev/null
+++ b/openapi/components/responses/AtomFeed_ServiceLocation.yaml
@@ -0,0 +1,30 @@
+description: >-
+ OK - Returns an Atom feed containing a collection of ServiceLocation entries.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomFeed.yaml'
+ examples:
+ ServiceLocationFeed:
+ summary: A feed containing ServiceLocation resources
+ value: |
+
+ urn:uuid:b5e8f3c9-6d7a-5c4e-8f2b-9a1c6d5e8b3f
+
+ ServiceLocation
+ 2023-10-20T17:33:23.054424Z
+
+ urn:uuid:c7f9e5d2-8a6b-5e4c-9f3a-7d1c6e5b8a2f
+
+
+
+ ServiceLocation
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ false
+
+
+
+
diff --git a/openapi/components/responses/AtomFeed_ServiceSupplier.yaml b/openapi/components/responses/AtomFeed_ServiceSupplier.yaml
new file mode 100644
index 0000000..dd24683
--- /dev/null
+++ b/openapi/components/responses/AtomFeed_ServiceSupplier.yaml
@@ -0,0 +1,29 @@
+description: >-
+ OK - Returns an Atom feed containing a collection of ServiceSupplier entries.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomFeed.yaml'
+ examples:
+ ServiceSupplierFeed:
+ summary: A feed containing ServiceSupplier resources
+ value: |
+
+ urn:uuid:b9e7f5d4-8c6a-5e4d-9f2b-7a1c6e5d8b3f
+
+ ServiceSupplier
+ 2023-10-20T17:33:23.054424Z
+
+ urn:uuid:c8f9e6d5-7b6a-5e4c-9f2d-8a1c6e5b7a3f
+
+
+ ServiceSupplier
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ 0
+
+
+
+
diff --git a/openapi/components/responses/AtomFeed_Statement.yaml b/openapi/components/responses/AtomFeed_Statement.yaml
new file mode 100644
index 0000000..f662cc5
--- /dev/null
+++ b/openapi/components/responses/AtomFeed_Statement.yaml
@@ -0,0 +1,29 @@
+description: >-
+ OK - Returns an Atom feed containing a collection of Statement entries.
+content:
+ application/atom+xml:
+ schema:
+ $ref: '../schemas/AtomFeed.yaml'
+ examples:
+ StatementFeed:
+ summary: A feed containing Statement resources
+ value: |
+
+ urn:uuid:d9e8f6c5-7b6a-5e4d-9f2c-8a1d6e5c8b3f
+
+ Statement
+ 2023-10-20T17:33:23.054424Z
+
+ urn:uuid:e8f9d6c7-6b5a-5e4d-9f2c-7a1d6e5b8c3f
+
+
+ Statement
+ 2023-10-20T17:32:35.448812Z
+ 2023-10-20T17:33:23.054424Z
+
+
+ 1697820000
+
+
+
+
diff --git a/openapi/components/schemas/AcceptanceTest.yaml b/openapi/components/schemas/AcceptanceTest.yaml
new file mode 100644
index 0000000..e2bf4f7
--- /dev/null
+++ b/openapi/components/schemas/AcceptanceTest.yaml
@@ -0,0 +1,43 @@
+description: >-
+ Asset acceptance test information.
+type: object
+xml:
+ name: AcceptanceTest
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ date:
+ description: Date of acceptance test (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: date
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ acceptanceInterval:
+ description: Time interval during which acceptance testing occurred.
+ $ref: './DateTimeInterval.yaml'
+ qualityTests:
+ description: Quality tests performed.
+ type: string
+ maxLength: 512
+ xml:
+ name: qualityTests
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ qualityDescription:
+ description: Description of quality assessment.
+ type: string
+ maxLength: 512
+ xml:
+ name: qualityDescription
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ qualityComment:
+ description: Comments on quality test results.
+ type: string
+ maxLength: 512
+ xml:
+ name: qualityComment
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/AccountNotification.yaml b/openapi/components/schemas/AccountNotification.yaml
new file mode 100644
index 0000000..774ab43
--- /dev/null
+++ b/openapi/components/schemas/AccountNotification.yaml
@@ -0,0 +1,46 @@
+description: >-
+ Notification of customer actions or events that may trigger billing or
+ service actions.
+type: object
+xml:
+ name: AccountNotification
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ methodKind:
+ description: >-
+ Method of notification delivery.
+ 0 = email, 1 = letter, 2 = ivr (interactive voice response),
+ 3 = sms, 4 = other.
+ type: integer
+ format: int32
+ xml:
+ name: methodKind
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ time:
+ description: Time of notification (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: time
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ note:
+ description: Notification message or note.
+ type: string
+ maxLength: 512
+ xml:
+ name: note
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ customerNotificationKind:
+ description: >-
+ Kind of customer notification.
+ 0 = disconnect, 1 = shutoff, 2 = paymentDue, 3 = other.
+ type: integer
+ format: int32
+ xml:
+ name: customerNotificationKind
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/Agreement.yaml b/openapi/components/schemas/Agreement.yaml
new file mode 100644
index 0000000..b157b47
--- /dev/null
+++ b/openapi/components/schemas/Agreement.yaml
@@ -0,0 +1,23 @@
+description: >-
+ Formal agreement between parties with terms and conditions. Extends Document
+ to include signature date and validity period.
+type: object
+xml:
+ name: Agreement
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ document:
+ description: Base document properties.
+ $ref: './Document.yaml'
+ signDate:
+ description: Date agreement was signed (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: signDate
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ validityInterval:
+ description: Time period during which agreement is valid.
+ $ref: './DateTimeInterval.yaml'
diff --git a/openapi/components/schemas/Asset.yaml b/openapi/components/schemas/Asset.yaml
new file mode 100644
index 0000000..4087480
--- /dev/null
+++ b/openapi/components/schemas/Asset.yaml
@@ -0,0 +1,84 @@
+description: >-
+ Tangible resource of the utility, including power system equipment, vehicles,
+ plant, buildings, and metering devices.
+type: object
+xml:
+ name: Asset
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ type:
+ description: Type or category of asset.
+ type: string
+ maxLength: 256
+ xml:
+ name: type
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ utcNumber:
+ description: Utility-assigned unique identifier.
+ type: string
+ maxLength: 256
+ xml:
+ name: utcNumber
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ serialNumber:
+ description: Manufacturer serial number.
+ type: string
+ maxLength: 256
+ xml:
+ name: serialNumber
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ lotNumber:
+ description: Manufacturing lot number.
+ type: string
+ maxLength: 256
+ xml:
+ name: lotNumber
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ purchasePrice:
+ description: Purchase price of the asset.
+ type: number
+ format: double
+ xml:
+ name: purchasePrice
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ critical:
+ description: Indicates if asset is critical to operations.
+ type: boolean
+ xml:
+ name: critical
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ electronicAddress:
+ description: Electronic address for communicating with asset.
+ $ref: './ElectronicAddress.yaml'
+ lifecycle:
+ description: Lifecycle dates for the asset.
+ $ref: './LifecycleDate.yaml'
+ acceptanceTest:
+ description: Acceptance test information.
+ $ref: './AcceptanceTest.yaml'
+ initialCondition:
+ description: Initial condition assessment.
+ type: string
+ maxLength: 512
+ xml:
+ name: initialCondition
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ initialLossOfLife:
+ description: Initial loss of life percentage.
+ type: number
+ format: double
+ xml:
+ name: initialLossOfLife
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ status:
+ description: Current status of asset.
+ $ref: './Status.yaml'
diff --git a/openapi/components/schemas/BatchItemInfo.yaml b/openapi/components/schemas/BatchItemInfo.yaml
new file mode 100644
index 0000000..c6663a3
--- /dev/null
+++ b/openapi/components/schemas/BatchItemInfo.yaml
@@ -0,0 +1,42 @@
+description: >-
+ Batch transaction information for tracking resource operations.
+type: object
+xml:
+ name: BatchItemInfo
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ name:
+ description: Resource name or identifier.
+ type: string
+ maxLength: 256
+ xml:
+ name: name
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ operation:
+ description: >-
+ CRUD operation type.
+ 0 = Create, 1 = Read, 2 = Update, 3 = Delete.
+ type: integer
+ format: int32
+ xml:
+ name: operation
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ statusCode:
+ description: HTTP status code for the operation (e.g., 200, 201, 404).
+ type: integer
+ format: int32
+ xml:
+ name: statusCode
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ statusReason:
+ description: Reason for the status (success message or error description).
+ type: string
+ maxLength: 512
+ xml:
+ name: statusReason
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/Customer.yaml b/openapi/components/schemas/Customer.yaml
new file mode 100644
index 0000000..5e8af09
--- /dev/null
+++ b/openapi/components/schemas/Customer.yaml
@@ -0,0 +1,72 @@
+description: >-
+ Organisation receiving services from service supplier.
+type: object
+xml:
+ name: Customer
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ organisation:
+ description: Customer's contact information.
+ $ref: './Organisation.yaml'
+ kind:
+ description: >-
+ Kind of customer.
+ 0 = residential, 1 = residentialAndCommercial, 2 = residentialAndStreetlight,
+ 3 = residentialStreetlightOthers, 4 = residentialFarmService,
+ 5 = commercialIndustrial, 6 = pumpingLoad, 7 = windMachine,
+ 8 = energyServiceSupplier, 9 = energyServiceScheduler, 10 = enterprise,
+ 11 = regionalOperator, 12 = subsidiary, 13 = internalUse, 14 = other.
+ type: integer
+ format: int32
+ example: 0
+ xml:
+ name: kind
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ specialNeed:
+ description: Special service needs indicator.
+ type: string
+ maxLength: 256
+ xml:
+ name: specialNeed
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ vip:
+ description: Very important person indicator (deprecated).
+ type: boolean
+ xml:
+ name: vip
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ pucNumber:
+ description: Public utilities commission ID.
+ type: string
+ maxLength: 256
+ xml:
+ name: pucNumber
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ status:
+ description: Status of this customer.
+ $ref: './Status.yaml'
+ priority:
+ description: Priority of the customer.
+ $ref: './Priority.yaml'
+ locale:
+ description: Language and locale identifier.
+ type: string
+ maxLength: 256
+ example: en_US
+ xml:
+ name: locale
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ customerName:
+ description: Name of the customer.
+ type: string
+ maxLength: 256
+ xml:
+ name: customerName
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/CustomerAccount.yaml b/openapi/components/schemas/CustomerAccount.yaml
new file mode 100644
index 0000000..e25a96e
--- /dev/null
+++ b/openapi/components/schemas/CustomerAccount.yaml
@@ -0,0 +1,59 @@
+description: >-
+ Assignment of products and services (customer premise equipment) to a customer
+ for billing and payment purposes. Contains billing cycle information and
+ payment notifications.
+type: object
+xml:
+ name: CustomerAccount
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ document:
+ description: Basic account information including creation date and status.
+ $ref: './Document.yaml'
+ billingCycle:
+ description: Billing cycle day of the month (e.g., "15" for 15th of month).
+ type: string
+ maxLength: 256
+ example: "15"
+ xml:
+ name: billingCycle
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ budgetBill:
+ description: Budget billing code or identifier.
+ type: string
+ maxLength: 256
+ xml:
+ name: budgetBill
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ lastBillAmount:
+ description: Final bill amount before service shut-off (in currency minor units).
+ type: integer
+ format: int64
+ xml:
+ name: lastBillAmount
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ notifications:
+ description: Account notifications for customer actions.
+ type: array
+ xml:
+ name: notifications
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ wrapped: false
+ items:
+ $ref: './AccountNotification.yaml'
+ contactInfo:
+ description: Billing contact information.
+ $ref: './Organisation.yaml'
+ accountId:
+ description: Unique account identifier.
+ type: string
+ maxLength: 256
+ xml:
+ name: accountId
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/CustomerAgreement.yaml b/openapi/components/schemas/CustomerAgreement.yaml
new file mode 100644
index 0000000..81db0fa
--- /dev/null
+++ b/openapi/components/schemas/CustomerAgreement.yaml
@@ -0,0 +1,85 @@
+description: >-
+ Agreement between customer and service supplier for service at a specific
+ service location. May contain demand response program participation and
+ applicable pricing structures.
+type: object
+xml:
+ name: CustomerAgreement
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ agreement:
+ description: Formal agreement terms and conditions.
+ $ref: './Agreement.yaml'
+ loadMgmt:
+ description: Load management program code.
+ type: string
+ maxLength: 256
+ xml:
+ name: loadMgmt
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ isPrePay:
+ description: Indicates if customer is on pre-pay program.
+ type: boolean
+ xml:
+ name: isPrePay
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ shutOffDateTime:
+ description: Date and time of final service billing (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: shutOffDateTime
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ DemandResponseProgram:
+ description: Demand response programs associated with this agreement.
+ type: array
+ xml:
+ name: DemandResponseProgram
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ wrapped: false
+ items:
+ $ref: './DemandResponseProgram.yaml'
+ PricingStructures:
+ description: Applicable pricing structures for this agreement.
+ type: array
+ xml:
+ name: PricingStructures
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ wrapped: false
+ items:
+ $ref: './PricingStructure.yaml'
+ currency:
+ description: >-
+ Currency used for monetary amounts. ISO 4217 currency codes.
+ 840 = USD, 978 = EUR, 36 = AUD, 124 = CAD, 826 = GBP, 392 = JPY.
+ type: integer
+ format: int32
+ example: 840
+ xml:
+ name: currency
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ futureStatus:
+ description: Known future status changes for this agreement.
+ type: array
+ xml:
+ name: futureStatus
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ wrapped: false
+ items:
+ $ref: './Status.yaml'
+ agreementId:
+ description: Unique agreement identifier.
+ type: string
+ maxLength: 256
+ xml:
+ name: agreementId
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/DemandResponseProgram.yaml b/openapi/components/schemas/DemandResponseProgram.yaml
new file mode 100644
index 0000000..bf940bd
--- /dev/null
+++ b/openapi/components/schemas/DemandResponseProgram.yaml
@@ -0,0 +1,53 @@
+description: >-
+ Demand response program characteristics and enrollment information.
+type: object
+xml:
+ name: DemandResponseProgram
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ programName:
+ description: Name of the demand response program.
+ type: string
+ maxLength: 256
+ xml:
+ name: programName
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ enrollmentStatus:
+ description: >-
+ Enrollment status.
+ 0 = unenrolled, 1 = enrolled, 2 = enrolledPending.
+ type: integer
+ format: int32
+ xml:
+ name: enrollmentStatus
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ programDescription:
+ description: Description of the program.
+ type: string
+ maxLength: 512
+ xml:
+ name: programDescription
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ programDate:
+ description: Program enrollment or termination date.
+ $ref: './ProgramDate.yaml'
+ capacityReservationLevel:
+ description: Reserved capacity level for this program.
+ type: number
+ format: double
+ xml:
+ name: capacityReservationLevel
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ DRProgramNomination:
+ description: Demand response program nomination details.
+ type: string
+ maxLength: 512
+ xml:
+ name: DRProgramNomination
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/Document.yaml b/openapi/components/schemas/Document.yaml
new file mode 100644
index 0000000..7b6a53d
--- /dev/null
+++ b/openapi/components/schemas/Document.yaml
@@ -0,0 +1,81 @@
+description: >-
+ Parent class for various types of documents and information groupings.
+type: object
+xml:
+ name: Document
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ type:
+ description: Type or category of document.
+ type: string
+ maxLength: 256
+ xml:
+ name: type
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ authorName:
+ description: Author or creator of the document.
+ type: string
+ maxLength: 256
+ xml:
+ name: authorName
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ createdDateTime:
+ description: Date and time document was created (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: createdDateTime
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ lastModifiedDateTime:
+ description: Date and time document was last modified (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: lastModifiedDateTime
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ revisionNumber:
+ description: Document revision or version number.
+ type: string
+ maxLength: 64
+ xml:
+ name: revisionNumber
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ electronicAddress:
+ description: Electronic location of document.
+ $ref: './ElectronicAddress.yaml'
+ subject:
+ description: Subject or topic of document.
+ type: string
+ maxLength: 256
+ xml:
+ name: subject
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ title:
+ description: Document title.
+ type: string
+ maxLength: 256
+ xml:
+ name: title
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ docStatus:
+ description: Document status information.
+ $ref: './Status.yaml'
+ status:
+ description: Overall status.
+ $ref: './Status.yaml'
+ comment:
+ description: General comments about the document.
+ type: string
+ maxLength: 512
+ xml:
+ name: comment
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/ElectronicAddress.yaml b/openapi/components/schemas/ElectronicAddress.yaml
new file mode 100644
index 0000000..1c9038f
--- /dev/null
+++ b/openapi/components/schemas/ElectronicAddress.yaml
@@ -0,0 +1,77 @@
+description: >-
+ Electronic contact information including email, web, LAN, and radio addresses.
+type: object
+xml:
+ name: ElectronicAddress
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ lan:
+ description: LAN address or identifier.
+ type: string
+ maxLength: 256
+ xml:
+ name: lan
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ mac:
+ description: MAC address.
+ type: string
+ maxLength: 256
+ pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$'
+ example: "00:1A:2B:3C:4D:5E"
+ xml:
+ name: mac
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ email1:
+ description: Primary email address.
+ type: string
+ format: email
+ maxLength: 256
+ xml:
+ name: email1
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ email2:
+ description: Secondary email address.
+ type: string
+ format: email
+ maxLength: 256
+ xml:
+ name: email2
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ web:
+ description: Website URL.
+ type: string
+ format: uri
+ maxLength: 256
+ xml:
+ name: web
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ radio:
+ description: Radio address or identifier.
+ type: string
+ maxLength: 256
+ xml:
+ name: radio
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ userID:
+ description: User identifier.
+ type: string
+ maxLength: 256
+ xml:
+ name: userID
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ password:
+ description: Password (should be encrypted/hashed).
+ type: string
+ maxLength: 256
+ xml:
+ name: password
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/EndDevice.yaml b/openapi/components/schemas/EndDevice.yaml
new file mode 100644
index 0000000..e533b6f
--- /dev/null
+++ b/openapi/components/schemas/EndDevice.yaml
@@ -0,0 +1,43 @@
+description: >-
+ Asset container that performs one or more end device functions such as
+ metering, load management, connect/disconnect, and accounting. May represent
+ physical or virtual devices.
+type: object
+xml:
+ name: EndDevice
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ asset:
+ description: Description of the equipment or device as an asset.
+ $ref: './Asset.yaml'
+ isVirtual:
+ description: Indicates if this is a virtual device (not physical hardware).
+ type: boolean
+ xml:
+ name: isVirtual
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ isPan:
+ description: Indicates if device is part of premises area network.
+ type: boolean
+ xml:
+ name: isPan
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ installCode:
+ description: Installation code for the device.
+ type: string
+ maxLength: 256
+ xml:
+ name: installCode
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ amrSystem:
+ description: Automated meter reading or communication system identifier.
+ type: string
+ maxLength: 256
+ xml:
+ name: amrSystem
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/LifecycleDate.yaml b/openapi/components/schemas/LifecycleDate.yaml
new file mode 100644
index 0000000..b0d9b61
--- /dev/null
+++ b/openapi/components/schemas/LifecycleDate.yaml
@@ -0,0 +1,72 @@
+description: >-
+ Important dates in the lifecycle of an asset.
+type: object
+xml:
+ name: LifecycleDate
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ manufacturedDate:
+ description: Date asset was manufactured (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: manufacturedDate
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ purchaseDate:
+ description: Date asset was purchased (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: purchaseDate
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ receivedDate:
+ description: Date asset was received (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: receivedDate
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ installedDate:
+ description: Date asset was installed (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: installedDate
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ removedDate:
+ description: Date asset was removed (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: removedDate
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ recoveredDate:
+ description: Date asset was recovered (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: recoveredDate
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ disposedDate:
+ description: Date asset was disposed (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: disposedDate
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ accountedForDate:
+ description: Date asset was accounted for (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: accountedForDate
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/Location.yaml b/openapi/components/schemas/Location.yaml
new file mode 100644
index 0000000..84c8452
--- /dev/null
+++ b/openapi/components/schemas/Location.yaml
@@ -0,0 +1,61 @@
+description: >-
+ A geographic or physical place, point, or area that may contain position
+ points and address information.
+type: object
+xml:
+ name: Location
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ type:
+ description: Type or category of location.
+ type: string
+ maxLength: 256
+ xml:
+ name: type
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ mainAddress:
+ description: Main address for the location.
+ $ref: './StreetAddress.yaml'
+ secondaryAddress:
+ description: Secondary or alternative address.
+ $ref: './StreetAddress.yaml'
+ phone1:
+ description: Primary phone number for location.
+ $ref: './TelephoneNumber.yaml'
+ phone2:
+ description: Secondary phone number for location.
+ $ref: './TelephoneNumber.yaml'
+ electronicAddress:
+ description: Electronic address information.
+ $ref: './ElectronicAddress.yaml'
+ geoInfoReference:
+ description: Reference to geographic information system data.
+ type: string
+ maxLength: 512
+ xml:
+ name: geoInfoReference
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ direction:
+ description: Directional information for finding location.
+ type: string
+ maxLength: 512
+ xml:
+ name: direction
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ status:
+ description: Status of this location.
+ $ref: './Status.yaml'
+ positionPoints:
+ description: Geographic coordinate points.
+ type: array
+ xml:
+ name: positionPoints
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ wrapped: false
+ items:
+ $ref: './PositionPoint.yaml'
diff --git a/openapi/components/schemas/Meter.yaml b/openapi/components/schemas/Meter.yaml
new file mode 100644
index 0000000..4d38dcf
--- /dev/null
+++ b/openapi/components/schemas/Meter.yaml
@@ -0,0 +1,40 @@
+description: >-
+ Physical asset that performs the metering role of the usage point. Extends
+ EndDevice with meter-specific properties including form number and multipliers.
+type: object
+xml:
+ name: Meter
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ endDevice:
+ description: Description of the metering equipment and device characteristics.
+ $ref: './EndDevice.yaml'
+ formNumber:
+ description: Meter form designation per ANSI C12.10 standard.
+ type: string
+ maxLength: 256
+ example: "16S"
+ xml:
+ name: formNumber
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ MeterMultipliers:
+ description: All multipliers applicable to this meter for scaling readings.
+ type: array
+ xml:
+ name: MeterMultipliers
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ wrapped: false
+ items:
+ $ref: './MeterMultiplier.yaml'
+ intervalLength:
+ description: Current interval length in seconds for meter readings.
+ type: integer
+ format: int32
+ example: 900
+ xml:
+ name: intervalLength
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/MeterMultiplier.yaml b/openapi/components/schemas/MeterMultiplier.yaml
new file mode 100644
index 0000000..8abcf28
--- /dev/null
+++ b/openapi/components/schemas/MeterMultiplier.yaml
@@ -0,0 +1,26 @@
+description: >-
+ Meter multiplier information for scaling meter readings.
+type: object
+xml:
+ name: MeterMultiplier
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ kind:
+ description: >-
+ Kind of multiplier.
+ 0 = kH (disk revolution constant), 1 = transformerRatio, 2 = other.
+ type: integer
+ format: int32
+ xml:
+ name: kind
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ value:
+ description: Multiplier value.
+ type: number
+ format: double
+ xml:
+ name: value
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/Organisation.yaml b/openapi/components/schemas/Organisation.yaml
new file mode 100644
index 0000000..77c943e
--- /dev/null
+++ b/openapi/components/schemas/Organisation.yaml
@@ -0,0 +1,32 @@
+description: >-
+ Organizational contact information including address, phone, and electronic
+ communication details.
+type: object
+xml:
+ name: Organisation
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ streetAddress:
+ description: Street and mailing address.
+ $ref: './StreetAddress.yaml'
+ postalAddress:
+ description: Alternative postal address if different from street address.
+ $ref: './StreetAddress.yaml'
+ phone1:
+ description: Primary telephone number.
+ $ref: './TelephoneNumber.yaml'
+ phone2:
+ description: Secondary telephone number.
+ $ref: './TelephoneNumber.yaml'
+ electronicAddress:
+ description: Electronic contact information (email, web, etc.).
+ $ref: './ElectronicAddress.yaml'
+ organisationName:
+ description: Name of the organization.
+ type: string
+ maxLength: 256
+ xml:
+ name: organisationName
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/PositionPoint.yaml b/openapi/components/schemas/PositionPoint.yaml
new file mode 100644
index 0000000..71c8fbf
--- /dev/null
+++ b/openapi/components/schemas/PositionPoint.yaml
@@ -0,0 +1,32 @@
+description: >-
+ Set of spatial coordinates describing a geographic point.
+type: object
+xml:
+ name: PositionPoint
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ xPosition:
+ description: X coordinate (longitude for geographic coordinates).
+ type: string
+ maxLength: 256
+ xml:
+ name: xPosition
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ yPosition:
+ description: Y coordinate (latitude for geographic coordinates).
+ type: string
+ maxLength: 256
+ xml:
+ name: yPosition
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ zPosition:
+ description: Z coordinate (elevation or altitude).
+ type: string
+ maxLength: 256
+ xml:
+ name: zPosition
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/PricingStructure.yaml b/openapi/components/schemas/PricingStructure.yaml
new file mode 100644
index 0000000..0e0c951
--- /dev/null
+++ b/openapi/components/schemas/PricingStructure.yaml
@@ -0,0 +1,11 @@
+description: >-
+ Reference to pricing structure or tariff applicable to agreement.
+ Represented as a URI reference.
+type: string
+format: uri
+maxLength: 512
+example: "https://data.greenbuttonconnect.org/DataCustodian/espi/1_1/resource/ReadingType/1"
+xml:
+ name: PricingStructure
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/Priority.yaml b/openapi/components/schemas/Priority.yaml
new file mode 100644
index 0000000..4834551
--- /dev/null
+++ b/openapi/components/schemas/Priority.yaml
@@ -0,0 +1,32 @@
+description: >-
+ Priority definition with ranking and type classification.
+type: object
+xml:
+ name: Priority
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ rank:
+ description: Priority rank (higher number = higher priority).
+ type: integer
+ format: int32
+ xml:
+ name: rank
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ type:
+ description: Type or category of priority.
+ type: string
+ maxLength: 256
+ xml:
+ name: type
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ justification:
+ description: Justification or reason for the priority level.
+ type: string
+ maxLength: 512
+ xml:
+ name: justification
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/ProgramDate.yaml b/openapi/components/schemas/ProgramDate.yaml
new file mode 100644
index 0000000..1e14d41
--- /dev/null
+++ b/openapi/components/schemas/ProgramDate.yaml
@@ -0,0 +1,24 @@
+description: >-
+ Program enrollment or termination date with description.
+type: object
+xml:
+ name: ProgramDate
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ programDate:
+ description: Program date (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: programDate
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ programDateDescription:
+ description: Description of the program date (e.g., "enrollment", "termination").
+ type: string
+ maxLength: 256
+ xml:
+ name: programDateDescription
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/ProgramDateIdMapping.yaml b/openapi/components/schemas/ProgramDateIdMapping.yaml
new file mode 100644
index 0000000..3d22519
--- /dev/null
+++ b/openapi/components/schemas/ProgramDateIdMapping.yaml
@@ -0,0 +1,52 @@
+description: >-
+ Energy efficiency program mapping with enrollment details.
+type: object
+xml:
+ name: ProgramDateIdMapping
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ programDateType:
+ description: >-
+ Type of program date.
+ 0 = enrollment, 1 = termination, 2 = other.
+ type: integer
+ format: int32
+ xml:
+ name: programDateType
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ code:
+ description: Program code or identifier.
+ type: string
+ maxLength: 256
+ xml:
+ name: code
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ programName:
+ description: Name of the energy efficiency program.
+ type: string
+ maxLength: 256
+ xml:
+ name: programName
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ enrollmentDate:
+ description: Date of enrollment (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: enrollmentDate
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ enrollmentStatus:
+ description: >-
+ Enrollment status.
+ 0 = unenrolled, 1 = enrolled, 2 = enrolledPending.
+ type: integer
+ format: int32
+ xml:
+ name: enrollmentStatus
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/ProgramDateIdMappings.yaml b/openapi/components/schemas/ProgramDateIdMappings.yaml
new file mode 100644
index 0000000..9c5ace5
--- /dev/null
+++ b/openapi/components/schemas/ProgramDateIdMappings.yaml
@@ -0,0 +1,18 @@
+description: >-
+ Collection of all customer energy efficiency program enrollments and mappings.
+type: object
+xml:
+ name: ProgramDateIdMappings
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ programDateIdMapping:
+ description: Individual program date mapping with enrollment details.
+ type: array
+ xml:
+ name: programDateIdMapping
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ wrapped: false
+ items:
+ $ref: './ProgramDateIdMapping.yaml'
diff --git a/openapi/components/schemas/ServiceLocation.yaml b/openapi/components/schemas/ServiceLocation.yaml
new file mode 100644
index 0000000..6c66699
--- /dev/null
+++ b/openapi/components/schemas/ServiceLocation.yaml
@@ -0,0 +1,43 @@
+description: >-
+ A real estate location (premises) where service is provided. Contains physical
+ address, access information, and associated usage points.
+type: object
+xml:
+ name: ServiceLocation
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ location:
+ description: Geographic location and address of the service site.
+ $ref: './Location.yaml'
+ accessMethod:
+ description: Method or instructions for accessing the location.
+ type: string
+ maxLength: 256
+ xml:
+ name: accessMethod
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ siteAccessProblem:
+ description: Description of any problems accessing the location.
+ type: string
+ maxLength: 256
+ xml:
+ name: siteAccessProblem
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ needsInspection:
+ description: Indicates if location requires inspection.
+ type: boolean
+ xml:
+ name: needsInspection
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ outageBlock:
+ description: Outage block identifier for this service location.
+ type: string
+ maxLength: 32
+ xml:
+ name: outageBlock
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/ServiceSupplier.yaml b/openapi/components/schemas/ServiceSupplier.yaml
new file mode 100644
index 0000000..cad7211
--- /dev/null
+++ b/openapi/components/schemas/ServiceSupplier.yaml
@@ -0,0 +1,41 @@
+description: >-
+ Organisation that provides utility or energy services to customers. May be
+ a utility, retailer, load serving entity, or other type of supplier.
+type: object
+xml:
+ name: ServiceSupplier
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ organisation:
+ description: Supplier's contact information and organizational details.
+ $ref: './Organisation.yaml'
+ kind:
+ description: >-
+ Kind of supplier.
+ 0 = utility, 1 = retailer, 2 = LSE (Load Serving Entity),
+ 3 = MDMA (Meter Data Management Agent), 4 = MSP (Meter Service Provider),
+ 5 = other.
+ type: integer
+ format: int32
+ example: 0
+ xml:
+ name: kind
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ issuerIdentificationNumber:
+ description: ISO transaction reference number for the supplier.
+ type: string
+ maxLength: 256
+ xml:
+ name: issuerIdentificationNumber
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ effectiveDate:
+ description: Date when supplier service becomes effective (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: effectiveDate
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/Statement.yaml b/openapi/components/schemas/Statement.yaml
new file mode 100644
index 0000000..0db0c88
--- /dev/null
+++ b/openapi/components/schemas/Statement.yaml
@@ -0,0 +1,27 @@
+description: >-
+ Billing statement for services provided to a customer. Contains issue date
+ and references to statement documents.
+type: object
+xml:
+ name: Statement
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ issueDateTime:
+ description: Date and time the statement was issued (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: issueDateTime
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ statementRef:
+ description: References to statement document files and metadata.
+ type: array
+ xml:
+ name: statementRef
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ wrapped: false
+ items:
+ $ref: './StatementRef.yaml'
diff --git a/openapi/components/schemas/StatementRef.yaml b/openapi/components/schemas/StatementRef.yaml
new file mode 100644
index 0000000..1dbd444
--- /dev/null
+++ b/openapi/components/schemas/StatementRef.yaml
@@ -0,0 +1,36 @@
+description: >-
+ Reference to billing statement document with file metadata.
+type: object
+xml:
+ name: StatementRef
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ fileName:
+ description: Name of the statement file.
+ type: string
+ maxLength: 256
+ xml:
+ name: fileName
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ mediaType:
+ description: >-
+ IANA media type of the document.
+ Examples: application/pdf, application/json, application/vnd.ms-excel.
+ type: string
+ maxLength: 256
+ example: "application/pdf"
+ xml:
+ name: mediaType
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ statementURL:
+ description: URL to retrieve the statement document.
+ type: string
+ format: uri
+ maxLength: 512
+ xml:
+ name: statementURL
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/Status.yaml b/openapi/components/schemas/Status.yaml
new file mode 100644
index 0000000..2fe36c3
--- /dev/null
+++ b/openapi/components/schemas/Status.yaml
@@ -0,0 +1,40 @@
+description: >-
+ Current status information with timestamp and reason.
+type: object
+xml:
+ name: Status
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ value:
+ description: Status value or code.
+ type: string
+ maxLength: 256
+ xml:
+ name: value
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ dateTime:
+ description: Date and time of status (Unix timestamp).
+ type: integer
+ format: int64
+ xml:
+ name: dateTime
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ remark:
+ description: Remarks or notes about the status.
+ type: string
+ maxLength: 512
+ xml:
+ name: remark
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ reason:
+ description: Reason for the status.
+ type: string
+ maxLength: 512
+ xml:
+ name: reason
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/StreetAddress.yaml b/openapi/components/schemas/StreetAddress.yaml
new file mode 100644
index 0000000..468622d
--- /dev/null
+++ b/openapi/components/schemas/StreetAddress.yaml
@@ -0,0 +1,34 @@
+description: >-
+ Street and postal address information.
+type: object
+xml:
+ name: StreetAddress
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ streetDetail:
+ description: Detailed street address components.
+ $ref: './StreetDetail.yaml'
+ townDetail:
+ description: Town or city address components.
+ $ref: './TownDetail.yaml'
+ status:
+ description: Status of this address.
+ $ref: './Status.yaml'
+ postalCode:
+ description: Postal or ZIP code.
+ type: string
+ maxLength: 32
+ example: "94102"
+ xml:
+ name: postalCode
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ poBox:
+ description: Post office box number.
+ type: string
+ maxLength: 32
+ xml:
+ name: poBox
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/StreetDetail.yaml b/openapi/components/schemas/StreetDetail.yaml
new file mode 100644
index 0000000..27d7985
--- /dev/null
+++ b/openapi/components/schemas/StreetDetail.yaml
@@ -0,0 +1,107 @@
+description: >-
+ Detailed street address components including number, name, and type.
+type: object
+xml:
+ name: StreetDetail
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ number:
+ description: Street number.
+ type: string
+ maxLength: 64
+ example: "123"
+ xml:
+ name: number
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ name:
+ description: Street name.
+ type: string
+ maxLength: 256
+ example: "Main"
+ xml:
+ name: name
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ suffix:
+ description: Street suffix (e.g., N, S, E, W).
+ type: string
+ maxLength: 64
+ xml:
+ name: suffix
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ prefix:
+ description: Street prefix direction.
+ type: string
+ maxLength: 64
+ xml:
+ name: prefix
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ type:
+ description: Street type (e.g., St, Ave, Rd, Blvd).
+ type: string
+ maxLength: 64
+ example: "St"
+ xml:
+ name: type
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ code:
+ description: Street code or identifier.
+ type: string
+ maxLength: 64
+ xml:
+ name: code
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ buildingName:
+ description: Building or complex name.
+ type: string
+ maxLength: 256
+ xml:
+ name: buildingName
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ suiteNumber:
+ description: Suite, apartment, or unit number.
+ type: string
+ maxLength: 64
+ example: "Apt 4B"
+ xml:
+ name: suiteNumber
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ addressGeneral:
+ description: General address field 1.
+ type: string
+ maxLength: 256
+ xml:
+ name: addressGeneral
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ addressGeneral2:
+ description: General address field 2.
+ type: string
+ maxLength: 256
+ xml:
+ name: addressGeneral2
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ addressGeneral3:
+ description: General address field 3.
+ type: string
+ maxLength: 256
+ xml:
+ name: addressGeneral3
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ withinTownLimits:
+ description: Indicates if address is within town limits.
+ type: boolean
+ xml:
+ name: withinTownLimits
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/TelephoneNumber.yaml b/openapi/components/schemas/TelephoneNumber.yaml
new file mode 100644
index 0000000..efebb21
--- /dev/null
+++ b/openapi/components/schemas/TelephoneNumber.yaml
@@ -0,0 +1,75 @@
+description: >-
+ Telephone number with international dialing components.
+type: object
+xml:
+ name: TelephoneNumber
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ countryCode:
+ description: International country code (e.g., "1" for US/Canada).
+ type: string
+ maxLength: 32
+ example: "1"
+ xml:
+ name: countryCode
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ areaCode:
+ description: Area code or city code.
+ type: string
+ maxLength: 32
+ example: "415"
+ xml:
+ name: areaCode
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ cityCode:
+ description: City dialing code (for international numbers).
+ type: string
+ maxLength: 32
+ xml:
+ name: cityCode
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ localNumber:
+ description: Local phone number.
+ type: string
+ maxLength: 32
+ example: "555-1234"
+ xml:
+ name: localNumber
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ extension:
+ description: Phone extension.
+ type: string
+ maxLength: 32
+ xml:
+ name: extension
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ internationalNumberPrefix:
+ description: International dialing prefix.
+ type: string
+ maxLength: 32
+ xml:
+ name: internationalNumberPrefix
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ ituPhone:
+ description: ITU-T formatted phone number.
+ type: string
+ maxLength: 256
+ xml:
+ name: ituPhone
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ internationalLocalNumber:
+ description: Local number in international format.
+ type: string
+ maxLength: 256
+ xml:
+ name: internationalLocalNumber
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/components/schemas/TownDetail.yaml b/openapi/components/schemas/TownDetail.yaml
new file mode 100644
index 0000000..b655df5
--- /dev/null
+++ b/openapi/components/schemas/TownDetail.yaml
@@ -0,0 +1,51 @@
+description: >-
+ Town or city address components.
+type: object
+xml:
+ name: TownDetail
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+properties:
+ name:
+ description: Town or city name.
+ type: string
+ maxLength: 256
+ example: "San Francisco"
+ xml:
+ name: name
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ stateOrProvince:
+ description: State or province code.
+ type: string
+ maxLength: 64
+ example: "CA"
+ xml:
+ name: stateOrProvince
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ country:
+ description: Country code (ISO 3166).
+ type: string
+ maxLength: 64
+ example: "US"
+ xml:
+ name: country
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ code:
+ description: Town or city code.
+ type: string
+ maxLength: 64
+ xml:
+ name: code
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
+ section:
+ description: Town section or district.
+ type: string
+ maxLength: 256
+ xml:
+ name: section
+ namespace: http://naesb.org/espi/customer
+ prefix: customer
diff --git a/openapi/openapi.yaml b/openapi/openapi.yaml
index deed1cf..6e643f8 100644
--- a/openapi/openapi.yaml
+++ b/openapi/openapi.yaml
@@ -4,9 +4,10 @@ info:
version: 1.1.0
description: >
The Green Button Energy Services Provider Interface (ESPI) API provides
- RESTful access to energy usage data following the NAESB REQ.21 ESPI
- standard. This API enables Data Custodians and Third Party Applications
- to exchange energy usage information using Atom-formatted XML feeds.
+ RESTful access to energy usage data and retail customer information following
+ the NAESB REQ.21 ESPI standard. This API enables Data Custodians and Third
+ Party Applications to exchange both energy usage information and customer/billing
+ data using Atom-formatted XML feeds.
**Interactive API Explorer:** Try out the API using [Swagger UI](./swagger/)
@@ -15,7 +16,13 @@ info:
All resources are returned as Atom feeds (collections) or Atom entries
(individual resources) using the `application/atom+xml` content type.
The ESPI data elements are embedded within the Atom `` element
- using the `http://naesb.org/espi` XML namespace.
+ using either the `http://naesb.org/espi` XML namespace (energy data) or
+ the `http://naesb.org/espi/customer` XML namespace (customer/billing data).
+
+
+ **Note:** Customer resources contain Personally Identifiable Information (PII)
+ and use a separate namespace (`http://naesb.org/espi/customer`). They cannot be
+ retrieved in the same request as energy usage data.
# Authentication
@@ -110,6 +117,10 @@ tags:
description: >-
Operations for checking the current status of the Data Custodian
Resource Server.
+ - name: Customer Resources
+ description: >-
+ Operations for accessing customer and billing information resources
+ (PII-containing). Uses the http://naesb.org/espi/customer namespace.
x-tagGroups:
- name: OAuth Resources
tags:
@@ -132,6 +143,9 @@ x-tagGroups:
tags:
- LocalTimeParameters
- ServiceStatus
+ - name: Customer Data
+ tags:
+ - Customer Resources
servers:
- url: https://sandbox.greenbuttonalliance.org:8443/DataCustodian
description: Green Button Alliance Sandbox Server
@@ -222,6 +236,44 @@ paths:
'/espi/1_1/resource/ReadServiceStatus':
$ref: 'paths/ReadServiceStatus.yaml'
+ # Customer Resources - Data Custodian Access
+ '/espi/1_1/resource/Customer':
+ $ref: 'paths/Customer.yaml'
+ '/espi/1_1/resource/Customer/{customerId}':
+ $ref: 'paths/Customer_{customerId}.yaml'
+ '/espi/1_1/resource/CustomerAccount':
+ $ref: 'paths/CustomerAccount.yaml'
+ '/espi/1_1/resource/CustomerAccount/{customerAccountId}':
+ $ref: 'paths/CustomerAccount_{customerAccountId}.yaml'
+ '/espi/1_1/resource/CustomerAgreement':
+ $ref: 'paths/CustomerAgreement.yaml'
+ '/espi/1_1/resource/CustomerAgreement/{customerAgreementId}':
+ $ref: 'paths/CustomerAgreement_{customerAgreementId}.yaml'
+ '/espi/1_1/resource/ServiceLocation':
+ $ref: 'paths/ServiceLocation.yaml'
+ '/espi/1_1/resource/ServiceLocation/{serviceLocationId}':
+ $ref: 'paths/ServiceLocation_{serviceLocationId}.yaml'
+ '/espi/1_1/resource/EndDevice':
+ $ref: 'paths/EndDevice.yaml'
+ '/espi/1_1/resource/EndDevice/{endDeviceId}':
+ $ref: 'paths/EndDevice_{endDeviceId}.yaml'
+ '/espi/1_1/resource/Meter':
+ $ref: 'paths/Meter.yaml'
+ '/espi/1_1/resource/Meter/{meterId}':
+ $ref: 'paths/Meter_{meterId}.yaml'
+ '/espi/1_1/resource/ServiceSupplier':
+ $ref: 'paths/ServiceSupplier.yaml'
+ '/espi/1_1/resource/ServiceSupplier/{serviceSupplierId}':
+ $ref: 'paths/ServiceSupplier_{serviceSupplierId}.yaml'
+ '/espi/1_1/resource/Statement':
+ $ref: 'paths/Statement.yaml'
+ '/espi/1_1/resource/Statement/{statementId}':
+ $ref: 'paths/Statement_{statementId}.yaml'
+ '/espi/1_1/resource/ProgramDateIdMappings':
+ $ref: 'paths/ProgramDateIdMappings.yaml'
+ '/espi/1_1/resource/ProgramDateIdMappings/{programDateIdMappingsId}':
+ $ref: 'paths/ProgramDateIdMappings_{programDateIdMappingsId}.yaml'
+
components:
securitySchemes:
oauth2:
@@ -290,6 +342,24 @@ components:
$ref: 'components/schemas/SummaryMeasurement.yaml'
LineItem:
$ref: 'components/schemas/LineItem.yaml'
+ Customer:
+ $ref: 'components/schemas/Customer.yaml'
+ CustomerAccount:
+ $ref: 'components/schemas/CustomerAccount.yaml'
+ CustomerAgreement:
+ $ref: 'components/schemas/CustomerAgreement.yaml'
+ ServiceLocation:
+ $ref: 'components/schemas/ServiceLocation.yaml'
+ EndDevice:
+ $ref: 'components/schemas/EndDevice.yaml'
+ Meter:
+ $ref: 'components/schemas/Meter.yaml'
+ ServiceSupplier:
+ $ref: 'components/schemas/ServiceSupplier.yaml'
+ Statement:
+ $ref: 'components/schemas/Statement.yaml'
+ ProgramDateIdMappings:
+ $ref: 'components/schemas/ProgramDateIdMappings.yaml'
responses:
AtomFeed:
$ref: 'components/responses/AtomFeed.yaml'
@@ -331,3 +401,39 @@ components:
$ref: 'components/responses/AtomFeed_UsageSummary.yaml'
AtomEntry_UsageSummary:
$ref: 'components/responses/AtomEntry_UsageSummary.yaml'
+ AtomFeed_Customer:
+ $ref: 'components/responses/AtomFeed_Customer.yaml'
+ AtomEntry_Customer:
+ $ref: 'components/responses/AtomEntry_Customer.yaml'
+ AtomFeed_CustomerAccount:
+ $ref: 'components/responses/AtomFeed_CustomerAccount.yaml'
+ AtomEntry_CustomerAccount:
+ $ref: 'components/responses/AtomEntry_CustomerAccount.yaml'
+ AtomFeed_CustomerAgreement:
+ $ref: 'components/responses/AtomFeed_CustomerAgreement.yaml'
+ AtomEntry_CustomerAgreement:
+ $ref: 'components/responses/AtomEntry_CustomerAgreement.yaml'
+ AtomFeed_ServiceLocation:
+ $ref: 'components/responses/AtomFeed_ServiceLocation.yaml'
+ AtomEntry_ServiceLocation:
+ $ref: 'components/responses/AtomEntry_ServiceLocation.yaml'
+ AtomFeed_EndDevice:
+ $ref: 'components/responses/AtomFeed_EndDevice.yaml'
+ AtomEntry_EndDevice:
+ $ref: 'components/responses/AtomEntry_EndDevice.yaml'
+ AtomFeed_Meter:
+ $ref: 'components/responses/AtomFeed_Meter.yaml'
+ AtomEntry_Meter:
+ $ref: 'components/responses/AtomEntry_Meter.yaml'
+ AtomFeed_ServiceSupplier:
+ $ref: 'components/responses/AtomFeed_ServiceSupplier.yaml'
+ AtomEntry_ServiceSupplier:
+ $ref: 'components/responses/AtomEntry_ServiceSupplier.yaml'
+ AtomFeed_Statement:
+ $ref: 'components/responses/AtomFeed_Statement.yaml'
+ AtomEntry_Statement:
+ $ref: 'components/responses/AtomEntry_Statement.yaml'
+ AtomFeed_ProgramDateIdMappings:
+ $ref: 'components/responses/AtomFeed_ProgramDateIdMappings.yaml'
+ AtomEntry_ProgramDateIdMappings:
+ $ref: 'components/responses/AtomEntry_ProgramDateIdMappings.yaml'
diff --git a/openapi/paths/Customer.yaml b/openapi/paths/Customer.yaml
new file mode 100644
index 0000000..5632910
--- /dev/null
+++ b/openapi/paths/Customer.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve all Customers [FB_50]
+ description: >-
+ Returns an Atom feed containing all Customer resources within the Data
+ Custodian. Requires a valid data_custodian_access_token. Customers represent
+ organizations receiving services from a service supplier.
+ operationId: findCustomersDC
+ parameters:
+ - $ref: '../components/parameters/published-max.yaml'
+ - $ref: '../components/parameters/published-min.yaml'
+ - $ref: '../components/parameters/updated-max.yaml'
+ - $ref: '../components/parameters/updated-min.yaml'
+ - $ref: '../components/parameters/max-results.yaml'
+ - $ref: '../components/parameters/start-index.yaml'
+ - $ref: '../components/parameters/depth.yaml'
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomFeed_Customer.yaml'
+ '202':
+ description: Accepted - The request has been accepted for processing.
+ '400':
+ description: Bad Request - The request was malformed or contained invalid parameters.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
diff --git a/openapi/paths/CustomerAccount.yaml b/openapi/paths/CustomerAccount.yaml
new file mode 100644
index 0000000..123e63e
--- /dev/null
+++ b/openapi/paths/CustomerAccount.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve all Customer Accounts [FB_51]
+ description: >-
+ Returns an Atom feed containing all CustomerAccount resources within the Data
+ Custodian. Requires a valid data_custodian_access_token. Customer accounts
+ contain billing and payment information.
+ operationId: findCustomerAccountsDC
+ parameters:
+ - $ref: '../components/parameters/published-max.yaml'
+ - $ref: '../components/parameters/published-min.yaml'
+ - $ref: '../components/parameters/updated-max.yaml'
+ - $ref: '../components/parameters/updated-min.yaml'
+ - $ref: '../components/parameters/max-results.yaml'
+ - $ref: '../components/parameters/start-index.yaml'
+ - $ref: '../components/parameters/depth.yaml'
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomFeed_CustomerAccount.yaml'
+ '202':
+ description: Accepted - The request has been accepted for processing.
+ '400':
+ description: Bad Request - The request was malformed or contained invalid parameters.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
diff --git a/openapi/paths/CustomerAccount_{customerAccountId}.yaml b/openapi/paths/CustomerAccount_{customerAccountId}.yaml
new file mode 100644
index 0000000..40f2c9e
--- /dev/null
+++ b/openapi/paths/CustomerAccount_{customerAccountId}.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve a specific Customer Account [FB_51]
+ description: >-
+ Returns an Atom entry containing a single CustomerAccount resource identified by
+ customerAccountId. Requires a valid data_custodian_access_token.
+ operationId: findCustomerAccountByIdDC
+ parameters:
+ - name: customerAccountId
+ in: path
+ description: Unique identifier for the CustomerAccount resource
+ required: true
+ schema:
+ type: string
+ minLength: 6
+ example: "123456"
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomEntry_CustomerAccount.yaml'
+ '400':
+ description: Bad Request - Invalid customerAccountId format.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
+ '404':
+ description: Not Found - CustomerAccount with specified ID not found.
diff --git a/openapi/paths/CustomerAgreement.yaml b/openapi/paths/CustomerAgreement.yaml
new file mode 100644
index 0000000..b34ba39
--- /dev/null
+++ b/openapi/paths/CustomerAgreement.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve all Customer Agreements [FB_52]
+ description: >-
+ Returns an Atom feed containing all CustomerAgreement resources within the Data
+ Custodian. Requires a valid data_custodian_access_token. Customer agreements
+ define service terms at specific locations.
+ operationId: findCustomerAgreementsDC
+ parameters:
+ - $ref: '../components/parameters/published-max.yaml'
+ - $ref: '../components/parameters/published-min.yaml'
+ - $ref: '../components/parameters/updated-max.yaml'
+ - $ref: '../components/parameters/updated-min.yaml'
+ - $ref: '../components/parameters/max-results.yaml'
+ - $ref: '../components/parameters/start-index.yaml'
+ - $ref: '../components/parameters/depth.yaml'
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomFeed_CustomerAgreement.yaml'
+ '202':
+ description: Accepted - The request has been accepted for processing.
+ '400':
+ description: Bad Request - The request was malformed or contained invalid parameters.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
diff --git a/openapi/paths/CustomerAgreement_{customerAgreementId}.yaml b/openapi/paths/CustomerAgreement_{customerAgreementId}.yaml
new file mode 100644
index 0000000..ce962a0
--- /dev/null
+++ b/openapi/paths/CustomerAgreement_{customerAgreementId}.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve a specific Customer Agreement [FB_52]
+ description: >-
+ Returns an Atom entry containing a single CustomerAgreement resource identified by
+ customerAgreementId. Requires a valid data_custodian_access_token.
+ operationId: findCustomerAgreementByIdDC
+ parameters:
+ - name: customerAgreementId
+ in: path
+ description: Unique identifier for the CustomerAgreement resource
+ required: true
+ schema:
+ type: string
+ minLength: 6
+ example: "789012"
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomEntry_CustomerAgreement.yaml'
+ '400':
+ description: Bad Request - Invalid customerAgreementId format.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
+ '404':
+ description: Not Found - CustomerAgreement with specified ID not found.
diff --git a/openapi/paths/Customer_{customerId}.yaml b/openapi/paths/Customer_{customerId}.yaml
new file mode 100644
index 0000000..39132cc
--- /dev/null
+++ b/openapi/paths/Customer_{customerId}.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve a specific Customer [FB_50]
+ description: >-
+ Returns an Atom entry containing a single Customer resource identified by
+ customerId. Requires a valid data_custodian_access_token.
+ operationId: findCustomerByIdDC
+ parameters:
+ - name: customerId
+ in: path
+ description: Unique identifier for the Customer resource
+ required: true
+ schema:
+ type: string
+ minLength: 6
+ example: "407630"
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomEntry_Customer.yaml'
+ '400':
+ description: Bad Request - Invalid customerId format.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
+ '404':
+ description: Not Found - Customer with specified ID not found.
diff --git a/openapi/paths/EndDevice.yaml b/openapi/paths/EndDevice.yaml
new file mode 100644
index 0000000..b377f19
--- /dev/null
+++ b/openapi/paths/EndDevice.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve all End Devices [FB_54]
+ description: >-
+ Returns an Atom feed containing all EndDevice resources within the Data
+ Custodian. Requires a valid data_custodian_access_token. End devices are
+ assets that perform metering and load management functions.
+ operationId: findEndDevicesDC
+ parameters:
+ - $ref: '../components/parameters/published-max.yaml'
+ - $ref: '../components/parameters/published-min.yaml'
+ - $ref: '../components/parameters/updated-max.yaml'
+ - $ref: '../components/parameters/updated-min.yaml'
+ - $ref: '../components/parameters/max-results.yaml'
+ - $ref: '../components/parameters/start-index.yaml'
+ - $ref: '../components/parameters/depth.yaml'
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomFeed_EndDevice.yaml'
+ '202':
+ description: Accepted - The request has been accepted for processing.
+ '400':
+ description: Bad Request - The request was malformed or contained invalid parameters.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
diff --git a/openapi/paths/EndDevice_{endDeviceId}.yaml b/openapi/paths/EndDevice_{endDeviceId}.yaml
new file mode 100644
index 0000000..28f0697
--- /dev/null
+++ b/openapi/paths/EndDevice_{endDeviceId}.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve a specific End Device [FB_54]
+ description: >-
+ Returns an Atom entry containing a single EndDevice resource identified by
+ endDeviceId. Requires a valid data_custodian_access_token.
+ operationId: findEndDeviceByIdDC
+ parameters:
+ - name: endDeviceId
+ in: path
+ description: Unique identifier for the EndDevice resource
+ required: true
+ schema:
+ type: string
+ minLength: 6
+ example: "901234"
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomEntry_EndDevice.yaml'
+ '400':
+ description: Bad Request - Invalid endDeviceId format.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
+ '404':
+ description: Not Found - EndDevice with specified ID not found.
diff --git a/openapi/paths/Meter.yaml b/openapi/paths/Meter.yaml
new file mode 100644
index 0000000..1212147
--- /dev/null
+++ b/openapi/paths/Meter.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve all Meters [FB_55]
+ description: >-
+ Returns an Atom feed containing all Meter resources within the Data
+ Custodian. Requires a valid data_custodian_access_token. Meters are physical
+ assets that perform metering at usage points.
+ operationId: findMetersDC
+ parameters:
+ - $ref: '../components/parameters/published-max.yaml'
+ - $ref: '../components/parameters/published-min.yaml'
+ - $ref: '../components/parameters/updated-max.yaml'
+ - $ref: '../components/parameters/updated-min.yaml'
+ - $ref: '../components/parameters/max-results.yaml'
+ - $ref: '../components/parameters/start-index.yaml'
+ - $ref: '../components/parameters/depth.yaml'
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomFeed_Meter.yaml'
+ '202':
+ description: Accepted - The request has been accepted for processing.
+ '400':
+ description: Bad Request - The request was malformed or contained invalid parameters.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
diff --git a/openapi/paths/Meter_{meterId}.yaml b/openapi/paths/Meter_{meterId}.yaml
new file mode 100644
index 0000000..93176f3
--- /dev/null
+++ b/openapi/paths/Meter_{meterId}.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve a specific Meter [FB_55]
+ description: >-
+ Returns an Atom entry containing a single Meter resource identified by
+ meterId. Requires a valid data_custodian_access_token.
+ operationId: findMeterByIdDC
+ parameters:
+ - name: meterId
+ in: path
+ description: Unique identifier for the Meter resource
+ required: true
+ schema:
+ type: string
+ minLength: 6
+ example: "567890"
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomEntry_Meter.yaml'
+ '400':
+ description: Bad Request - Invalid meterId format.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
+ '404':
+ description: Not Found - Meter with specified ID not found.
diff --git a/openapi/paths/ProgramDateIdMappings.yaml b/openapi/paths/ProgramDateIdMappings.yaml
new file mode 100644
index 0000000..5afe89c
--- /dev/null
+++ b/openapi/paths/ProgramDateIdMappings.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve all Program Date ID Mappings [FB_58]
+ description: >-
+ Returns an Atom feed containing all ProgramDateIdMappings resources within the Data
+ Custodian. Requires a valid data_custodian_access_token. Program date mappings
+ contain customer energy efficiency program enrollments.
+ operationId: findProgramDateIdMappingsDC
+ parameters:
+ - $ref: '../components/parameters/published-max.yaml'
+ - $ref: '../components/parameters/published-min.yaml'
+ - $ref: '../components/parameters/updated-max.yaml'
+ - $ref: '../components/parameters/updated-min.yaml'
+ - $ref: '../components/parameters/max-results.yaml'
+ - $ref: '../components/parameters/start-index.yaml'
+ - $ref: '../components/parameters/depth.yaml'
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomFeed_ProgramDateIdMappings.yaml'
+ '202':
+ description: Accepted - The request has been accepted for processing.
+ '400':
+ description: Bad Request - The request was malformed or contained invalid parameters.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
diff --git a/openapi/paths/ProgramDateIdMappings_{programDateIdMappingsId}.yaml b/openapi/paths/ProgramDateIdMappings_{programDateIdMappingsId}.yaml
new file mode 100644
index 0000000..18c7cbe
--- /dev/null
+++ b/openapi/paths/ProgramDateIdMappings_{programDateIdMappingsId}.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve specific Program Date ID Mappings [FB_58]
+ description: >-
+ Returns an Atom entry containing a single ProgramDateIdMappings resource identified by
+ programDateIdMappingsId. Requires a valid data_custodian_access_token.
+ operationId: findProgramDateIdMappingsByIdDC
+ parameters:
+ - name: programDateIdMappingsId
+ in: path
+ description: Unique identifier for the ProgramDateIdMappings resource
+ required: true
+ schema:
+ type: string
+ minLength: 6
+ example: "555666"
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomEntry_ProgramDateIdMappings.yaml'
+ '400':
+ description: Bad Request - Invalid programDateIdMappingsId format.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
+ '404':
+ description: Not Found - ProgramDateIdMappings with specified ID not found.
diff --git a/openapi/paths/ServiceLocation.yaml b/openapi/paths/ServiceLocation.yaml
new file mode 100644
index 0000000..e37e147
--- /dev/null
+++ b/openapi/paths/ServiceLocation.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve all Service Locations [FB_53]
+ description: >-
+ Returns an Atom feed containing all ServiceLocation resources within the Data
+ Custodian. Requires a valid data_custodian_access_token. Service locations
+ represent physical premises where service is provided.
+ operationId: findServiceLocationsDC
+ parameters:
+ - $ref: '../components/parameters/published-max.yaml'
+ - $ref: '../components/parameters/published-min.yaml'
+ - $ref: '../components/parameters/updated-max.yaml'
+ - $ref: '../components/parameters/updated-min.yaml'
+ - $ref: '../components/parameters/max-results.yaml'
+ - $ref: '../components/parameters/start-index.yaml'
+ - $ref: '../components/parameters/depth.yaml'
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomFeed_ServiceLocation.yaml'
+ '202':
+ description: Accepted - The request has been accepted for processing.
+ '400':
+ description: Bad Request - The request was malformed or contained invalid parameters.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
diff --git a/openapi/paths/ServiceLocation_{serviceLocationId}.yaml b/openapi/paths/ServiceLocation_{serviceLocationId}.yaml
new file mode 100644
index 0000000..77edc24
--- /dev/null
+++ b/openapi/paths/ServiceLocation_{serviceLocationId}.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve a specific Service Location [FB_53]
+ description: >-
+ Returns an Atom entry containing a single ServiceLocation resource identified by
+ serviceLocationId. Requires a valid data_custodian_access_token.
+ operationId: findServiceLocationByIdDC
+ parameters:
+ - name: serviceLocationId
+ in: path
+ description: Unique identifier for the ServiceLocation resource
+ required: true
+ schema:
+ type: string
+ minLength: 6
+ example: "345678"
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomEntry_ServiceLocation.yaml'
+ '400':
+ description: Bad Request - Invalid serviceLocationId format.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
+ '404':
+ description: Not Found - ServiceLocation with specified ID not found.
diff --git a/openapi/paths/ServiceSupplier.yaml b/openapi/paths/ServiceSupplier.yaml
new file mode 100644
index 0000000..6d3f37b
--- /dev/null
+++ b/openapi/paths/ServiceSupplier.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve all Service Suppliers [FB_56]
+ description: >-
+ Returns an Atom feed containing all ServiceSupplier resources within the Data
+ Custodian. Requires a valid data_custodian_access_token. Service suppliers
+ are organizations providing utility services to customers.
+ operationId: findServiceSuppliersDC
+ parameters:
+ - $ref: '../components/parameters/published-max.yaml'
+ - $ref: '../components/parameters/published-min.yaml'
+ - $ref: '../components/parameters/updated-max.yaml'
+ - $ref: '../components/parameters/updated-min.yaml'
+ - $ref: '../components/parameters/max-results.yaml'
+ - $ref: '../components/parameters/start-index.yaml'
+ - $ref: '../components/parameters/depth.yaml'
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomFeed_ServiceSupplier.yaml'
+ '202':
+ description: Accepted - The request has been accepted for processing.
+ '400':
+ description: Bad Request - The request was malformed or contained invalid parameters.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
diff --git a/openapi/paths/ServiceSupplier_{serviceSupplierId}.yaml b/openapi/paths/ServiceSupplier_{serviceSupplierId}.yaml
new file mode 100644
index 0000000..cb98474
--- /dev/null
+++ b/openapi/paths/ServiceSupplier_{serviceSupplierId}.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve a specific Service Supplier [FB_56]
+ description: >-
+ Returns an Atom entry containing a single ServiceSupplier resource identified by
+ serviceSupplierId. Requires a valid data_custodian_access_token.
+ operationId: findServiceSupplierByIdDC
+ parameters:
+ - name: serviceSupplierId
+ in: path
+ description: Unique identifier for the ServiceSupplier resource
+ required: true
+ schema:
+ type: string
+ minLength: 6
+ example: "111222"
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomEntry_ServiceSupplier.yaml'
+ '400':
+ description: Bad Request - Invalid serviceSupplierId format.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
+ '404':
+ description: Not Found - ServiceSupplier with specified ID not found.
diff --git a/openapi/paths/Statement.yaml b/openapi/paths/Statement.yaml
new file mode 100644
index 0000000..e9fc080
--- /dev/null
+++ b/openapi/paths/Statement.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve all Statements [FB_57]
+ description: >-
+ Returns an Atom feed containing all Statement resources within the Data
+ Custodian. Requires a valid data_custodian_access_token. Statements are
+ billing statements for services provided to customers.
+ operationId: findStatementsDC
+ parameters:
+ - $ref: '../components/parameters/published-max.yaml'
+ - $ref: '../components/parameters/published-min.yaml'
+ - $ref: '../components/parameters/updated-max.yaml'
+ - $ref: '../components/parameters/updated-min.yaml'
+ - $ref: '../components/parameters/max-results.yaml'
+ - $ref: '../components/parameters/start-index.yaml'
+ - $ref: '../components/parameters/depth.yaml'
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomFeed_Statement.yaml'
+ '202':
+ description: Accepted - The request has been accepted for processing.
+ '400':
+ description: Bad Request - The request was malformed or contained invalid parameters.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
diff --git a/openapi/paths/Statement_{statementId}.yaml b/openapi/paths/Statement_{statementId}.yaml
new file mode 100644
index 0000000..269638e
--- /dev/null
+++ b/openapi/paths/Statement_{statementId}.yaml
@@ -0,0 +1,28 @@
+get:
+ tags:
+ - Customer Resources
+ summary: Retrieve a specific Statement [FB_57]
+ description: >-
+ Returns an Atom entry containing a single Statement resource identified by
+ statementId. Requires a valid data_custodian_access_token.
+ operationId: findStatementByIdDC
+ parameters:
+ - name: statementId
+ in: path
+ description: Unique identifier for the Statement resource
+ required: true
+ schema:
+ type: string
+ minLength: 6
+ example: "333444"
+ security:
+ - oauth2: []
+ responses:
+ '200':
+ $ref: '../components/responses/AtomEntry_Statement.yaml'
+ '400':
+ description: Bad Request - Invalid statementId format.
+ '403':
+ description: Forbidden - The access token does not have sufficient scope.
+ '404':
+ description: Not Found - Statement with specified ID not found.