| Field | Meaning |
startsAt | Inclusive start. Always ends in :00, :15, :30, or :45 with zero seconds. |
endsAt | Exclusive end. Always startsAt + 15 minutes. |
[startsAt, endsAt)) mean two adjacent reservations
never overlap and never leave gaps.1202:00 ────────────── 02:15 ────────────── 02:30 interval A interval B
123456{ "intervals": [ { "startsAt": "2026-04-29T02:00:00Z", "endsAt": "2026-04-29T02:15:00Z", "capacityGb": 16 }, { "startsAt": "2026-04-29T02:15:00Z", "endsAt": "2026-04-29T02:30:00Z", "capacityGb": 16 } ] }
POST /api/capacity/reservations creates one
reservation: a server-generated UUID, a createdAt timestamp, and one or
more (interval, capacityGb) line items. capacityGb must be a positive
multiple of 4 (= 1 GB-hour over the 15-minute interval); single-GB
reservations aren't accepted.1234567{ "reservationId": "9f67b8f7-7b91-4d2d-b1cb-19d0d0a14562", "createdAt": "2026-04-28T18:00:05Z", "intervals": [ { "startsAt": "2026-04-29T02:00:00Z", "endsAt": "2026-04-29T02:15:00Z", "capacityGb": 16 } ] }
GET /api/capacity/reservations returns it in
reverse-chronological order.reservedGb for an interval is just the sum of capacityGb across all
your reservations covering that interval.| Field | Meaning |
reservableGb | Additional GB you could add to this interval right now. |
reservationLimitGb | The policy cap on how much you can hold in this interval (your org's max_memory_gb). |
reservedGb | What you already hold in this interval (sum of all your reservations covering it). |
capacity_not_available and you
re-read.max_memory_gb. It limits how
much capacity you can hold in any single 15-minute interval — your
reservedGb for an interval cannot exceed it. The cap appears as
reservationLimitGb in calendar interval rows.reservedGb → you're inside your reserved
capacity. That portion of the interval is billed at the reserved rate.reservedGb → the excess is overage,
billed at the on-demand rate.