---
title: "Get current GPU prices"
method: GET
path: "/v1/gpu-prices/current"
tags: ["GPU Market Prices"]
---

# Get current GPU prices

`GET /v1/gpu-prices/current`

## Request

- Base URL: `https://api.liquidcompute.co`
- URL: `https://api.liquidcompute.co/v1/gpu-prices/current`
- Auth: API key in header `X-API-Key`

Returns the comparable offers from the newest completed price scrape.
`data` contains only normalized observations with a USD-per-GPU-hour
rate; unpriced, unmapped, and unconverted source rows remain in the
internal ledger and are not presented as comparable prices.

There is no pagination or server-side filtering: every row belongs to
the single run identified by `run`, so clients can compute comparisons
without mixing scrape times. A `partial` run is valid and its `sources`
array names which vendors were parsed, skipped, failed, or not attempted.

Until the first scrape has completed, and whenever no completed scrape
holds a comparable price, the endpoint returns `503` `data_unavailable`
with a `Retry-After` header. That is an expected state, not an outage:
retry after the indicated delay.

Requires the `gpu-prices` entitlement family; requests without it
return `404` `not_found`.

## Response `200`

Current comparable GPU prices and scrape coverage.

- GPUPricesResponse
  - `data` GPUPriceObservation[], required
    - `provider` string, required
    - `provider_category` 'neocloud' | 'general_purpose' | 'hyperscaler' | 'mixed', required
    - `supply_model` 'direct' | 'marketplace' | 'aggregator', required
    - `gpu_model` 'a100' | 'h100' | 'h200' | 'b200' | 'b300', required
    - `gpu_model_raw` string, required: GPU label exactly as published by the vendor.
    - `provider_sku` string, required
    - `vram_gb` integer, nullable, required
    - `accelerator_count` integer, nullable, required: GPU count stated by the vendor; null when not published.
    - `minimum_quantity` integer, nullable, required: Minimum volume required for the rate; not an instance GPU count.
    - `price_kind` 'on_demand' | 'reserved' | 'spot', required
    - `commitment_term` string, nullable, required
    - `observed_amount` number, nullable, required: Published numeric amount before any per-GPU derivation; null for a discount-derived price.
    - `observed_literal` string, required: Price or discount text exactly as published by the vendor.
    - `price_qualifier` string, nullable, required: Vendor qualifier such as "from" or "starting at".
    - `observed_unit` 'usd_per_gpu_hour' | 'usd_per_instance_hour' | 'usd_per_rack_hour' | 'null', nullable, required
    - `usd_per_gpu_hour` number, required: Comparable normalized rate in USD per GPU-hour.
    - `currency` 'USD' | 'null', nullable, required
    - `region_raw` string, nullable, required: Region text exactly as published; null when the vendor publishes none.
    - `region_canonical` string, nullable, required: Normalized form of region_raw; null when no source-backed normalization exists.
    - `configuration` string, nullable, required: Vendor configuration qualifiers that distinguish otherwise similar offers.
    - `availability` 'purchasable' | 'waitlist' | 'quote_only', required
    - `price_basis` 'observed' | 'derived_from_published_discount' | 'null', nullable, required: Whether the rate was printed or derived from a vendor-published discount; null when the source does not state a basis.
    - `source_url` string, uri, required
    - `observed_at` string, date-time, required
  - `total_count` integer, required: Number of comparable observations in data.
  - `run` GPUPriceRun, required: The completed scrape shared by every observation in the response.
    - `run_id` string, required
    - `started_at` string, date-time, required
    - `finished_at` string, date-time, required
    - `status` 'succeeded' | 'partial', required
    - `sources_attempted` integer, required
    - `sources_parsed` integer, required
    - `sources_skipped` integer, required: Sources whose pricing page refused the fetch (robots.txt); attempted = parsed + skipped + failed.
    - `sources_failed` integer, required
    - `sources_not_attempted` integer, required
    - `observations_written` integer, required: All ledger rows written, including rows that are not comparable prices.
    - `sources` GPUPriceSource[], required
      - `source` string, required
      - `outcome` 'parsed' | 'skipped' | 'failed' | 'not_attempted', required
      - `rows` integer, required: Ledger rows this source persisted in the served scrape, every status counted. Not the number of comparable prices in `data`; a `parsed` source can report 0 when its rows were refused.

## Other responses

- `401`: Missing or invalid API key.
- `404`: Unknown endpoint, unavailable resource, or an index or index family outside your authorization.
- `429`: Rate limit exceeded.
- `502`: Upstream service or gateway configuration failure.
- `503`: Either no completed scrape is available to serve yet (`data_unavailable`, with a `Retry-After` header) or API-key validation is temporarily unavailable (`service_unavailable`).

---

[API](https://skmtc.dev/liquidcompute/apis/liquidcompute-api.md) - [All operations](https://skmtc.dev/liquidcompute/apis/liquidcompute-api/llms.txt) - [OpenAPI document](https://skmtc.dev/liquidcompute/apis/liquidcompute-api/revisions/f58bc0aabb07?raw)
