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.

OpenAPI Specification

leap-create-meters-openapi-original.yml Raw ↑
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