Estimate an order
⚠️ This endpoint is in public preview.
Estimate a buy or sell order before placing it.
Authorizations
Create an API token using sf tokens create or at https://sfcompute.com/dashboard/tokens.
Body
- Option 1
- Option 2
Key/value filters on instance SKU properties.
Keys are the property names instance SKUs carry on GET /v2/instance_skus (e.g. accelerator); values match each property's value spelling. The reserved instance_sku key pins to a single SKU by id.
Empty map = no constraints.
Order start: a time on the allocation schedule grid, or the current time.
1738972800
Order duration in seconds, a multiple of 60. The order must end on the allocation schedule grid.
x >= 0Number of nodes. Must be positive.
"buy"Pool that receives compute when the order fills. Omit to get an estimate without pinning to a pool. The response body then returns a placeholder you must replace before submitting to /v2/orders.
(pool_[0-9a-zA-Z_-]{1,21})|(sfc:pool:[a-zA-Z0-9._-]+(:[a-zA-Z0-9._-]+){2,2})"pool_k3R-nX9vLm7Qp2Yw5Jd8F"
If true, the estimate models an order that may fill partially — fewer nodes and/or a subset of the requested time window — instead of one that fills completely or not at all. Send the same value you will send as allow_partial on POST /v2/orders, or the estimate answers for a different order than the one you place. Absent means all-or-nothing.
Preview. The _preview_preemption_limit_price_multiple you will send on POST /v2/orders, validated the same way. The order doesn't count toward your compute limit.
^\d+\.\d{1,6}$"1.25"
The most you will pay. The estimate models a buy limited to this rate instead of one that takes any price, so it answers what an order at this limit would fill: the matched part's average rate stays at or under it, and when nothing can match within it, the response is unavailable with reason no_availability. The quoted rate never exceeds this value. Absent means any price.
^\d+\.\d+$"18.000000"
Response
Estimate result.
- Option 1
- Option 2
Ready-to-submit body for POST /v2/orders, priced at the estimated rate. It is an estimate, not a promise to fill: the market can move before you post it, and when the match combines resting orders at different prices, posting it verbatim can fill less than estimated or nothing at all. For an allow_partial estimate that matched only part of the order, the price is the rate over the part that matched.
Fee policy for the matched instance SKU.
"quoted"Node-minutes the quoted rate was derived over, present only when the estimate matched part of the order rather than all of it, including a sell that can't fill the start of its window. To estimate the execution total, multiply the rate by this area in node-hours (matched_node_minutes / 60), not by the full allocation_schedule_delta rectangle.
When absent, the whole order matched and the rectangle is the area to price; an order starting now can't fill the minute already under way, so matching all of it after that minute is whole. For a buy the product can overstate the execution total: its rate is derived over the order's remaining window less one minute, so it still clears if placement lands a minute later, and is capped at limit_price_dollars_per_node_hour when one is sent.
A partial quote's rate is rounded down for a sell and up for a buy, which puts the product within $0.000001 per matched node-minute of the exact total.
Treat this area as an estimate rather than a guarantee: when the match combines resting orders at different prices, posting the quoted rate as a limit may fill less than this.
The allocation the estimate actually matched. It can be smaller than the requested schedule: an allow_partial estimate may match fewer nodes or less time, an order that starts now cannot fill the minute already under way, and a sell first fills from the first allocation schedule grid time more than 5 minutes after it's placed. Like the rate, it is an estimate, not a promise to fill.
Maintenance windows for the matched instance SKU overlapping the order's delivery window.
- Option 1
- Option 2
- Option 3