Leap Create Meters API
Create or update meters on the Leap platform individually or in bulk via CSV or JSON batch jobs, and list provisional assets awaiting utility data.
Create or update meters on the Leap platform individually or in bulk via CSV or JSON batch jobs, and list provisional assets awaiting utility data.
openapi: 3.0.2
info:
description: Endpoints to create or update meters in bulk through Leap's API.
title: Create Meters
version: 1.1.0
servers:
- description: Leap staging API
url: https://api.staging.leap.energy
- description: Leap production API
url: https://api.leap.energy
security:
- Bearer: []
tags:
- name: create meters
- name: provisional assets
paths:
/v1.1/jobs/meters:
get:
description: List all meter upload jobs and their status.
operationId: listMeterBatchJobs
parameters:
- description: "One or more filters to apply. Uses the `AND` approach, so all\
\ filters should match for meter jobs to show up. Use the `/v1.1/jobs/meter-job-filters`\
\ endpoint to retrieve all available filters that can be applied when querying\
\ meter jobs. When you provide multiple values for a key (e.g. transmission_region),\
\ the IN operator is used. Combine multiple filters like this: `?filter=file_name:Test&filter=status:FAILED`"
explode: true
in: query
name: filter
required: false
schema:
example:
- file_name:Test
- status:FAILED
items:
type: string
type: array
style: form
- description: "If there are more meter jobs to fetch, this token will be populated\
\ as `next_page_token` in the response. Use it to fetch the next page of\
\ meter jobs."
explode: true
in: query
name: page_token
required: false
schema:
type: string
style: form
- description: Amount of results to return. Defaults to 100.
explode: true
in: query
name: page_size
required: false
schema:
default: 100
type: integer
style: form
- description: Search query to apply. Comma-separate multiple values. This is
a free-text search that will be applied when searching through the meter
jobs. Define the fields to search through in the `search_fields` parameter.
example: partner123
explode: true
in: query
name: search_query
required: false
schema:
type: string
style: form
- description: "Fields to search through. Required if `search_query` is provided.\
\ If the string from `search_query` is found in any of these fields, the\
\ meter jobs will be included in the results."
example:
- partner_reference
- file_name
explode: true
in: query
name: search_fields
required: false
schema:
items:
type: string
minItems: 0
type: array
style: form
responses:
"200":
content:
application/json:
example:
jobs:
- job_id: 5961a37f-6325-431c-97cb-82f35e3c09cf
status: COMPLETED
file_name: meters_upload.csv
assets_count: 10
assets_created_count: 8
assets_updated_count: 2
assets_failed_count: 0
transmission_regions:
- CAISO
created_at: 2024-03-21T09:43:51.186Z
updated_at: 2024-03-21T09:50:51.186Z
next_page_token: abc123
schema:
$ref: "#/components/schemas/PagedJobs"
description: List of jobs
summary: List meter jobs
tags:
- create meters
post:
deprecated: false
description: Create meters on the Leap platform individually or in bulk. Endpoint
accepts both CSV and JSON input. Returns job ID.
operationId: createMeterBatchJob
parameters:
- description: "If set to true, the API will update existing meters with the\
\ same partner reference. If set to false or parameter is omitted, the API\
\ will create new meters and return a duplicate error for existing meters\
\ with the same partner reference."
explode: true
in: query
name: update_existing
required: false
schema:
default: false
type: boolean
style: form
- description: "If set, the API will use this file_name when uploading the file\
\ to the API. If not set, the API will use the job_id and file_extension\
\ to create a file_name as fallback. The file_name must be a valid string\
\ up to 255 characters matching the file naming pattern."
explode: true
in: query
name: file_name
required: false
schema:
example: 5961a37f-6325-431c-97cb-82f35e3c09cf.csv
maxLength: 255
pattern: "^[a-zA-Z0-9._\\s-]+.[a-zA-Z0-9]+$"
type: string
style: form
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/CreateMeterBatchJobRequest"
description: Meter batch job request body
required: true
responses:
"201":
content:
application/json:
schema:
$ref: "#/components/schemas/CreateMeterBatchJobResponse"
text/csv:
schema:
type: string
description: "The job ID that got created, which you can use to poll the\
\ status of the job."
"400":
content:
application/json:
example:
title: Meter id is not a UUID
status: 400
details:
- message: Missing required parameter
json_index: 1
problem_field: partner_reference
- message: Invalid format
json_index: 3
problem_field: transmission_region
schema:
$ref: "#/components/schemas/ErrorResponse"
description: "Failed to create meter batch job, because the meter batch\
\ job request sent was invalid"
"403":
content:
application/json:
examples:
Forbidden:
value:
title: You do not have the necessary permissions for this operation
status: 403
details: {}
schema:
$ref: "#/components/schemas/ErrorResponse"
description: You do not have the necessary permissions for this operation.
"500":
content:
application/json:
examples:
Internal Error:
value: An error happened whilst processing your request
schema:
type: string
description: Internal server error
security:
- Bearer: []
summary: Create meters
tags:
- create meters
/v1.1/jobs/meter-job-filters:
get:
description: "[Leap frontend only] lists filters that can be used to filter\
\ meter jobs."
operationId: listMeterBatchJobsFilters
responses:
"200":
content:
application/json:
example:
filter_options:
- key: status
values:
- PROCESSING
- FAILED
- COMPLETED
- COMPLETED_WITH_ERRORS
- key: transmission_region
values:
- CAISO
- NYISO
- ISONE
schema:
$ref: "#/components/schemas/MeterJobFiltersResponse"
description: Meter upload filters
summary: List meter upload filters
tags:
- create meters
/v1.1/jobs/meters/{job_id}:
get:
description: Get meters job status and associated meter IDs for successfully
uploaded assets.
operationId: getMeterBatchJob
parameters:
- description: The job ID returned when running a create meters batch job.
example: f1080382-ec33-48ed-a511-528af08f747e
explode: false
in: path
name: job_id
required: true
schema:
format: uuid
type: string
style: simple
responses:
"200":
content:
application/json:
example:
assets:
- partner_reference: test-device-123
status: COMPLETED
status_detail:
name: METER_CREATED
description: A new meter was created.
created_at: 2024-03-21T09:43:51.186Z
meter_id: 87654321-4321-8888-6666-2c963f66afa3
job_id: 638451c8-4b81-4b91-ab43-c0ba0c5a0336
status: COMPLETED
created_at: 2024-03-21T09:43:51.186Z
updated_at: 2024-03-21T09:43:51.186Z
schema:
$ref: "#/components/schemas/JobAndAssets"
description: Job details
summary: Get meters job status
tags:
- create meters
/v1.1/meters:
post:
description: "Create a single meter on the Leap platform. Endpoint accepts\
\ only JSON input, and returns a synchronous response. For batch CSV uploads,\
\ use the asynchronous endpoint. The meter data needs to be accompanied by\
\ a token obtained from the onboarding service. This token is needed to associate\
\ the created meter with a partner. The token also contains any default values\
\ associated with this specific flow."
operationId: createSingleMeter
parameters:
- description: "If set to true, the API will update existing meters with the\
\ same partner reference. If set to false or parameter is omitted, the API\
\ will create new meters and return a duplicate error for existing meters\
\ with the same partner reference."
explode: true
in: query
name: update_existing
required: false
schema:
default: false
type: boolean
style: form
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/CreateAssetRequest"
description: Provisional asset request body
required: true
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/ProvisionalAsset"
description: "A provisional asset. Processing this asset successfully results\
\ in a meter being created or updated, whereas a failure does not create\
\ or update a meter."
"400":
content:
application/json:
schema:
$ref: "#/components/schemas/CreateMeterErrorResponse"
description: "Something went wrong, and the API could not create the provisional\
\ asset. The API will return a 200 if a provisional asset is created,\
\ but the meter creation fails. In that case, the response body will contain\
\ details on the failure."
summary: Create a single meter
tags:
- create meters
/v1.1/provisional-assets:
get:
description: Lists all provisional assets that were created through Meter Batch
Jobs. Especially handy if you create multiple smaller jobs and just want to
have an overview of all provisional assets that were created through those.
operationId: listProvisionalAssets
parameters:
- description: "One or more filters to apply. Uses the `AND` approach, so all\
\ filters should match for provisional assets to show up. Use the `/v1.1/provisional-assets-filters`\
\ endpoint to retrieve all available filters that can be applied when querying\
\ provisional assets. When you provide multiple values for a key (e.g. transmission_region),\
\ the IN operator is used. Combine multiple filters like this: `?filter=transmission_region:CAISO,NYISO&filter=partner_reference:123`"
example:
- "transmission_region:CAISO,NYISO"
- partner_reference:123
explode: true
in: query
name: filter
required: false
schema:
items:
type: string
type: array
style: form
- description: "If there are more provisional assets to fetch, this token will\
\ be populated as `next_page_token` in the response. Use it to fetch the\
\ next page of provisional assets."
explode: true
in: query
name: page_token
required: false
schema:
type: string
style: form
- description: Amount of results to return. Defaults to 100.
explode: true
in: query
name: page_size
required: false
schema:
default: 100
type: integer
style: form
- description: Search query to apply. Comma-separate multiple values. This is
a free-text search that will be applied when searching through the provisional
assets. Define the fields to search through in the `search_fields` parameter.
example: serial-001
explode: true
in: query
name: search_query
required: false
schema:
type: string
style: form
- description: "Fields to search through. Required if `search_query` is provided.\
\ If the string from `search_query` is found in any of these fields, the\
\ provisional asset will be included in the results."
example:
- partner_reference
- device_serial_number
explode: true
in: query
name: search_fields
required: false
schema:
items:
type: string
minItems: 0
type: array
style: form
responses:
"200":
content:
application/json:
example:
provisional_assets:
- job_id: 514dc8d0-7dff-4bd3-9737-f1f49a6e99ed
partner_reference: my-caiso-device-serial-2
status: DUPLICATE
status_detail:
name: DUPLICATE_REF_ID
description: Partner reference ID already exists.
created_at: 2024-03-12T10:15:00Z
- job_id: e21fb44f-ecd9-49e4-bade-067f5abf7ded
partner_reference: my-caiso-device-serial-1
status: PROCESSING
status_detail: {}
created_at: 2024-03-12T09:00:00Z
next_page_token: token123
schema:
$ref: "#/components/schemas/ListProvisionalAssetsResponse"
text/csv:
example: |-
job_id,partner_reference,status,status_detail.description,data.partner_reference,data.transmission_region,data.customer_classification,data.load_types.0,data.load_types.1,data.meter_type,data.customer.street_1,data.customer.postal_code,data.customer.city,data.customer.state_or_province_code,data.customer.country_code,data.customer.street_2,data.customer.end_customer_name,data.customer.end_customer_title,data.customer.end_customer_email,data.customer.end_customer_phone_number,data.customer.end_customer_company_name,data.customer.partner_offering_name,data.customer.partner_offering_date,data.customer.dispatch_option,data.customer.billing.street_1,data.customer.billing.postal_code,data.customer.billing.city,data.customer.billing.state_or_province_code,data.customer.billing.country_code,data.customer.billing.street_2,data.device.device_serial_number,data.device.device_model,data.device.device_manufacturer,data.device.install_date,data.device.permission_to_operate_date,data.site.load_zone,data.site.generator_manufacturer,data.site.generator_fuel_type,data.site.generator_serial_number,data.nyiso.existing_nyiso_resource_id,data.utility.utility_name,data.utility.load_serving_entity,data.utility.electric_service_account_number,data.utility.tariff,data.utility.voltage,data.utility.utility_meter_serial_number,created_at,status_detail.failed_fields.0.key,status_detail.failed_fields.0.value
"514dc8d0-7dff-4bd3-9737-f1f49a6e99ed",my-caiso-device-serial-2,DUPLICATE,Partner reference ID found on meter ID 72c06683-ca85-43b7-9a6a-dc72d2bf6244. A unique reference ID is required.,my-caiso-device-serial-2,ISONE,COMMERCIAL,BATTERY_STORAGE,MANUFACTURING,DEVICE,ST Main Av 2,90002,Los Angeles,CA,US,Main ST Av 2,Audrey,Mrs.,audrey@dummyemail.com,(206) 342-8631,Audrey John Ltd.,partnerOfferingName,2024-03-12,TARGETED,billing street 1,54321,Atlanta,GA,US,billing street 2,serial-1,model-1,manufacturer-1,2024-03-12,2024-03-12,Load Zone,Gen Manufacturer,DUAL_FUEL,generator serial number,existing resource id,SCE,loadServingEntity,electricServiceAgreementNumber,tariff,voltage,utility-meter-serial-number,2023-02-13T14:29:51Z,,
"e21fb44f-ecd9-49e4-bade-067f5abf7ded",my-caiso-device-serial-1,PROCESSING,,my-caiso-device-serial-1,ISONE,COMMERCIAL,BATTERY_STORAGE,MANUFACTURING,DEVICE,ST Main Av 1,90001,Los Angeles,CA,US,Main ST Av 1,Audrey,Mrs.,audrey@dummyemail.com,(206) 342-8631,Audrey John Ltd.,partnerOfferingName,2024-03-12,TARGETED,billing street 1,54321,Atlanta,GA,US,billing street 2,serial-1,model-1,manufacturer-1,2024-03-12,2024-03-12,Load Zone,Gen Manufacturer,DUAL_FUEL,generator serial number,existing resource id,SCE,loadServingEntity,electricServiceAgreementNumber,tariff,voltage,utility-meter-serial-number,2023-02-13T14:29:51Z,,
"e21fb44f-ecd9-49e4-bade-067f5abf7ded",my-caiso-device-serial-2,FAILED,,my-caiso-device-serial-2,ISONE,COMMERCIAL,BATTERY_STORAGE,MANUFACTURING,DEVICE,ST Main Av 2,90002,Los Angeles,CA,US,Main ST Av 2,Audrey,Mrs.,audrey@dummyemail.com,(206) 342-8631,Audrey John Ltd.,partnerOfferingName,2024-03-12,TARGETED,billing street 1,54321,Atlanta,GA,US,billing street 2,serial-1,model-1,manufacturer-1,2024-03-12,2024-03-12,Load Zone,Gen Manufacturer,DUAL_FUEL,generator serial number,existing resource id,SCE,loadServingEntity,electricServiceAgreementNumber,tariff,voltage,utility-meter-serial-number,2023-02-06T10:15:00Z,field,message
schema:
type: string
description: Provisional assets
"400":
content:
application/json:
schema:
$ref: "#/components/schemas/ValidationError"
description: Validation error if invalid filters are provided
summary: List provisional assets
tags:
- provisional assets
/v1.1/provisional-assets-filters:
get:
description: "[Leap frontend only] lists filters that can be used to filter\
\ provisional assets."
operationId: listProvisionalAssetsFilters
responses:
"200":
content:
application/json:
example:
filter_options:
- key: status
values:
- PROCESSING
- FAILED
- DUPLICATE
- COMPLETED
- MULTIPLE_PARTNER_REFERENCE
- key: transmission_region
values:
- CAISO
- NYISO
- ISONE
schema:
$ref: "#/components/schemas/ListProvisionalAssetsFiltersResponse"
description: Provisional assets filters
summary: List provisional assets filters
tags:
- provisional assets
components:
responses:
"403":
content:
application/json:
examples:
Forbidden:
value:
title: You do not have the necessary permissions for this operation
status: 403
details: {}
schema:
$ref: "#/components/schemas/ErrorResponse"
description: You do not have the necessary permissions for this operation.
"500":
content:
application/json:
examples:
Internal Error:
value: An error happened whilst processing your request
schema:
type: string
description: Internal server error
schemas:
PagedJobs:
example:
jobs:
- job_id: 5961a37f-6325-431c-97cb-82f35e3c09cf
status: PROCESSING
file_name: file_name
assets_count: 0
assets_created_count: 6
assets_updated_count: 1
assets_failed_count: 5
transmission_regions:
- CAISO
- CAISO
created_at: 2024-03-21T09:43:51.186Z
updated_at: 2024-03-22T09:43:51.186Z
- job_id: 5961a37f-6325-431c-97cb-82f35e3c09cf
status: PROCESSING
file_name: file_name
assets_count: 0
assets_created_count: 6
assets_updated_count: 1
assets_failed_count: 5
transmission_regions:
- CAISO
- CAISO
created_at: 2024-03-21T09:43:51.186Z
updated_at: 2024-03-22T09:43:51.186Z
next_page_token: next_page_token
properties:
jobs:
items:
$ref: "#/components/schemas/Job"
type: array
next_page_token:
description: "If there are more provisional assets to fetch, this token\
\ will be populated. Use it to fetch the next page of provisional assets."
type: string
required:
- jobs
type: object
Job:
example:
job_id: 5961a37f-6325-431c-97cb-82f35e3c09cf
status: PROCESSING
file_name: file_name
assets_count: 0
assets_created_count: 6
assets_updated_count: 1
assets_failed_count: 5
transmission_regions:
- CAISO
- CAISO
created_at: 2024-03-21T09:43:51.186Z
updated_at: 2024-03-22T09:43:51.186Z
properties:
job_id:
description: The id of the create meters job
example: 5961a37f-6325-431c-97cb-82f35e3c09cf
format: uuid
type: string
status:
$ref: "#/components/schemas/JobStatus"
file_name:
description: "The original name of the file uploaded to the Job. If the\
\ file was uploaded before this field was introduced, this value will\
\ be null as the original file name was not available at that time."
type: string
assets_count:
description: "The number of assets that were created, updated, or failed\
\ as a result of the API call."
type: integer
assets_created_count:
description: The number of assets that were created as a result of the API
call.
type: integer
assets_updated_count:
description: The number of assets that were updated as a result of the API
call.
type: integer
assets_failed_count:
description: The number of assets that failed as a result of the API call.
type: integer
transmission_regions:
items:
$ref: "#/components/schemas/transmission_region"
type: array
created_at:
example: 2024-03-21T09:43:51.186Z
format: date-time
type: string
updated_at:
example: 2024-03-22T09:43:51.186Z
format: date-time
type: string
required:
- created_at
- job_id
- status
- updated_at
type: object
CreateMeterBatchJobRequest:
example:
assets:
- partner_reference: unique-reference-id-12345
transmission_region: CAISO
customer_classification: RESIDENTIAL
load_types:
- HVAC
meter_type: UTILITY_METER
customer:
street_1: 132 My Street
street_2: Apartment 32
postal_code: "10001"
city: New York
state_or_province_code: NY
country_code: US
end_customer_name: Customer Name
end_customer_title: Mrs.
end_customer_email: email@address.com
end_customer_phone_number: (123) 123-4567
end_customer_company_name: Company Name Inc.
partner_offering_name: Offering Name
partner_offering_date: 2000-01-23
is_in_wholesale_capacity_market: true
dispatch_option: DAILY
billing:
street_1: 132 My Billing Street
street_2: Apartment 32
postal_code: "90210"
city: Los Angeles
state_or_province_code: CA
country_code: US
partner_customer_reference: partner-customer-reference-1
device:
device_type: BATTERY
device_serial_number: device-serial-number
device_model: device-model
device_manufacturer: device-manufacturer
install_date: 2000-01-23
battery_power_capacity_kw: 1.233
battery_energy_capacity_kwh: 9.876
battery_duration_hours: 4
permission_to_operate_date: 2000-01-23
site:
load_zone: load-zone
number_of_devices: 1
on_site_fossil_generator: true
renewable_generator: true
generator_capacity_kw: 1.234
generator_model_year: 2020
generator_manufacturer: Manufacturer of the generator
generator_fuel_type: ""
generator_serial_number: generator-serial-number
site_devices:
- device_type: BATTERY
model: device-model
manufacturer: device-manufacturer
serial_number: device-serial-number
energy_capacity_kwh: 39.504
power_capacity_kw: 9.876
energy_capacity_duration_hours: 4
voltage_level: EVSE_LEVEL_1
model_year: 2020
fuel_type: DIESEL
max_energy_production_rate_kw: 7.5
max_energy_consumption_rate_kw: 7.5
battery_max_state_of_charge_percentage: 95
battery_min_state_of_charge_percentage: 10
installer: Acme Installations Inc.
pv_connected: true
- device_type: BATTERY
model: device-model
manufacturer: device-manufacturer
serial_number: device-serial-number
energy_capacity_kwh: 39.504
power_capacity_kw: 9.876
energy_capacity_duration_hours: 4
voltage_level: EVSE_LEVEL_1
model_year: 2020
fuel_type: DIESEL
max_energy_production_rate_kw: 7.5
max_energy_consumption_rate_kw: 7.5
battery_max_state_of_charge_percentage: 95
battery_min_state_of_charge_percentage: 10
installer: Acme Installations Inc.
pv_connected: true
caiso:
is_receiving_sgip_funding: true
nem_type: NEM2
isone:
in_connected_solutions: true
nyiso:
cbl_method: AVERAGE_DAY
company_type: INDIVIDUAL_OR_SOLE_PROPRIETOR
existing_nyiso_resource_id: "666266"
partner_nyiso_resource_name: "666266"
utility:
utility_name: PGE
load_serving_entity: PGE
electric_service_account_number: 12243243-121
tariff: tariff code
voltage: '>= 600 V'
utility_meter_serial_number: utility-meter-serial-number
customer_group: customer_group
- partner_reference: unique-reference-id-12345
transmission_region: CAISO
customer_classification: RESIDENTIAL
load_types:
- HVAC
meter_type: UTILITY_METER
customer:
street_1: 132 My Street
street_2: Apartment 32
postal_code: "10001"
city: New York
state_or_province_code: NY
country_code: US
end_customer_name: Customer Name
end_customer_title: Mrs.
end_customer_email: email@address.com
end_customer_phone_number: (123) 123-4567
end_customer_company_name: Company Name Inc.
partner_offering_name: Offering Name
partner_offering_date: 2000-01-23
is_in_wholesale_capacity_market: true
dispatch_option: DAILY
billing:
street_1: 132 My Billing Street
street_2: Apartment 32
postal_code: "90210"
city: Los Angeles
state_or_province_code: CA
country_code: US
partner_customer_reference: partner-customer-reference-1
device:
device_type: BATTERY
device_serial_number: device-serial-number
device_model: device-model
device_manufacturer: device-manufacturer
install_date: 2000-01-23
battery_power_capacity_kw: 1.233
battery_energy_capacity_kwh: 9.876
battery_duration_hours: 4
permission_to_operate_date: 2000-01-23
site:
load_zone: load-zone
number_of_devices: 1
on_site_fossil_generator: true
renewable_generator: true
generator_capacity_kw: 1.234
generator_model_year: 2020
generator_manufacturer: Manufacturer of the generator
generator_fuel_type: ""
generator_serial_number: generator-serial-number
site_devices:
- device_type: BATTERY
model: device-model
manufacturer: device-manufacturer
serial_number: device-serial-number
energy_capacity_kwh: 39.504
power_capacity_kw: 9.876
energy_capacity_duration_hours: 4
voltage_level: EVSE_LEVEL_1
model_year: 2020
fuel_type: DIESEL
max_energy_production_rate_kw: 7.5
max_energy_consumption_rate_kw: 7.5
battery_max_state_of_charge_percentage: 95
battery_min_state_of_charge_percentage: 10
installer: Acme Installations Inc.
pv_connected: true
- device_type: BATTERY
model: device-model
manufacturer: device-manufacturer
serial_number: device-serial-number
energy_capacity_kwh: 39.504
power_capacity_kw: 9.876
energy_capacity_duration_hours: 4
voltage_level: EVSE_LEVEL_1
model_year: 2020
fuel_type: DIESEL
max_energy_production_rate_kw: 7.5
max_energy_consumption_rate_kw: 7.5
battery_max_state_of_charge_percentage: 95
battery_min_state_of_charge_percentage: 10
installer: Acme Installations Inc.
pv_connected: true
caiso:
is_receiving_sgip_funding: true
nem_type: NEM2
isone:
in_connected_solutions: true
nyiso:
cbl_method: AVERAGE_DAY
company_type: INDIVIDUAL_OR_SOLE_PROPRIETOR
existing_nyiso_resource_id: "666266"
partner_nyiso_resource_name: "666266"
utility:
utility_name: PGE
load_serving_entity: PGE
electric_service_account_number: 12243243-121
tariff: tariff code
voltage: '>= 600 V'
utility_meter_serial_number: utility-meter-serial-number
customer_group: customer_group
properties:
assets:
items:
$ref: "#/components/schemas/CreateMeter"
type: array
required:
- assets
type: object
CreateMeter:
allOf:
- $ref: "#/components/schemas/AssetIdentifiers"
- $ref: "#/components/schemas/CommonMeter"
- $ref: "#/components/schemas/CreateMeterUtility"
- $ref: "#/components/schemas/CreateMeterCustomerGroup"
example:
partner_reference: unique-reference-id-12345
transmission_region: CAISO
customer_classification: RESIDENTIAL
load_types:
- HVAC
meter_type
# --- truncated at 32 KB (92 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/leap/refs/heads/main/openapi/leap-create-meters-openapi-original.yml