Coming soon. Reserved capacity is not yet available. The contract below
may change before launch.
POST to commit, GET to audit. Both
work in terms of intervals and integer GB; there are no individual blocks
or unit IDs.
Reservations compose at 15-minute granularity, so a multi-hour or
multi-day commitment is just a list of contiguous (or non-contiguous)
intervals. Reserve precisely the windows your workload occupies — there’s
no minimum block size beyond the interval itself, and no requirement to
reserve continuously through periods you won’t use.
Make a reservation
One call commits capacity to one or more 15-minute intervals. Atomic across the whole request — either every interval is reserved, or nothing is.curl
Validation
| Rule | Behavior |
|---|---|
startsAt and endsAt UTC and 15-minute aligned | Reject misaligned. |
endsAt == startsAt + 15 minutes | Reject longer spans; enumerate intervals. |
capacityGb is a positive multiple of 4 | Reject anything else. The grain is 1 GB-hour (= 4 GB × 15 min). |
startsAt >= earliestReservableStart | Reject intervals too soon. |
Requested capacity fits current reservableGb | Reject instead of overbooking. |
Idempotency-Key stable on retry | Replaying same key + body returns original result. |
Rejected write
reason | Meaning |
|---|---|
insufficient_capacity | Request exceeds current reservableGb (platform-side). |
reservation_limit_exceeded | Would exceed your org’s max_memory_gb for the interval. |
too_soon | startsAt is before earliestReservableStart. |
misaligned | startsAt/endsAt not on the 15-minute grid. |
capacity_grain | capacityGb is not a positive multiple of 4. |
Idempotency
Both reservation writes accept anIdempotency-Key header. The server
stores the key with a hash of the request body and the response. Retries
return the cached response, even if the original write succeeded.
| Behavior | Response |
|---|---|
| Same key, same body | Cached response from the first call. |
| Same key, different body | 409 idempotency_key_conflict. |
| No key | Request processed normally; retries are the client’s problem. |
reserve-nightly-2026-04-29, so a client retry sends the same key.
Cancellation does not exist
Reservations are non-refundable. Once committed, capacity is permanent for that interval. There is noDELETE, no cancel endpoint, no transfer to a
different interval.
The hedge: book conservatively, only what you’re confident you’ll run, and
let on-demand absorb the variability above.
List your reservations
The audit list. Returns every reservation event you’ve made in the time window, in reverse-chronological order.curl
| Query param | Meaning |
|---|---|
from | Return reservations whose createdAt >= from. |
to | Return reservations whose createdAt < to. |
cursor | Pagination cursor from a previous response. |
limit | Max reservations per page. |
Concurrency and atomicity
| Operation | Atomic across | On failure |
|---|---|---|
POST /reservations | All intervals in the request | Nothing reserved. |
reservableGb in their validation error.
Where to go next
Usage and overage
How reserved capacity consumes actual usage.
Reading the calendar
Plan before you commit.
API reference
Every endpoint with full request/response shapes.