---
title: "Live burn rate, session cost so far, and org runway for a VM"
method: GET
path: "/v1/vms/{id}/burn"
tags: ["VMs"]
---

# Live burn rate, session cost so far, and org runway for a VM

`GET /v1/vms/{id}/burn`

Every VM bills at one bundled hourly rate (per-GPU catalog price times GPU count for GPU VMs, a flat size rate for CPU VMs); disk is included, never billed separately. The rate is locked when the usage session opens, so this endpoint reads it from the open usage record when one exists (rateSource=locked) and only falls back to the current catalog when nothing is accruing (rateSource=catalog).

## Path parameters

- `id` string, required

## Response `200`

The VM's burn breakdown

- VmBurn
  - `accruedSessionCents` integer — cost accrued by the open session so far (session span times the locked rate, the same span math settlement uses); omitted when no session is open
  - `autoStopFloorCents` integer, required — available-balance floor (cents) below which the org is auto-stopped
  - `diskBilled` boolean, required — always false today: disk is included in the bundled hourly rate and never billed as a separate line item
  - `gpuCount` integer — set when rateBasis is gpu
  - `nonBillable` boolean — This VM's usage is recorded but never charged (a provider consuming its own reserved node), so pricePerHourCents is informational and every cents figure below is 0 for it. Without this a client cannot tell "not charged" from "nothing running".
  - `orgAccruedCents` integer, required — the org's un-settled usage across all workloads: the current month, plus any prior month not yet settled
  - `orgAccruedMonthCents` integer, required — deprecated alias of orgAccruedCents (same value; the name predates un-settled prior months being included); will be removed in a future spec version
  - `orgAvailableCents` integer, required — spendable balance = ledger balance minus orgAccruedCents (can be negative)
  - `orgBurnPerHourCents` integer, required — sum of the locked rates of every open usage record in the org
  - `perGpuCents` integer — pricePerHourCents / gpuCount; set when rateBasis is gpu
  - `pricePerHourCents` integer, required — the VM's bundled hourly rate: the open usage record's locked rate when a session is accruing, else the current catalog rate for the VM's shape
  - `projectedRunwayHours` number, double, nullable, required — (orgAvailableCents - autoStopFloorCents) / orgBurnPerHourCents; null when orgBurnPerHourCents is 0, clamped to 0 when available is already at or below the floor
  - `rateBasis` 'gpu' | 'cpu', required — gpu = per-GPU catalog price times gpuCount; cpu = flat per-resource-size rate
  - `rateSource` 'locked' | 'catalog', required — locked = read from the open usage record (exactly what settlement will charge); catalog = no open session, the rate that would apply on next start
  - `sessionStartedAt` string — start of the open usage session; omitted when none
  - `vmId` string, required

## Other responses

- `401` — Missing or invalid API key
- `403` — API key lacks the required scope
- `404` — Resource not found

---

[API](https://skmtc.net/openrelay/apis/openrelay-api.md) · [All operations](https://skmtc.net/openrelay/apis/openrelay-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/openrelay/openrelay-api/versions/32905b8f44f8/schema)
