Running Sandbox Dispatch Simulations
Voltus provides a sandbox environment for you to test standard dispatch scenarios. You must run and pass all dispatch scenarios in sandbox before Voltus will schedule production dispatches for your sites. A dispatch scenario is one or more dispatches being created and updated on sandbox.voltus.co.
For other uses of the sandbox environment that do not require a sandbox key see Sandbox Test Credentials.
Voltus will provide a Sandbox API key for use with sandbox.voltus.co
.
In the below requests, this will be called ${SANDBOX_API_KEY}
as a placeholder.
You must monitor your systems to ensure they meet the “passing criteria” for each test. Voltus will not be able to monitor the curtailment output of your system and whether it matches expectations.
Reach out to api-support@voltus.co with any questions about creating a dispatch scenario.
Running Dispatch Scenarios
For each dispatch scenario, you will specify a notification_time
which is the time the dispatch scenario will start.
You may also specify site names, site customer_location_ids, and program information if you wish.
To run a dispatch scenario, you will send a POST
request to sandbox.voltus.co/2022-04-15/scenarios
with a X-Voltus-API-Key
header set to your sandbox key and a body specifying the scenario parameters.
Example requests are shown for each dispatch scenario.
If you create a scenario before the previous scenario has finished, the previous scenario will be overwritten, and all dispatches from that scenario will disappear.
You may add as many sites as desired. They must have unique names and customer_location_ids.
1. Basic Dispatch
A basic dispatch. Start and end times will be provided immediately.
API Behavior: At <notification_time>
, a dispatch will be issued that starts at <start_time>
and has an end time of <end_time>
.
Passing criteria: Your client sends a signal to both sites to be fully curtailed in time for the start time and begins to ramp up after the end time is reached.
Example curl request to run this dispatch scenario (all fields modifiable):
curl --request POST \
--url https://sandbox.voltus.co/2022-04-15/scenarios \
--header 'Content-Type: application/json' \
--header "X-Voltus-API-Key: ${SANDBOX_API_KEY}" \
--data '{
"scenario_type": "basic",
"notification_time": "2023-12-01T16:40:00Z",
"start_time": "2023-12-01T16:50:00Z",
"end_time": "2023-12-01T17:00:00Z",
"sites": [
{
"name": "My Site",
"customer_location_id": "democustomerlocationid",
"commitment": 5
},
{
"name": "Another Site",
"customer_location_id": "democustomerlocationid2",
"commitment": 50
}
],
"program": {
"name": "A Program",
"timezone": "PST",
"market": "CAISO",
"program_type": "capacity"
}
}'
2. Ancillary Services Dispatch
This emulates a typical ancillary service dispatch, where the end time is not initially provided and the start time is in the recent past. After ten minutes from the dispatch start time, the end time will be added as an update to the dispatch to end the dispatch immediately.
API Behavior:
At <notification_time>
, a dispatch will be issued that starts at <notification_time>
.
At <notification_time + 10 minutes>
, a dispatch update will be issued that has an end time of <notification_time + 10 minutes>
.
Passing criteria: At notification time, your client sends a signal to both sites to curtail immediately. When the dispatch update arrives 10 minutes later, your client sends a signal to the sites to ramp up immediately.
Example curl request to run this dispatch scenario (all fields modifiable):
curl --request POST \
--url https://sandbox.voltus.co/2022-04-15/scenarios \
--header 'Content-Type: application/json' \
--header "X-Voltus-API-Key: ${SANDBOX_API_KEY}" \
--data '{
"scenario_type": "ancillary",
"notification_time": "2023-12-01T16:40:00Z",
"sites": [
{
"name": "My Site",
"customer_location_id": "democustomerlocationid",
"commitment": 5
},
{
"name": "Another Site",
"customer_location_id": "democustomerlocationid2",
"commitment": 50
}
],
"program": {
"name": "A Different Program",
"timezone": "PST",
"market": "CAISO",
"program_type": "ancillary_services"
}
}'
3. Back-to-Back Dispatches
Two back-to-back dispatches. The first event start and end time will be provided immediately. Once the first event has begun, the second event’s start and end time will be provided.
API Behavior:
At <notification_time>
, a dispatch will be issued that starts at <notification_time>
and has an end time of <notification_time + 10 minutes>
.
At <notification_time + 5 minutes>
, a dispatch will be issued that starts at <notification_time + 10 minutes>
and has an end time of <notification_time + 20 minutes>
.
Passing criteria: Your client sends a signal to both sites to curtail immediately, stay curtailed through the first dispatch end time and the second dispatch start time, and only begin to ramp up after the second dispatch end time is reached.
Example curl request to run this dispatch scenario (all fields modifiable):
curl --request POST \
--url https://sandbox.voltus.co/2022-04-15/scenarios \
--header 'Content-Type: application/json' \
--header "X-Voltus-API-Key: ${SANDBOX_API_KEY}" \
--data '{
"scenario_type": "back_to_back",
"notification_time": "2023-12-01T16:40:00Z",
"sites": [
{
"name": "My Site",
"customer_location_id": "democustomerlocationid",
"commitment": 5
},
{
"name": "Another Site",
"customer_location_id": "democustomerlocationid2",
"commitment": 50
}
],
"program": {
"name": "A Different Program",
"timezone": "PST",
"market": "CAISO",
"program_type": "ancillary_services"
},
"sites2": [
{
"name": "My Site",
"customer_location_id": "democustomerlocationid",
"commitment": 5
},
{
"name": "Another Site",
"customer_location_id": "democustomerlocationid2",
"commitment": 50
}
],
"program2": {
"name": "A Program2",
"timezone": "EST",
"market": "NYISO",
"program_type": "ancillary_services"
}
}'
A Note on Timezones
The body of the POST scenario
request takes up to three times: notification_time
, start_time
, and end_time
.
These can be input with any timezone info.
The GET dispatches
endpoint will always return times converted to UTC.
The program.timezone
field does not affect the dispatch times and can be any string.
Example valid formats for POST scenario
times:
2023-11-29T20:40:00-08:00
: PST (Pacific time in winter)2023-11-29T19:40:00-07:00
: PDT (Pacific time in summer)2023-11-29T17:40:00-05:00
: EST (Eastern time in winter)2023-11-29T16:40:00-04:00
: EDT (Eastern time in summer)2023-11-29T16:40:00Z
: UTC
Endpoints Available for Dispatch Simulations
GET Dispatches/{id}
Returns a list of dispatches (GET dispatches
) or a dispatch (GET dispatches/{id}
), which will change throughout the dispatch simulation.
GET/DELETE/POST Webhook
Set up a webhook with sandbox.voltus.co
and your sandbox credentials, the same way you would for api.voltus.co
. Please follow our webhook tutorial or webhooks reference docs, replacing api.voltus.co
with sandbox.voltus.co
.
Once you’ve registered your webhook with POST webhooks
and confirmed the webhook is returned from GET webhooks
, Voltus will send a webhook request to your server every time a dispatch is issued or updated as part of a dispatch simulation, the same way a production dispatch would work.
Note: you will also need to register your webhook with production api.voltus.co
before being ready for a Dispatch Verification.
GET Sites
Returns the sites of the current (or most recent) dispatch scenario.
Note the site IDs may change for different scenarios.
Telemetry
We do not support the telemetry endpoint for dispatch simulations at this time for dispatch simulation.