Arcadia Plug API
The Plug API from Arcadia — 5 operation(s) for plug.
The Plug API from Arcadia — 5 operation(s) for plug.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/arcadia-plug-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Arcadia API Reference Plug API
version: 0.3.0
contact:
email: platformsupport@arcadia.com
servers:
- url: https://api.arcadia.com
security:
- bearerAuth: []
tags:
- name: Plug
paths:
/plug/utility_statements:
get:
tags:
- Plug
summary: List Utility Statements
description: Returns a paginated list of UtilityStatements for all users, or filtered by `utility_account_id`. Default ordered by descending `updated_at`.
operationId: getUtilityStatements
parameters:
- $ref: '#/components/parameters/deprecatedClientUserIdQueryParam'
- $ref: '#/components/parameters/utilityAccountIdQueryParam'
- $ref: '#/components/parameters/paginationLimitParam'
- $ref: '#/components/parameters/paginationUpdatedAfterParam'
- $ref: '#/components/parameters/paginationUpdatedBeforeParam'
- $ref: '#/components/parameters/paginationOrderParam'
- $ref: '#/components/parameters/arcVersionInHeaderParam'
responses:
'200':
description: Success
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedUtilityStatements'
'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:
$ref: '#/components/schemas/UtilityStatementsFeatureAvailabilityError'
/plug/utility_statements/{utility_statement_id}:
get:
tags:
- Plug
summary: Get Utility Statement
description: Returns a single UtilityStatement specified by ID.
operationId: getUtilityStatement
parameters:
- $ref: '#/components/parameters/utilityStatementIdInPathParam'
- $ref: '#/components/parameters/arcVersionInHeaderParam'
responses:
'200':
description: Success
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/UtilityStatement'
/plug/utility_statements/{utility_statement_id}/intervals:
get:
tags:
- Plug
summary: List Utility Intervals For A Utility Statement (Beta)
description: '**This endpoint is in _beta_. Click [here](release-phases) for a description on Arcadia''s release phases.**
Returns the Utility Intervals for the time span of the given Utility Statement. If the Utility Statement contains charges for multiple Utility Meters, this endpoint will aggregate each Utility Meter''s Utility Intervals together to create one set of Utility Intervals.
Note that the Utility Intervals feature is limited to a subset of utilities at this time:
- SDG&E
- SCE
- PG&E
- ComEd
- Delmarva (DE & MD)
- BG&E
- PPL
- Southern Company
- PEPCO (DC and MD)
- PECO
- National Grid NY
- Florida Power and Light
- Duke Energy (IN, KY, NC, OH, Progress FL, Progress NC, Progress SC, SC)
Note of the availability of interval data:
- When an account is first enrolled we retrieve interval data from the utility if available
- We will retrieve new utility interval data whenever a new utility statement is discovered
To test Utility Intervals using a [test account scenario](ref:testing):
* Select one of the utilities supported above
* Enter a [test username](ref:testing) that has at least one electric account
'
operationId: getUtilityStatementIntervals
parameters:
- $ref: '#/components/parameters/utilityStatementIdInPathParam'
- $ref: '#/components/parameters/arcVersionInHeaderParam'
responses:
'200':
description: Success
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/UtilityIntervalsPerStatementDataResponse'
'404':
description: Not Found
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/UtilityIntervalsPerStatementNotFoundError'
'422':
description: Unprocessable Entity
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/UtilityIntervalsFeatureAvailabilityError'
- $ref: '#/components/schemas/UtilityIntervalsStatementRangeUnavailableError'
/plug/utility_intervals:
get:
tags:
- Plug
summary: List Utility Intervals (Beta)
description: '**This endpoint is in _beta_. Click [here](release-phases) for a description on Arcadia''s release phases.**
Returns up to a year of interval data per request for a Utility Account.
Note that the Utility Intervals feature is limited to a subset of utilities at this time. Check the [utility coverage page](https://arc.arcadia.com/coverage?first=25&page=1&strictFilters[productAvailability][0]=PLUG_INTERVALS_SUPPORTED) to see which utilities are supported.
Note of the availability of interval data:
- When an account is first enrolled we retrieve interval data from the utility if available
- We will retrieve new utility interval data whenever a new utility statement is discovered
To test Utility Intervals using a [test account scenario](ref:testing):
* Select one of the utilities supported above
* Enter a [test username](ref:testing) that has at least one electric account
'
operationId: getUtilityIntervals
parameters:
- $ref: '#/components/parameters/intervalDataUtilityAccountIdQueryParam'
- $ref: '#/components/parameters/intervalDataUtilityMeterIdQueryParam'
- $ref: '#/components/parameters/startTimeQueryParam'
- $ref: '#/components/parameters/endTimeQueryParam'
- $ref: '#/components/parameters/utilityStatementIdQueryParam'
- $ref: '#/components/parameters/arcVersionInHeaderParam'
responses:
'200':
description: Success
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/UtilityIntervalDataResponse'
'404':
description: Not Found
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/UtilityIntervalsNoDataForMeterError'
- $ref: '#/components/schemas/UtilityIntervalsPerStatementNotFoundError'
'422':
description: Unprocessable Entity
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/UtilityIntervalsFeatureAvailabilityError'
- $ref: '#/components/schemas/UtilityIntervalsStatementRangeUnavailableError'
- $ref: '#/components/schemas/UtilityIntervalsBothAccountIdAndMeterIdProvided'
- $ref: '#/components/schemas/UtilityIntervalsInvalidMeterServiceTypeError'
- $ref: '#/components/schemas/UtilityIntervalsAmbiguousMeterError'
- $ref: '#/components/schemas/UtilityIntervalsInvalidTimeRange'
/plug/utility_intervals/metadata:
get:
tags:
- Plug
summary: Fetch Utility Interval Metadata (Beta)
description: '**This endpoint is in _beta_. Click [here](release-phases) for a description on Arcadia''s release phases.**
Returns metadata on what utility interval data is available.
'
operationId: getUtilityIntervalMetadata
parameters:
- $ref: '#/components/parameters/intervalDataUtilityAccountIdQueryParam'
- $ref: '#/components/parameters/intervalDataUtilityMeterIdQueryParam'
- $ref: '#/components/parameters/arcVersionInHeaderParam'
responses:
'200':
description: Success
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/UtilityIntervalMetadataResponse'
'404':
description: Not Found
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
$ref: '#/components/schemas/UtilityIntervalsNoDataForMeterError'
'422':
description: Unprocessable Entity
headers:
Arcadia-Version:
$ref: '#/components/headers/ArcVersion'
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/UtilityIntervalsFeatureAvailabilityError'
- $ref: '#/components/schemas/UtilityIntervalsBothAccountIdAndMeterIdProvided'
- $ref: '#/components/schemas/UtilityIntervalsInvalidMeterServiceTypeError'
- $ref: '#/components/schemas/UtilityIntervalsAmbiguousMeterError'
components:
parameters:
startTimeQueryParam:
in: query
name: start_time
required: false
description: Retrieve interval data starting from and including this timestamp. If not provided, this will default to a year before the end timestamp.
schema:
type: string
format: date-time
example: '2020-03-18T22:00:00-07:00'
utilityStatementIdInPathParam:
name: utility_statement_id
in: path
required: true
schema:
type: integer
paginationUpdatedAfterParam:
in: query
name: updated_after
required: false
description: ISO8601 datetime, used to traverse paginated responses. Use of this parameter is mutually exclusive with `updated_before`.
schema:
type: string
format: date-time
paginationOrderParam:
in: query
name: order
required: false
description: Used to specify the order in which records should be returned. Currently ordered by `updated_at` timestamp.
schema:
type: string
enum:
- asc
- desc
default: desc
intervalDataUtilityAccountIdQueryParam:
in: query
name: utility_account_id
required: false
description: ID of the utility account to pull interval data from. You must provide this parameter or `utility_meter_id`, but not both.
schema:
type: integer
paginationUpdatedBeforeParam:
in: query
name: updated_before
required: false
description: ISO8601 datetime, used to traverse paginated responses. Use of this parameter is mutually exclusive with `updated_after`.
schema:
type: string
format: date-time
endTimeQueryParam:
in: query
name: end_time
required: false
description: Retrieve interval data up to and including this timestamp. Defaults to the most recently available interval data's timestamp.
schema:
type: string
format: date-time
example: '2021-03-18T22:00:00-07:00'
utilityStatementIdQueryParam:
in: query
name: utility_statement_id
required: false
description: Retrieve interval data from the service period of a specific utility statement. Cannot be used with start_time or end_time parameters.
schema:
type: integer
arcVersionInHeaderParam:
name: Arcadia-Version
in: header
example: '2022-10-13'
description: The Arcadia-Version for the request
required: true
schema:
type: string
default: '2022-10-13'
intervalDataUtilityMeterIdQueryParam:
in: query
name: utility_meter_id
required: false
description: ID of the utility meter to pull interval data from. You must provide this parameter or `utility_account_id`, but not both.
schema:
type: integer
paginationLimitParam:
in: query
name: limit
required: false
schema:
type: integer
minimum: 1
default: 10
deprecatedClientUserIdQueryParam:
in: query
name: client_user_id
required: false
deprecated: true
description: A client_user_id to filter the list of returned items by. This field is deprecated, prefer to use `utility_account_id` instead.
schema:
type: string
utilityAccountIdQueryParam:
in: query
name: utility_account_id
required: false
description: A utility account id to filter the list of returned items by.
schema:
type: integer
schemas:
PaginatedUtilityStatements:
required:
- data
- total_count
properties:
data:
type: array
items:
$ref: '#/components/schemas/UtilityStatement'
total_count:
type: integer
example: 1
additionalProperties: false
UtilityIntervalsAmbiguousMeterError:
required:
- error
properties:
error:
type: object
required:
- description
- type
properties:
description:
type: string
enum:
- This utility account is associated with multiple meters. You must filter interval data by utility_meter_id instead of utility_account_id when the utility account is associated with multiple meters.
type:
type: string
enum:
- BAD_REQUEST
additionalProperties: false
UtilityIntervalsBothAccountIdAndMeterIdProvided:
required:
- error
properties:
error:
type: object
required:
- description
- type
properties:
description:
type: string
enum:
- You must provide exactly one of the utility_account_id or utility_meter_id parameters.
type:
type: string
enum:
- BAD_REQUEST
additionalProperties: false
UtilityIntervalsPerStatementNotFoundError:
required:
- error
properties:
error:
type: object
required:
- description
- type
- details
properties:
description:
type: string
enum:
- We do not yet have utility intervals covering the entirety of this utility statement's time range. Please see details for which utility meter's data is incomplete.
type:
type: string
enum:
- NOT_FOUND
details:
type: object
required:
- intervals_earliest_time
- intervals_latest_time
- utility_meter_id
properties:
intervals_earliest_time:
type: string
format: date-time
example: '2021-03-19T08:00:00-07:00'
intervals_latest_time:
type: string
format: date-time
example: '2022-03-19T08:00:00-07:00'
utility_meter_id:
type: number
example: '358901'
description: Which utility meter did not have full coverage for the time range of this utility statement.
additionalProperties: false
UtilityIntervalsInvalidMeterServiceTypeError:
required:
- error
properties:
error:
type: object
required:
- description
- type
properties:
description:
type: string
enum:
- Arcadia does not currently support interval data for non-electric utility meters.
type:
type: string
enum:
- BAD_REQUEST
additionalProperties: false
UtilityStatementsFeatureAvailabilityError:
required:
- error
properties:
error:
type: object
required:
- description
- type
- details
properties:
description:
type: string
enum:
- The utility_statements feature is not available for this UtilityAccount.
- The utility_statements feature is not ready yet. Please refer to UtilityAccount#FeatureAvailability for updates.
type:
type: string
enum:
- BAD_REQUEST
details:
type:
- object
- 'null'
additionalProperties: false
UtilityIntervalItem:
required:
- start_time
- end_time
- kwh
- is_null_kwh
- consumption_kwh
- generation_kwh
- net_kwh
properties:
start_time:
type: string
format: date-time
example: '2021-03-18T22:00:00Z'
end_time:
type: string
format: date-time
example: '2021-03-18T22:00:00Z'
consumption_kwh:
description: Consumption kilowatt hours usage for this interval. Availability varies by utility.
type:
- number
- 'null'
generation_kwh:
description: Generation kilowatt hours usage for the interval. Availabiltiy varies by utility.
type:
- number
- 'null'
net_kwh:
description: Net kilowatt hours usage for the interval.
type: number
kwh:
description: Prefer net_kwh instead
deprecated: true
type: number
is_null_kwh:
description: Indicates whether kwh was unavailable for this interval. When `true` the kwh field should be interpreted as null.
deprecated: true
type: boolean
additionalProperties: false
UtilityIntervalsStatementRangeUnavailableError:
required:
- error
properties:
error:
type: object
required:
- description
- type
properties:
description:
type: string
enum:
- Unable to determine service window for the given utility statement.
type:
type: string
enum:
- BAD_REQUEST
additionalProperties: false
UtilityStatement:
required:
- client_user_id
- created_at
- due_date
- final_bill
- gas_charge
- id
- kwh
- past_due
- pdf_url
- sandboxed
- service_end_date
- service_start_date
- statement_date
- supplier_charge
- tariff
- updated_at
- utility_account_id
- utility_charge
- utility_name
- utility_long_name
- service_window_inclusive_of_end_date
- commercial_line_items_detail
- billing_flags
- virtual_net_metering
- most_recent_payment_detail
properties:
id:
type: integer
example: 123
client_user_id:
type: string
example: fff57dc7-3a2b-4395-8a62-e3486d46dabe
tariff:
anyOf:
- type: 'null'
- $ref: '#/components/schemas/Tariff'
utility_name:
type: string
example: AEP SWEPCO
description: The list of supported Arcadia utilities can be found [here](https://arc.arcadia.com/coverage?first=25&page=1).
utility_long_name:
type: string
example: AEP SWEPCO AR
description: Provides greater detail than `utility_name`. The list of supported Arcadia utilities can be found [here](https://arc.arcadia.com/coverage?first=25&page=1).
utility_account_id:
type: integer
example: 2243
statement_date:
type: string
format: date
example: '2019-08-24'
due_date:
type:
- string
- 'null'
format: date
example: '2019-09-24'
service_start_date:
type: string
format: date
example: '2019-08-24'
service_end_date:
type: string
format: date
example: '2019-09-24'
kwh:
type: integer
example: 100
utility_charge:
type: number
example: 90.33
description: Total dollar amount billed by the utility on this statement.
supplier_charge:
example: 41.54
description: 'Total dollar amount billed by the energy supplier.
**Note**: Not available for all utilities.
'
type:
- number
- 'null'
gas_charge:
example: 23.32
description: 'Total dollar amount billed by the utility for natural gas.
**Note**: Not available for all utilities that provide gas service.
'
type:
- number
- 'null'
past_due:
type:
- boolean
- 'null'
example: false
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
sandboxed:
type: boolean
example: false
pdf_url:
format: uri
description: A url to the utility created PDF bill for this statement. Note that this url will only be valid for 600 seconds.
type:
- string
- 'null'
final_bill:
description: Indicates if this is the final bill that this account will receive before closing.
example: false
type:
- boolean
- 'null'
service_window_inclusive_of_end_date:
type: boolean
example: true
description: Indicates that the service window for this UtilityStatement includes the service_end_date.
net_metering:
anyOf:
- type: 'null'
- type: object
description: Details on the customer's net metering credit data. Currently only supported for Versant.
required:
- current_cycle_generated_kwh
properties:
current_cycle_generated_kwh:
description: The kwh generated during the current cycle
example: 40.57
type:
- number
- 'null'
virtual_net_metering:
anyOf:
- type: 'null'
- type: object
description: Details on the customer's virtual net metering credit data. Currently only supported for National Grid New York and Central Maine Power.
required:
- current_cycle_generated_credits
- current_cycle_applied_credits
- last_cycle_carry_over_credits
- next_cycle_carry_over_credits
- current_cycle_generated_kwh
- current_cycle_applied_kwh
- last_cycle_carry_over_kwh
- next_cycle_carry_over_kwh
- current_cycle_expiring_kwh
- current_cycle_allocation_percentage
- cdg_net_credit
properties:
current_cycle_generated_credits:
description: The amount of credits generated during the current cycle, in dollars
example: 100.15
type:
- number
- 'null'
current_cycle_applied_credits:
description: The amount of credits applied during the current cycle, in dollars
example: 90.33
type:
- number
- 'null'
last_cycle_carry_over_credits:
description: The amount of credits carried over from the last cycle, in dollars
example: 3.83
type:
- number
- 'null'
next_cycle_carry_over_credits:
description: The amount of credits carried over to the next cycle, in dollars
example: 5.99
type:
- number
- 'null'
current_cycle_generated_kwh:
description: The kwh generated during the current cycle
example: 40
type:
- number
- 'null'
current_cycle_applied_kwh:
description: The kwh applied during the current cycle
example: 30
type:
- number
- 'null'
last_cycle_carry_over_kwh:
description: The kwh carried over to the next cycle
example: 5
type:
- number
- 'null'
next_cycle_carry_over_kwh:
description: The kwh carried over to the next cycle
example: 10
type:
- number
- 'null'
current_cycle_expiring_kwh:
description: the kwh that are expiring during the current cycle
example: 5
type:
- number
- 'null'
current_cycle_allocation_percentage:
description: the fixed allocation percentage during the current cycle
example: '0.05'
type:
- string
- 'null'
cdg_net_credit:
description: The net credit from the community solar project, in dollars
example: 10
type:
- number
- 'null'
most_recent_payment_detail:
anyOf:
- type: 'null'
- type: object
description: Detail on the most recent payment. Currently only supported for National Grid Massachusetts and NYSEG.
required:
- most_recent_payment_received_amount
- most_recent_payment_received_date
properties:
most_recent_payment_received_amount:
example: 50.5
description: Total dollar amount received on the most recent payment.
type:
- number
- 'null'
most_recent_payment_received_date:
type:
- string
- 'null'
format: date
description: The date of the most recent payment.
example: '2023-08-24'
commercial_line_items_detail:
anyOf:
- type: 'null'
- type: object
description: This field is in *beta*. Click [here](release-phases) for a description on Arcadia's release phases. -- Details on line items specific to commercial accounts. Currently only supported for the ConEd utility.
required:
- supply_energy_kwh
- supply_energy_cost
- supply_demand_kw
- supply_demand_cost
- supply_customer_charge
- supply_merchant_function_charge
- supply_taxes
- supply_total_charge
- delivery_energy_kwh
- delivery_energy_cost
- delivery_demand_kw
- delivery_demand_cost
- delivery_customer_charge
- delivery_system_benefit_cost
- delivery_processing_charge
- delivery_taxes
- delivery_total_charge
- sales_tax
- electric_charge
properties:
supply_energy_kwh:
type:
- number
- 'null'
supply_energy_cost:
description: The energy supply cost, in dollars.
type:
- number
- 'null'
supply_demand_kw:
type:
- number
- 'null'
supply_demand_cost:
description: The demand supply cost, in dollars.
type:
- number
- 'null'
supply_customer_charge:
description: The customer charge for energy supply, in dollars.
type:
- number
- 'null'
supply_merchant_function_charge:
description: The charge for merchant function in energy supply, in dollars.
type:
- number
- 'null'
supply_taxes:
description: Any other charges for taxes on energy supply, in dollars.
type:
- number
- 'null'
supply_total_charge:
description: The total cost of energy supply, in dollars.
type:
- number
- 'null'
delivery_energy_kwh:
type:
- number
- 'null'
delivery_energy_cost:
description: The energy delivery cost, in dollars.
type:
- number
- 'null'
delivery_demand_kw:
type:
- number
- 'null'
delivery_demand_cost:
description: The demand delivery cost, in dollars.
type:
- number
- 'null'
delivery_customer_charge:
description: The customer charge for energy delivery, in dollars.
type:
- number
- 'null'
delivery_system_benefit_cost:
description: The delivery system benefit cost, in dollars.
type:
- number
- 'null'
delivery_processing_charge:
description: The delivery processing charge, in dollars.
type:
- number
- 'null'
delivery_taxes:
description: Any other charges for taxes on energy delivery, in dollars.
type:
- number
- 'null'
delivery_total_charge:
description: The total cost of energy delivery, in dollars.
type:
- number
- 'null'
sales_tax:
description: Sales taxes applied to the total bill, in dollars.
type:
- number
- 'null'
electric_charge:
description: The total combined charge for this bill - supply, delivery, and taxes - in dollars.
type:
- number
- 'null'
billing_flags:
type: array
description: These flags may be of interest if the corresponding Utility Account is enrolled in Bundle.
items:
type: object
properties:
type:
type: string
description: The 'possible_rebill' flag indicates that this Utility Statement may be a duplicate or variation of a previous Utility Statement
enum:
- possible_rebill
details:
type: object
properties:
conflicting_uti
# --- truncated at 32 KB (39 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/arcadia/refs/heads/main/openapi/arcadia-plug-api-openapi.yml