Leap Revenue & Analytics API
Retrieve monthly and annual revenue settlement reports, revenue aggregated by meter, customer, load type, market group or utility, and monthly unresponsive-meter performance diagnostics.
Retrieve monthly and annual revenue settlement reports, revenue aggregated by meter, customer, load type, market group or utility, and monthly unresponsive-meter performance diagnostics.
openapi: 3.0.3
info:
description: Retrieves partner settlements
title: Revenue & Analytics
version: "1.1"
servers:
- description: Leap staging API
url: https://api.staging.leap.energy
- description: Leap production API
url: https://api.leap.energy
security:
- Bearer: []
tags:
- name: revenue
paths:
/v1.1/revenue/periodic/aggregation/customer/search:
post:
deprecated: false
description: Retrieves revenue data for a designated month or months aggregated
by customer
operationId: postCustomerSearchPeriodicAggregationSearch
parameters: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PeriodicSearchAggregationRequest"
description: The request body containing aggregation detail.
required: false
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/PeriodicCustomerAggregationResponse"
description: "Retrieves periodic customer revenue reports for a specified\
\ time frame, with a request limit of up to 3 months."
"400":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseBadRequest"
description: Returns 400 if the request is invalid.
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnauthorized"
description: Returns 401 if the request is unauthorized.
"403":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseForbidden"
description: Returns 403 if the request doesn't have the right values.
"415":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnsupportedMediaType"
description: Returns 415 if provided content in the request is not supported.
"500":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseInternalServerError"
description: Returns 500 if the there's an internal server error.
security:
- Bearer: []
summary: Revenue by customer
tags:
- revenue
/v1.1/revenue/periodic/aggregation/load-type/search:
post:
deprecated: false
description: Retrieves revenue data for a designated month or months aggregated
by load type
operationId: postLoadTypeSearchPeriodicAggregationSearch
parameters: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PeriodicSearchAggregationRequest"
description: The request body containing aggregation detail.
required: false
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/PeriodicLoadTypeAggregationResponse"
description: "Retrieves periodic load type revenue reports for a specified\
\ time frame, with a request limit of up to 3 months."
"400":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseBadRequest"
description: Returns 400 if the request is invalid.
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnauthorized"
description: Returns 401 if the request is unauthorized.
"403":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseForbidden"
description: Returns 403 if the request doesn't have the right values.
"415":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnsupportedMediaType"
description: Returns 415 if provided content in the request is not supported.
"500":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseInternalServerError"
description: Returns 500 if the there's an internal server error.
security:
- Bearer: []
summary: Revenue by load type
tags:
- revenue
/v1.1/revenue/periodic/aggregation/market-group/search:
post:
deprecated: false
description: Retrieves revenue data for a designated month or months aggregated
by market group
operationId: postMarketGroupSearchPeriodicAggregationSearch
parameters: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PeriodicSearchAggregationRequest"
description: The request body containing aggregation detail.
required: false
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/PeriodicMarketGroupAggregationResponse"
description: "Retrieves periodic market group revenue reports for a specified\
\ time frame, with a request limit of up to 3 months."
"400":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseBadRequest"
description: Returns 400 if the request is invalid.
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnauthorized"
description: Returns 401 if the request is unauthorized.
"403":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseForbidden"
description: Returns 403 if the request doesn't have the right values.
"415":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnsupportedMediaType"
description: Returns 415 if provided content in the request is not supported.
"500":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseInternalServerError"
description: Returns 500 if the there's an internal server error.
security:
- Bearer: []
summary: Revenue by market group
tags:
- revenue
/v1.1/revenue/periodic/aggregation/meter/search:
post:
deprecated: false
description: Retrieves revenue data for a designated month or months aggregated
by meter
operationId: postMeterSearchPeriodicAggregationSearch
parameters: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PeriodicSearchAggregationRequest"
description: The request body containing aggregation detail.
required: false
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/PeriodicMeterAggregationResponse"
description: "Retrieves periodic meter revenue reports for a specified time\
\ frame, with a request limit of up to 3 months."
"400":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseBadRequest"
description: Returns 400 if the request is invalid.
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnauthorized"
description: Returns 401 if the request is unauthorized.
"403":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseForbidden"
description: Returns 403 if the request doesn't have the right values.
"415":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnsupportedMediaType"
description: Returns 415 if provided content in the request is not supported.
"500":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseInternalServerError"
description: Returns 500 if the there's an internal server error.
security:
- Bearer: []
summary: Revenue by meter
tags:
- revenue
/v1.1/revenue/periodic/aggregation/utility/search:
post:
deprecated: false
description: Retrieves revenue data for a designated month or months aggregated
by utility
operationId: postUtilitySearchPeriodicAggregationSearch
parameters: []
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PeriodicSearchAggregationRequest"
description: The request body containing aggregation detail.
required: false
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/PeriodicUtilityAggregationResponse"
description: "Retrieves periodic utility revenue reports for a specified\
\ time frame, with a request limit of up to 3 months."
"400":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseBadRequest"
description: Returns 400 if the request is invalid.
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnauthorized"
description: Returns 401 if the request is unauthorized.
"403":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseForbidden"
description: Returns 403 if the request doesn't have the right values.
"415":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnsupportedMediaType"
description: Returns 415 if provided content in the request is not supported.
"500":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseInternalServerError"
description: Returns 500 if the there's an internal server error.
security:
- Bearer: []
summary: Revenue by utility
tags:
- revenue
/v1.1/revenue/periodic/reports:
get:
deprecated: false
description: |
Retrieves monthly revenue reports for a designated time frame. If a version is not specified, the response will include the latest version.
operationId: getPeriodicReports
parameters:
- allowEmptyValue: false
deprecated: false
description: The start of the period for the report in ISO-8601 formatted
year and month (`YYYY-MM`).
in: query
name: period_start
required: true
schema:
example: 2024-05
pattern: "^\\d{4}-\\d{2}$"
type: string
- allowEmptyValue: false
deprecated: false
description: "The end of the period for the report in ISO-8601 formatted year\
\ and month (`YYYY-MM`), which is inclusive."
in: query
name: period_end
required: true
schema:
example: 2024-05
pattern: "^\\d{4}-\\d{2}$"
type: string
- allowEmptyValue: false
deprecated: false
description: The report's version. If not specified the latest version is
returned.
in: query
name: version
required: false
schema:
example: V1
minLength: 2
pattern: V.+
type: string
- allowEmptyValue: false
deprecated: false
description: "The list of programs, separated by comma."
in: query
name: programs
required: false
schema:
example:
- CONED-DLRP
- PSEGLI-CSRP
items:
$ref: "#/components/schemas/program_identifier"
type: array
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/PeriodicReportResponse"
text/csv:
schema:
type: string
description: |
Fetches periodic revenue reports for a designated time frame. If a version is not specified, the response will include the latest version.
"400":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseBadRequest"
description: Returns 400 if the request is invalid.
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnauthorized"
description: Returns 401 if the request is unauthorized.
"403":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseForbidden"
description: Returns 403 if the request doesn't have the right values.
"415":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnsupportedMediaType"
description: Returns 415 if provided content in the request is not supported.
"500":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseInternalServerError"
description: Returns 500 if the there's an internal server error.
security:
- Bearer: []
summary: Get monthly revenue reports
tags:
- revenue
/v1.1/revenue/periodic/versions:
get:
deprecated: false
description: |
Retrieves versions of revenue reports for a specified period. The response includes all versions filtered by the provided report type and date range.
operationId: getPeriodicReportVersions
parameters:
- allowEmptyValue: false
deprecated: false
description: "The list of programs, separated by comma."
in: query
name: programs
required: false
schema:
example:
- CONED-DLRP
- PSEGLI-CSRP
items:
$ref: "#/components/schemas/program_identifier"
type: array
- allowEmptyValue: false
deprecated: false
description: The start of the period for the report in ISO-8601 formatted
year and month (`YYYY-MM`).
in: query
name: period_start
required: true
schema:
example: 2024-05
pattern: "^\\d{4}-\\d{2}$"
type: string
- allowEmptyValue: false
deprecated: false
description: "The end of the period for the report in ISO-8601 formatted year\
\ and month (`YYYY-MM`), which is inclusive."
in: query
name: period_end
required: true
schema:
example: 2024-05
pattern: "^\\d{4}-\\d{2}$"
type: string
responses:
"200":
content:
application/json:
schema:
items:
$ref: "#/components/schemas/PeriodicReportVersionResponse"
type: array
description: |
Versions of revenue reports for a specified period. The response includes the latest revenue report versions filtered by the provided report type and date range
"400":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseBadRequest"
description: Returns 400 if the request is invalid.
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnauthorized"
description: Returns 401 if the request is unauthorized.
"403":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseForbidden"
description: Returns 403 if the request doesn't have the right values.
"500":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseInternalServerError"
description: Returns 500 if the there's an internal server error.
security:
- Bearer: []
summary: Get revenue report versions
tags:
- revenue
/v1.1/revenue/yearly/{year}:
get:
deprecated: false
description: "Retrieves the revenue overview for a given year and transmission\
\ regions, if set."
operationId: getYearlyOverview
parameters:
- allowEmptyValue: false
deprecated: false
description: The year of the report
example: 2025
in: path
name: year
required: true
schema:
format: int32
type: integer
- allowEmptyValue: false
deprecated: true
description: The transmission region to filter the reports by.
in: query
name: transmission_region
required: false
schema:
$ref: "#/components/schemas/transmission_region"
- allowEmptyValue: false
deprecated: false
description: The transmission regions to filter the reports by.
in: query
name: transmission_regions
required: false
schema:
example:
- CAISO
- NYISO
items:
$ref: "#/components/schemas/transmission_region"
type: array
- allowEmptyValue: false
deprecated: false
description: "The list of programs, separated by comma."
in: query
name: programs
required: false
schema:
example:
- CONED-DLRP
- PSEGLI-CSRP
items:
$ref: "#/components/schemas/program_identifier"
type: array
- allowEmptyValue: false
deprecated: false
description: "The report status to filter the reports by. When left empty,\
\ reports with any status are returned."
in: query
name: report_statuses
required: false
schema:
example:
- PRELIMINARY
items:
$ref: "#/components/schemas/ReportStatusType"
type: array
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/YearlyOverview"
description: Yearly overview with metrics and a list of all reports for
the given year
"400":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseBadRequest"
description: Returns 400 if the request is invalid.
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnauthorized"
description: Returns 401 if the request is unauthorized.
"403":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseForbidden"
description: Returns 403 if the request doesn't have the right values.
"415":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnsupportedMediaType"
description: Returns 415 if provided content in the request is not supported.
"500":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseInternalServerError"
description: Returns 500 if the there's an internal server error.
security:
- Bearer: []
summary: Get annual revenue data
tags:
- revenue
/v1.1/performance/diagnosis/monthly/unresponsive/meters:
post:
deprecated: false
description: Retrieves unresponsive meters in a designated month
operationId: postMonthlyUnresponsiveMetersPerformance
parameters:
- description: Boolean flag indicating whether the response should include a
summary of the requested data in addition to the detailed results.
explode: true
in: query
name: include_summary
required: false
schema:
default: false
type: boolean
style: form
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/MonthlyUnresponsiveMetersRequest"
text/csv:
schema:
type: string
description: Monthly unresponsive meters request body
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/MonthlyUnresponsiveMetersResponse"
description: Retrieves monthly unresponsive meters for a specified month
"400":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseBadRequest"
description: Returns 400 if the request is invalid.
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnauthorized"
description: Returns 401 if the request is unauthorized.
"403":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseForbidden"
description: Returns 403 if the request doesn't have the right values.
"415":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnsupportedMediaType"
description: Returns 415 if provided content in the request is not supported.
"500":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseInternalServerError"
description: Returns 500 if the there's an internal server error.
security:
- Bearer: []
summary: Monthly unresponsive meters
tags:
- performance
components:
parameters:
period_start:
allowEmptyValue: false
deprecated: false
description: The start of the period for the report in ISO-8601 formatted year
and month (`YYYY-MM`).
in: query
name: period_start
required: true
schema:
example: 2024-05
pattern: "^\\d{4}-\\d{2}$"
type: string
period_end:
allowEmptyValue: false
deprecated: false
description: "The end of the period for the report in ISO-8601 formatted year\
\ and month (`YYYY-MM`), which is inclusive."
in: query
name: period_end
required: true
schema:
example: 2024-05
pattern: "^\\d{4}-\\d{2}$"
type: string
version:
allowEmptyValue: false
deprecated: false
description: The report's version. If not specified the latest version is returned.
in: query
name: version
required: false
schema:
example: V1
minLength: 2
pattern: V.+
type: string
programs:
allowEmptyValue: false
deprecated: false
description: "The list of programs, separated by comma."
in: query
name: programs
required: false
schema:
example:
- CONED-DLRP
- PSEGLI-CSRP
items:
$ref: "#/components/schemas/program_identifier"
type: array
year:
allowEmptyValue: false
deprecated: false
description: The year of the report
example: 2025
in: path
name: year
required: true
schema:
format: int32
type: integer
transmission_region:
allowEmptyValue: false
deprecated: true
description: The transmission region to filter the reports by.
in: query
name: transmission_region
required: false
schema:
$ref: "#/components/schemas/transmission_region"
transmission_regions:
allowEmptyValue: false
deprecated: false
description: The transmission regions to filter the reports by.
in: query
name: transmission_regions
required: false
schema:
example:
- CAISO
- NYISO
items:
$ref: "#/components/schemas/transmission_region"
type: array
report_statuses:
allowEmptyValue: false
deprecated: false
description: "The report status to filter the reports by. When left empty, reports\
\ with any status are returned."
in: query
name: report_statuses
required: false
schema:
example:
- PRELIMINARY
items:
$ref: "#/components/schemas/ReportStatusType"
type: array
responses:
"400":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseBadRequest"
description: Returns 400 if the request is invalid.
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnauthorized"
description: Returns 401 if the request is unauthorized.
"403":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseForbidden"
description: Returns 403 if the request doesn't have the right values.
"415":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseUnsupportedMediaType"
description: Returns 415 if provided content in the request is not supported.
"500":
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponseInternalServerError"
description: Returns 500 if the there's an internal server error.
schemas:
PeriodicSearchAggregationRequest:
additionalProperties: false
description: Search for aggregations in a specific period. Max allowed period
between start and end is 3 months.
example:
period_start: 2023-03
period_end: 2023-03
programs:
- DRAM
- CCA
- ENERGY-ONLY
filters:
- SCEC_1_PDRP
- PDRP
page_token: page_token
page_size: 100
sort:
- direction: DESC
field: nomination_w
- direction: ASC
field: meter_id
version: V1
properties:
period_start:
description: The start of the period for the report in ISO-8601 formatted
year and month (`YYYY-MM`).
example: 2023-03
pattern: "^\\d{4}-\\d{2}$"
type: string
period_end:
description: "The end of the period for the report in ISO 8601 format (`YYYY-MM`),\
\ which is inclusive."
example: 2023-03
pattern: "^\\d{4}-\\d{2}$"
type: string
programs:
description: "The list of the program identifiers that report is associated\
\ with. If not specified, defaults to all programs."
example:
- DRAM
- CCA
- ENERGY-ONLY
items:
$ref: "#/components/schemas/program_identifier"
type: array
filters:
description: "Optional filters to apply to the search query. Depending on\
\ the aggregation type, the filters are applied to the following field:\n\
\ - `METER`: meter ID, \n - `MARKET_GROUP`: market group ID, \n - `CUSTOMER`:\
\ customer name. \nNot supported for other aggregation types.\nThe search\
\ is case-insensitive and will match those results that start with the\
\ filter value. Passing multiple filters will\nbe applied as OR-condition.\
\ For example, passing `[\"SCEC\", \"PDRP\"]` will match all records that\
\ start with either `SCEC` or `PDRP`.\n"
example:
- SCEC_1_PDRP
- PDRP
items:
type: string
type: array
page_token:
description: |
If there are more records to fetch, this token will be populated as `next_page_token` in the response. Use it to fetch the next page. When requesting a CSV format via Accept header with value `text/csv`, this parameter is not required.
type: string
page_size:
default: 100
description: |
Specifies the number of results to return. Defaults to 100 if not set, with a maximum limit of 1000 per page. When requesting a CSV format via Accept header with value 'text/csv', this parameter is not required.
example: 100
format: int32
type: integer
sort:
description: |
Specifies the sorting criteria for the results. It is a list of fields by which the results should be sorted. This parameter is optional. Only supported for `meter`, `customer_group` and `market_group` types.
example:
- direction: DESC
field: nomination_w
- direction: ASC
field: meter_id
items:
$ref: "#/components/schemas/SortRequest"
type: array
version:
description: The report version. If not specified the latest version is
returned.
example: V1
minLength: 2
pattern: V.+
type: string
required:
- page_size
- period_end
- period_start
type: object
SortRequest:
additionalProperties: false
properties:
field:
description: The field used to perform the sort operation
example: nomination_w
type: string
direction:
$ref: "#/components/schemas/SortDirection"
required:
- direction
- field
type: object
PeriodicCustomerAggregationResponse:
additionalProperties: false
example:
customers:
- customer_name: John Doe
customer_group: Store Inc.
meter_count: 10
nomination_w: 16600.88
capacity_revenue: 27600.3
energy_revenue: 27600.3
delivery_date: ""
delivery_start_date: 2023-03
delivery_end_date: 2023-03
monetized_w: 8400.0
total_revenue: 20600.3
capacity_performance_percentage: 50.33
energy_performance_percentage: 60.5
data_coverage_percentage: 55.5
energy_earned_wh: 2000.3
potential_revenue: 104366.8
capacity_earned_w: 2000.3
payment_adjustment: 20.0
penalty: 11.0
performance_adjustment: 12.0
missed_revenue: 20000.3
version: V1
capacity_price: 5.56
energy_price_kwh: 6.67
- customer_name: John Doe
customer_group: Store Inc.
meter_count: 10
nomination_w: 16600.88
capacity_revenue: 27600.3
energy_revenue: 27600.3
delivery_date: ""
delivery_start_date: 2023-03
delivery_end_date: 2023-03
monetized_w: 8400.0
total_revenue: 20600.3
capacity_performance_percentage: 50.33
energy_performance_percentage: 60.5
data_coverage_percentage: 55.5
energy_earned_wh: 2000.3
potential_revenue: 104366.8
capacity_earned_w: 2000.3
payment_adjustment: 20.0
penalty: 11.0
performance_adjustment: 12.0
missed_revenue: 20000.3
version: V1
capacity_price: 5.56
energy_price_kwh: 6.67
page_token: page_token
properties:
# --- truncated at 32 KB (132 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/leap/refs/heads/main/openapi/leap-settlement-openapi-original.yml