Arcadia Spark API
The Spark API from Arcadia — 8 operation(s) for spark.
The Spark API from Arcadia — 8 operation(s) for spark.
openapi: 3.0.3
info:
title: Arcadia API Reference Auth Spark API
version: 0.3.0
contact:
email: platformsupport@arcadia.com
servers:
- url: https://api.arcadia.com
security:
- bearerAuth: []
tags:
- name: Spark
paths:
/spark/charge_curve/cost:
post:
tags:
- Spark
summary: Calculate Charge Cost
description: Provided a charge curve starting at a particular time of day, calculates the electricity cost of that charge curve for a particular `UtilityAccount` or [Genability tariff](https://developer.genability.com/api-reference/tariff-api/tariff/).
operationId: calculateChargeCost
parameters:
- $ref: '#/components/parameters/arcVersionInHeaderParam'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ChargeCostRequestBodyParams'
responses:
'200':
description: Success
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/ChargeCostResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/TariffResolutionError'
'404':
description: Not Found
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/UtilityAccountNotFoundError'
- $ref: '#/components/schemas/ChargeCurvesTariffParamError'
'422':
description: Unprocessable Entity
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/ChargeCostFeatureAvailabilityError'
- $ref: '#/components/schemas/SparkParamValidationError'
- $ref: '#/components/schemas/ChargeCurvesTariffParamError'
/spark/charge_curve/schedule:
post:
tags:
- Spark
summary: Calculate Smart Charging Schedule
description: Provided details around charging duration and a prospective charging window, returns a charging schedule that minimizes costs for a particular `UtilityAccount`.
operationId: calculateSmartChargeSchedule
parameters:
- $ref: '#/components/parameters/arcVersionInHeaderParam'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SmartChargeScheduleRequestBodyParams'
responses:
'200':
description: Success
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/SmartChargeScheduleResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/TariffResolutionError'
'404':
description: Not Found
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/UtilityAccountNotFoundError'
'422':
description: Unprocessable Entity
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/SmartChargeFeatureAvailabilityError'
- $ref: '#/components/schemas/SparkParamValidationError'
/spark/tariff_rates:
post:
tags:
- Spark
summary: Calculate Tariff Rate ($/kWh)
description: 'Calculates marginal rate ($/kWh) for a short-term time period on the electric tariff a given utility account is subscribed to. This endpoint will report appropriate costs for TOU periods (daily peak/off-peak hours, weekend schedules, seasonal changes).
This endpoint is not recommended for monthly bill reproduction. Marginal rates generally do not include monthly adjustments or charges such as tiering (costs are generally reported at the base tier), fixed charges, monthly discounts, special event days, etc.'
operationId: retrieveTariffRates
parameters:
- $ref: '#/components/parameters/arcVersionInHeaderParam'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TariffRatesRequestBodyParams'
responses:
'200':
description: Success
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/TariffRatesResponse'
/spark/optimized_tariffs/load_serving_entities:
get:
tags:
- Spark
summary: Tariff Optimize - Search for Load Serving Entities
description: Returns a list of Genability load serving entities (LSEs) for a given zip code, for use in tariff searches.
operationId: searchLoadServingEntities
parameters:
- $ref: '#/components/parameters/arcVersionInHeaderParam'
- in: query
name: zip_code
required: true
description: United States zip code.
example: '94105'
schema:
type: string
responses:
'200':
description: Success
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/SearchLoadServingEntitiesResponse'
/spark/optimized_tariffs/applicabilities:
get:
tags:
- Spark
summary: Tariff Optimize - Get Tariff Applicability Questions
description: 'Gets the list of applicability questions for all potential tariffs. Tariffs sometimes have eligibility conditions to sign up for them ("applicabilities"). For example, signing up for an EV tariff often requires an electric car registered to the account holder at the account''s address. Answers to the returned applicability questions can be passed to the recommendations endpoint to get the most relevant tariffs.
The set of potential tariffs can be specified either by an Arcadia Utility Account ID, or by considering all tariffs in a given zip code served by a specific [Genability Load Serving Entity (LSE)](https://developer.genability.com/api-reference/tariff-api/load-serving-entity/).
__Either utility_account_id or both the zip_code/lse_id must be specified.__
'
operationId: getOptimizedTariffsApplicabilities
parameters:
- $ref: '#/components/parameters/arcVersionInHeaderParam'
- in: query
name: utility_account_id
required: false
example: 12345
description: The unique ID of the Utility Account for this tariff search. Optional if searching for tariffs by Genability `lse_id`/`zip_code`.
schema:
type: integer
- in: query
name: zip_code
required: false
description: The zip code of the site inside the LSE's territory. Must be provided if searching for tariffs by Genability `lse_id`/`zip_code`.
example: '94706'
schema:
type: string
- in: query
name: lse_id
required: false
description: The ID of the Genability [load serving entity](https://developer.genability.com/api-reference/tariff-api/load-serving-entity/) prefixed with `gen_lse_`. Must be provided if searching for tariffs by Genability `lse_id`/`zip_code`.
example: gen_lse_734
schema:
type: string
responses:
'200':
description: Success
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/TariffApplicabilityQuestionsResponse'
'422':
description: Bad Request
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/OptimizedTariffRecommendationsLseIdentificationParamError'
/spark/optimized_tariffs/recommendations:
post:
tags:
- Spark
summary: Tariff Optimize - Search for Recommended Applicable Tariffs
description: 'Returns a list of applicable tariffs to use in a Tariff-Scenario Cost Calculation given the answers to the submitted Applicability Questions.
The set of recommended tariffs can be specified either by an Arcadia Utility Account ID, or by considering all tariffs in a given zip code served by a specific [Genability Load Serving Entity (LSE)](https://developer.genability.com/api-reference/tariff-api/load-serving-entity/).
__Either utility_account_id or both the zip_code/lse_id must be specified.__'
operationId: searchOptimizedTariffsByApplicabilities
parameters:
- $ref: '#/components/parameters/arcVersionInHeaderParam'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TariffApplicabilityAnswersRequestParams'
responses:
'200':
description: Success
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/OptimizedTariffRecommendationsResponse'
'422':
description: Bad Request
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/OptimizedTariffRecommendationsLseIdentificationParamError'
/spark/optimized_tariffs/scenario_cost:
post:
tags:
- Spark
summary: Tariff Optimize - Calculate Tariff-Scenario Cost
description: 'Calculates the “what-if” cost of a single tariff-scenario, or combination of tariff, load curve and qualifying criteria. A tariff-scenario can simulate additional devices with various operational schedules. For example, we can simulate the cost of adding an EV with basic charging, and we can compare that to another tariff-scenario where the cost on the same tariff is simulated with an EV using smart charging.
__Either utility_account_id or zip_code/main_tariff_id must be specified.__'
operationId: calculateOptimizedTariffsScenarioCost
parameters:
- $ref: '#/components/parameters/arcVersionInHeaderParam'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TariffScenarioCostRequestParams'
responses:
'200':
description: Success
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/TariffScenarioCostResponse'
'422':
description: Bad Request
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/TariffScenarioCostRequestTariffIdentificationParamError'
/spark/storage_optimization/schedules:
post:
description: Optimize energy flows into and out of a storage system to minimize cost, given a corresponding tariff, consumption profile, solar generation profile, and storage specifications. Supports a variety of installation configurations and dispatch strategies.
operationId: calculateStorageOptimizationSchedules
parameters:
- $ref: '#/components/parameters/arcVersionInHeaderParam'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/StorageOptimizationSchedulesRequestParams'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/StorageOptimizationSchedulesResponse'
description: Success
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
summary: Optimize Storage Dispatch Schedules (Beta)
tags:
- Spark
components:
schemas:
OptimizedTariffRecommendationsLseIdentificationParamError:
required:
- error
properties:
error:
type: object
required:
- description
- type
- details
properties:
description:
type: string
enum:
- Either utility_account_id or zip_code/lse_id must be specified
type:
type: string
enum:
- BAD_REQUEST
details:
type: 'null'
additionalProperties: false
UtilityAccountNotFoundError:
required:
- error
properties:
error:
type: string
enum:
- Couldn't find UtilityAccount
additionalProperties: false
SmartChargeScheduleResponse:
required:
- start_time
- charge_block_active
- charge_block_resolution
properties:
start_time:
type: string
format: date-time
example: '2021-03-18T22:00:00-07:00'
charge_block_resolution:
description: The duration of the charge blocks returned in the `charge_block_active` array.
type: string
enum:
- 5m
- 10m
- 15m
- 30m
- 1h
example: 1h
charge_block_active:
type: object
required:
- frequency
- data
properties:
frequency:
description: The duration of the charge blocks returned in the `charge_block_active` array.
type: string
enum:
- 5m
- 10m
- 15m
- 30m
- 1h
example: 1h
data:
type: array
description: Whether or not the vehicle should be actively charging during each charging bucket, starting at the `start_time`.
items:
$ref: '#/components/schemas/TimeSeriesItem'
additionalProperties: false
OptimizedTariffRecommendationsResponse:
required:
- country
- lse_id
- zip_code
- recommendations
properties:
country:
type: string
description: The country used for determining tariff applicability
example: US
lse_id:
type: string
description: The Genability 'lseId' unique identifier for this load serving entity. See [Genability documentation](https://developer.genability.com/api-reference/tariff-api/load-serving-entity/) for details.
example: gen_lse_734
zip_code:
type: string
description: The zip code used for determining tariff applicability
example: '94706'
recommendations:
type: array
description: List of tariffs that best fit the submitted applicability question answers. Used to define Tariff-Scenarios for the Calculate Tariff-Scenario Cost endpoint
items:
$ref: '#/components/schemas/Tariff'
additionalProperties: false
ChargeCostRequestBodyParams:
required:
- start_time
- energy_usage_kwh
properties:
utility_account_id:
description: (Beta - due to limited coverage) The unique ID of the utility account that this calculation is being run against. Either a `utility_account_id` or `main_tariff_id` is required for a valid request.
type: integer
main_tariff_id:
type: string
description: The Genability 'masterTariffId' unique identifier for this tariff. See [Genability documentation](https://developer.genability.com/api-reference/tariff-api/tariff/) for details. Either a `utility_account_id` or `main_tariff_id` is required for a valid request.
example: gen_mtid_3331108
start_time:
description: 'ISO8601 timestamp of when the charge begins. Note that the timestamp will be normalized down to the start of latest charge block resolution.
For example, if the `charge_block_resolution` is `1h` and the charging session starts at `2021-06-24T14:59:59Z`, the `start_time` used to calculate the curve''s cost will be normalized to `2021-06-24T14:00:00Z`. If the `charge_block_resolution` is `15m`, the `start_time` would be normalized to `2021-06-24T14:45:00Z`.
This normalization technique eliminates ambiguity around charging that occurs across time-of-use on/mid/off-peak window boundaries.
'
type: string
format: date-time
example: '2021-03-18T22:00:00-07:00'
charge_block_resolution:
description: The duration of the charge blocks provided in the `energy_usage_kwh` param.
type: string
enum:
- 5m
- 10m
- 15m
- 30m
- 1h
default: 1h
energy_usage_kwh:
description: The load curve being priced. An array of charge blocks with each block representing the kWh of power consumed or to be consumed in that block.
type: array
items:
type: number
example:
- 0
- 0
- 7.2
- 0
- 7.2
- 2.9
additionalProperties: false
LoadServingEntitySchema:
required:
- lse_id
- name
- code
- num_customers
properties:
lse_id:
type: string
description: Genability ID of the load serving entity, prefixed with `gen_lse_`.
example: gen_lse_734
name:
type: string
description: Name of the load serving entity.
example: Pacific Gas & Electric
code:
type: string
description: Alternate key identifying the load serving entity. For US companies, this is the EIA ID.
example: '14328'
num_customers:
type: integer
description: Total customer count for the load serving entity. Results will be sorted by this value in descending order (so the first result will be the most likely LSE).
example: 5069189
additionalProperties: false
StorageOptimizationSchedulesResponse:
type: object
properties:
from_date_time:
description: Start time corresponding to the beginning of the hour when the consumption and solar curves start. Echoed back from request parameters.
example: '2021-03-18T00:00:00-07:00'
type: string
format: date-time
grid_to_site_kwh_ac:
description: Amount of electricity flowing to site load from the grid (kWh AC).
example:
- 1.3
- 1.1
- 0
- 0
type: array
items:
type: number
minimum: 0
grid_to_battery_kwh_ac:
description: Amount of electricity flowing to the battery from the grid, before conversion with `battery_ac_to_dc_efficiency` (kWh AC).
example:
- 1.56
- 0
- 0
- 0
type: array
items:
type: number
minimum: 0
solar_to_battery_kwh_dc:
description: Amount of electricity flowing to the battery from PV solar generation, either without any conversion if `battery_dc_coupled` or after double-conversion with `solar_dc_to_ac_efficiency` * `battery_ac_to_dc_efficiency` if not (kWh DC).
example:
- 0
- 1.5
- 0
- 0
type: array
items:
type: number
minimum: 0
solar_to_site_kwh_ac:
description: Amount of electricity flowing to site load from PV solar generation, after conversion with `solar_dc_to_ac_efficiency` (kWh AC).
example:
- 0
- 0.1
- 1.3
- 1.5
type: array
items:
type: number
minimum: 0
solar_to_grid_kwh_ac:
description: Amount of electricity flowing to the grid from PV solar generation, after conversion with `solar_dc_to_ac_efficiency` (kWh AC).
example:
- 0
- 0
- 0.4
- 1.4
type: array
items:
type: number
minimum: 0
solar_curtailed_kwh_dc:
description: Amount of electricity from solar that goes unused (kWh DC).
example:
- 0
- 0
- 0
- 0
type: array
items:
type: number
minimum: 0
battery_to_site_kwh_ac:
description: Amount of electricity flowing to site load from the battery, after conversion with `battery_dc_to_ac_efficiency` (kWh AC).
example:
- 0
- 0
- 0.1
- 0.2
type: array
items:
type: number
minimum: 0
battery_to_grid_kwh_ac:
description: Amount of electricity flowing to the grid from battery, after conversion with `battery_dc_to_ac_efficiency` (kWh AC).
example:
- 0
- 0
- 0.1
- 0.2
type: array
items:
type: number
minimum: 0
net_load_kwh_ac:
description: Amount of electricity flowing from the grid if positive or to the grid if negative (kWh AC). Equals `grid_to_site_kwh_ac` + `grid_to_battery_kwh_ac` - `battery_to_grid_kwh_ac` - `solar_to_grid_kwh_ac`.
example:
- 1.86
- 1.1
- -0.5
- -1.6
type: array
items:
type: number
battery_soc:
description: Hourly battery state of charge (`0.0` - `1.0`, though in practice, all values will be between `battery_min_soc` and `battery_max_soc`). Multiply by `battery_nameplate_capacity` to get a timeseries of kWh DC stored.
example:
- 0.75
- 1
- 0.8
- 0.4
type: array
items:
type: number
minimum: 0
maximum: 1
required:
- from_date_time
- grid_to_site_kwh_ac
- grid_to_battery_kwh_ac
- solar_to_battery_kwh_dc
- solar_to_site_kwh_ac
- solar_to_grid_kwh_ac
- solar_curtailed_kwh_dc
- battery_to_site_kwh_ac
- battery_to_grid_kwh_ac
- battery_soc
additionalProperties: false
TimeSeriesItem:
required:
- timestamp
- value
properties:
timestamp:
description: ISO8601 timestamp indicating time of data collection
type: string
format: date-time
value:
description: Data value of resource
type: number
additionalProperties: false
TariffResolutionError:
required:
- error
properties:
error:
type: object
required:
- description
- type
- details
properties:
description:
type: string
enum:
- Tariff information is not yet available for this utility account
type:
type: string
enum:
- BAD_REQUEST
details:
type: object
nullable: true
additionalProperties: false
ChargeCostFeatureAvailabilityError:
required:
- error
properties:
error:
type: object
required:
- description
- type
- details
properties:
description:
type: string
enum:
- The charge_cost feature is not available for this UtilityAccount.
- The charge_cost feature is not ready yet. Please refer to UtilityAccount#FeatureAvailability for updates.
type:
type: string
enum:
- BAD_REQUEST
details:
type: object
nullable: true
additionalProperties: false
TariffRatesRequestBodyParams:
required:
- start_time
properties:
utility_account_id:
description: (Beta - due to limited coverage) The unique ID of the utility account that this calculation is being run against. Either a `utility_account_id` or `main_tariff_id` is required for a valid request.
type: integer
main_tariff_id:
type: string
description: The Genability 'masterTariffId' unique identifier for this tariff. See [Genability documentation](https://developer.genability.com/api-reference/tariff-api/tariff/) for details. Either a `utility_account_id` or `main_tariff_id` is required for a valid request.
example: gen_mtid_3331108
start_time:
description: 'ISO8601 timestamp indicating start time. Note that the timestamp will be rounded down to the start of latest time_block_resolution
'
type: string
format: date-time
example: '2021-03-18T22:00:00-07:00'
end_time:
description: 'ISO8601 timestamp indicating end of time period. Note that the timestamp will be rounded down to the start of latest time_block_resolution
'
type: string
format: date-time
example: '2021-03-19T08:00:00-07:00'
time_block_resolution:
description: Requested time resolution
type: string
enum:
- 5m
- 10m
- 15m
- 30m
- 1h
default: 1h
additionalProperties: false
EvChargePlan:
description: Specifies a time window where the EV is at home and available for charging.
required:
- start_day_of_week
- start_time
- end_day_of_week
- end_time
- expected_consumption_kwh
properties:
start_day_of_week:
type: integer
description: Day of the week the available charging block begins. ISO format -- 1 is Monday, 7 is Sunday.
example: 1
start_time:
type: string
description: Time when the EV is available to begin charging. For example, when the driver comes home in the evening.
example: '15:00:00'
end_day_of_week:
type: integer
description: Day of the week the available charging block ends. ISO format -- 1 is Monday, 7 is Sunday.
example: 2
end_time:
type: string
description: Time when the EV is no longer available for charging. For example, when the driver leaves for their morning commute.
example: 06:00:00
expected_consumption_kwh:
type: number
description: Expected kwh consumption until the next EvChargePlan residential charging event.
example: 15
additionalProperties: false
TimeOfUse:
title: TimeOfUse
type: object
properties:
season:
title: Season
description: Season to which this TOU schedule applies.
allOf:
- $ref: '#/components/schemas/TouSeason'
touPeriods:
title: Touperiods
description: Set of TOU periods defining the schedule.
type: array
items:
$ref: '#/components/schemas/TouPeriod'
required:
- touPeriods
TariffApplicabilityQuestionsResponse:
required:
- country
- lse_id
- zip_code
- applicability_questions
properties:
country:
type: string
description: The country used for determining tariff applicability
example: US
lse_id:
type: string
example: gen_lse_734
description: The Genability 'lseId' unique identifier for this load serving entity. See [Genability documentation](https://developer.genability.com/api-reference/tariff-api/load-serving-entity/) for details.
zip_code:
type: string
description: The zip code used for determining tariff applicability
example: '94706'
applicability_questions:
type: array
description: List of applicability questions that will determine optimization-eligible tariffs in this LSE.
items:
$ref: '#/components/schemas/TariffApplicabilityQuestionSchema'
example:
- id: EV
user_question: Do you have an electric vehicle (EV)?
user_question_details: null
answer_data_type: YES_NO
- id: SOLAR
user_question: Do you have a rooftop solar system installed?
user_question_details: null
answer_data_type: YES_NO
- id: ELECTRIC_HEAT
user_question: Is your primary home heating electric?
user_question_details: null
answer_data_type: YES_NO
- id: ELECTRIC_WATER
user_question: Is your primary hot water heater electric?
user_question_details: null
answer_data_type: YES_NO
- id: HEAT_PUMP
user_question: Do you have a heat pump for home heating and cooling?
user_question_details: null
answer_data_type: YES_NO
- id: SENIOR_CITIZEN
user_question: Is the electric account owner a senior citizen?
user_question_details: null
answer_data_type: YES_NO
- id: LOW_INCOME
user_question: Do you qualify for your utility's low income assistance program?
user_question_details: 'Contact your utility for specific qualifications, but common criteria include: Supplemental Security Income, Temporary Assistance to Needy Persons/Families, Safety Net Assistance, Food Stamps, or receiving a Home Energy Assistance Program grant in the preceding 12 months.'
answer_data_type: YES_NO
- id: MEDICAL
user_question: Do you have medical equipment or a condition that qualifies for electricity assistance?
user_question_details: Contact your utility for specific qualifications, but this commonly includes equipment like ventilators.
answer_data_type: YES_NO
- id: CA_CARE_CUSTOMER
user_question: Do you qualify for the California Alternate Rates for Energy (CARE) program?
user_question_details: CARE provides qualifying residential applicants with reduced energy charges.
answer_data_type: YES_NO
- id: CA_FERA
user_question: Do you qualify for the Family Electric Rate Assistance program (FERA)?
user_question_details: FERA is the rate reduction program in California for household with maximum annual income of between 200% and 250% of federal poverty guidelines and have three or more persons residing full time in their household. Additional eligibility criteria may apply.
answer_data_type: YES_NO
additionalProperties: false
FixedSchedule:
title: FixedSchedule
type: object
properties:
chargeTous:
title: Chargetous
description: TOU schedule for charging the storage system.
type: array
items:
$ref: '#/components/schemas/TimeOfUse'
dischargeTous:
title: Dischargetous
description: TOU schedule for discharging the storage system.
type: array
it
# --- truncated at 32 KB (69 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/arcadia/refs/heads/main/openapi/arcadia-spark-api-openapi.yml