---
title: "GPU availability by model"
method: GET
path: "/v1/gpu-availability"
tags: ["Catalog"]
---

# GPU availability by model

`GET /v1/gpu-availability`

Live availability per GPU model. Responses are served from a short-lived cache.

## Response `200`

Availability by gpu model

- GpuAvailability[]
  - `cluster` ClassAvailability, required — Availability for one consumption mode of a model: "vm" = VFIO passthrough (exact, from per-node unit state); "cluster" = container device-request (capacity minus cluster commitment).
    - `freeGpus` integer, required
    - `maxPlaceableGpus` integer, required — Largest single allocation possible right now — for a VM the biggest tiling on any one node, for a cluster the largest per-replica device count on any one node. A workload can never exceed this even if freeGpus is larger (it lands on a single node).
    - `nodes` NodeClassCap[]
      - `freeGpus` integer, required
      - `freeUnits` integer, required
      - `nodeId` string, required
      - `reserved` boolean — This node's free capacity in your view is held exclusively for your organization under a node reservation.
      - `unitSizes` integer[] — Free unit sizes on this node (for display/tiling).
    - `placeableGpuCounts` integer[] — GPU counts actually placeable on >=1 node right now. Frontends drive the count picker from this so offered counts can't 409/deploy-timeout.
    - `reservedFreeGpus` integer — How much of freeGpus is reserved exclusively for your organization: capacity you contracted for, as opposed to capacity you would be renting from the open market. Absent or 0 when none of it is yours.
    - `tileLattice` integer[] — Structural set of counts this model's units can ever tile to (free or not) — the hardware shape. vm view only; clusters are step-1.
    - `totalGpus` integer, required — free + claimed
  - `gpuModelId` string, required
  - `vm` ClassAvailability, required — Availability for one consumption mode of a model: "vm" = VFIO passthrough (exact, from per-node unit state); "cluster" = container device-request (capacity minus cluster commitment).
    - `freeGpus` integer, required
    - `maxPlaceableGpus` integer, required — Largest single allocation possible right now — for a VM the biggest tiling on any one node, for a cluster the largest per-replica device count on any one node. A workload can never exceed this even if freeGpus is larger (it lands on a single node).
    - `nodes` NodeClassCap[]
      - `freeGpus` integer, required
      - `freeUnits` integer, required
      - `nodeId` string, required
      - `reserved` boolean — This node's free capacity in your view is held exclusively for your organization under a node reservation.
      - `unitSizes` integer[] — Free unit sizes on this node (for display/tiling).
    - `placeableGpuCounts` integer[] — GPU counts actually placeable on >=1 node right now. Frontends drive the count picker from this so offered counts can't 409/deploy-timeout.
    - `reservedFreeGpus` integer — How much of freeGpus is reserved exclusively for your organization: capacity you contracted for, as opposed to capacity you would be renting from the open market. Absent or 0 when none of it is yours.
    - `tileLattice` integer[] — Structural set of counts this model's units can ever tile to (free or not) — the hardware shape. vm view only; clusters are step-1.
    - `totalGpus` integer, required — free + claimed

## Other responses

- `401` — Missing or invalid API key
- `403` — API key lacks the required scope

---

[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)
