API Docs

Bids

Configure your portfolio for participation using Bids.

Bids represent offers to supply energy to the market. Use the Bidding API to configure dispatch frequency, duration, and earnings to match your preferences.

Bids are structured as a supply curve covering a specific time period. Offer increasing quantities in exchange for higher prices.

Understanding Bid Curves

A bid curve is an ascending array of price ($) x quantity (kW) pairs. Each point represents an offer to provide energy over a time period in exchange for a given price. The curve allows you to offer higher a quantity_in_kw in exchange for a higher price.

Example Bid Curve

Set up Standing Bids

Use standing bids to set up a meter's recurring bid schedule. Standing bids enable you to design a participation strategy, implement it once, and let it repeat over a long time horizon.

ObjectDescription
BidMeter ID, date range, and day type for each bid. A bid contains one or many hours.
HoursThe bid's applicable hours in the market each day. Each hour denoted using hour_ending. An hour has one or many curve points.
CurvePrice-quantity pairs for each hour.
{
"standing_bids": [
{
"meter_id": "sample-meter-id",
"start_time": "2021-07-31T00:00:00Z",
"end_time": "2021-09-01T00:00:00Z",
"day_type": "business",
"hours": [
{
"hour_ending": 17,
"curve": [
{
"quantity_in_kw": 40,
"price": 0.80
},
{
"quantity_in_kw": 50,
"price": 0.95
}
]
},
{
"hour_ending": 18,
"curve": [
{
"quantity_in_kw": 40,
"price": 0.80
},
{
"quantity_in_kw": 50,
"price": 0.95
}
]
}
]
}
]
}

Modifying Bids

As conditions change, you may want to update your bid strategy. To modify a bid, submit a new curve for the relevant date range and market hours.

Partial modifications to bids are supported. Simply create a new bid for the portion of a period which you want to update.

Example [Aug. 07 2021]

Temperatures will be abnormally high next week -- leading to elevated market prices and increased performance capacity due to higher on-site load (kW).

This is a near-term opportunity to capture revenue and aid grid reliability. Using the bid above as an example, you craft a new standing bid decreasing the price to $0.30/kWh and increasing quantity_in_kw to 45. Set this bid to start in 3 days and expire 7 days later.

POST /bidding/standing_bid

{
"meter_id": "sample-meter-id",
"start_time": "2021-08-10T00:00:00Z",
"end_time": "2021-08-17T00:00:00Z",
"day_type": "business",
"hours": [
{
"hour_ending": 17,
"curve": [
{
"quantity_in_kw": 45,
"price": 0.30
},
{
"quantity_in_kw": 50,
"price": 0.95
}
]
},
{
"hour_ending": 18,
"curve": [
{
"quantity_in_kw": 45,
"price": 0.30
},
{
"quantity_in_kw": 50,
"price": 0.95
}
]
}
]
}

Once the bid is received, the bid curve is updated for this period. In summary,

  • Business days between Aug 10 and Aug 17 will use this bid curve for hour_ending 17 and 18.
  • Days prior to Aug 10 will continue to use the existing bid curve.
  • Days after Aug 17 will continue to use the existing bid curve

Cancel Bids

In some cases, you may want to cancel a bid entirely. To cancel a bid, submit an empty curve[] for the same meter and time period.

"hour_ending": 17,
"curve": []

API Response codes

Bids are validated by quite some rules. In case one of the rules do not pass, you'll receive a HTTP response code 412. The message body will contain detailed information on what validations didn't pass. It always contains a code and a message.

Possible validation exceptions:

codedescription
400The bid submissions deadline for admins has passed. You are not allowed to make any changes anymore to the bids for that trading day.
401The bid prices are not in the expected range. All prices have to be less than 1 $/kWh.
402The bid prices have an invalid scale. Check the precision of the bid prices. The maximum allowed decimals is 5.
403The bid quantities are not in the expected range. Valid quantity is greater than 1 kW.
404The bid contains timeslot(s) for a closed market.
405A bid contains one or more meters not assigned to any resource.
406A bid contains timeslot(s) which do not start at a full hour.
407A bid contains timeslot(s) which do not have a range of one hour.
408A bid contains meter(s) which are not assigned to this account.
409A bid contains meter(s) which are not assigned to a resource at the tradingDay.
410A bid curve does not meet the minimum quantity.
411A bid curve price is not within the range of $0.01 to $1.00.
412A bid curve is not increasing in power or price.
413The maximum number of bids in a single file has been exceeded. The limit is set to 100,000 per file.
414The maximum number of meters in a single bid request has been exceeded. The limit is set to 100,000 per request.
415The ask contains resources which are not assigned to this account.
416The ask curve power has quantity that is not positive.
417The ask price is not within the range of $0.01 to $1.00.
418An ask curve is not increasing in power or price.
419The ask contains timeslots which do not end at a full hour.
420A standing bid contains meter(s) which are not assigned to this account.
421A standing bid contains meter(s) which are not assigned to a resource.
422A standing bid curve does not meet the minimum quantity.
423A standing bid price is not within the range of $0.01 to $1.00.
424A standing bid curve is not increasing in power or price.
425A standing bid has an invalid hourEnding value, which should be in the range 0..23.
426A standing bid has start time before next bidding window at [bidding window].
427A standing bid has an invalid time range, i.e. end_time should be greater than or equal to start_time.
428The standing bid overlaps with a different standing bid but for the same meter.
429The maximum number of meters in a single standing bid request has been exceeded. The limit is set to 100 per request.
430The file contains duplicate bids for the following (meter id, bid start).