Skip to main content

Pricing Pages and Price Feed

What a GPU costs on Lium is public. Three surfaces on lium.io answer "what does an H200 cost right now" without an account, an API key or a lium ls:

SurfaceURLFor
Pricing hub โ€” every GPU model, grouped by class, with the live price range and how many pods are rentablehttps://lium.io/pricingpeople, search engines, agents (markdown twin)
One page per GPU modelhttps://lium.io/gpu/<slug> โ€” e.g. /gpu/h100, /gpu/b200, /gpu/h200the same, per model
Per-model price feed, JSONhttps://lium.io/pricing.jsonaggregators, comparison sites, agents

The hub, the generated model pages and the feed render from the same model list, and each URL is cached for an hour, so the number an aggregator shows from pricing.json and the number on the page it links to differ by at most one CDN revalidation. The per-node rows behind those numbers are the Public Nodes Feed.

/pricing.jsonโ€‹

curl -sSL https://lium.io/pricing.json
{
"generated_at": "2026-09-07T09:32:29.120Z",
"unit": "USD per GPU-hour",
"nodes_url": "https://lium.io/api/public/v1/nodes",
"count": 91,
"models": [
{
"model": "NVIDIA H100 80GB HBM3",
"gpu_model": "H100 80GB HBM3",
"name": "H100 80GB HBM3",
"slug": "h100-80gb-hbm3",
"url": "https://lium.io/gpu/h100",
"gpu_class": "datacenter",
"reference_price_usd_per_gpu_hour": 1.49,
"min_price_usd_per_gpu_hour": 1.2,
"max_price_usd_per_gpu_hour": 2.75,
"available_nodes": 20,
"available_gpus": 56,
"vram_gb": 80,
"architecture": "hopper",
"browse_url": "https://lium.io/?gpu=NVIDIA%20H100%2080GB%20HBM3",
"updated_at": "2026-09-07T09:32:29.120Z"
}
]
}
FieldMeaning
generated_atWhen the prices were read (ISO 8601). The feed is cached at the CDN for an hour (s-maxage=3600, with stale-while-revalidate=86400, so a copy just past the hour can still be served while the CDN refreshes it); this is the age of the numbers, not of the HTTP response.
unitAlways USD per GPU-hour. Every price in the file is per GPU, per hour.
nodes_urlThe Public Nodes Feed โ€” one row per node with the same prices, if you want rows instead of models.
countNumber of entries in models.
models[].modelFull machine name (NVIDIA H100 80GB HBM3).
models[].gpu_modelThe same string the nodes feed uses in its gpu_model field โ€” the join key between the two feeds.
models[].nameDisplay name.
models[].slugURL slug of the model.
models[].urlThe page for this model. Models covered by a landing page point at it โ€” both H100 form factors resolve to /gpu/h100.
models[].gpu_classdatacenter, professional or consumer. The nodes feed's tier means Secure/Spot, so the class has its own name here.
models[].reference_price_usd_per_gpu_hourLium's reference price for the model โ€” the machine_prices entry of the public GET https://lium.io/api/v1/shared-config. Present for every model, including ones with no pod available.
models[].min_price_usd_per_gpu_hour, max_price_usd_per_gpu_hourCheapest and dearest live ask across the pods rentable right now. With one pod they are equal; with none they both fall back to the reference price, which the pages show as a single figure.
models[].available_nodes, available_gpusRentable nodes and GPUs at generated_at. 0 when nothing is available โ€” the model stays in the file with its reference price.
models[].vram_gb, architecturePer-GPU memory (null when the model is not in the spec table) and architecture family (null when the shared config has no entry for it).
models[].browse_urlBrowse Pods on lium.io filtered to this model โ€” the rent-now link.
models[].updated_atSame instant as generated_at.

The feed is a contract: fields are only ever added, never renamed or removed. Ingest it on a schedule (prices move as providers reprice and pods come and go); the rows behind each model are in the nodes feed, with location, per-node price and a deploy link.

/pricing and /gpu/<slug>โ€‹

The hub lists every model in pricing.json grouped by gpu_class, with its price range and availability, and links each row to its model page; the markdown twin links each row to Browse Pods filtered on it instead. A generated model page shows the same numbers for one model, its specs, how many pods are rentable now with a link to browse them, and related models.

<slug> is models[].slug from the feed. Two landing pages are hand-written โ€” /gpu/h100 (covers H100 80GB HBM3 and H100 PCIe) and /gpu/b200 โ€” every other model gets a generated pricing page at its slug. A slug the landing page covers redirects to it (/gpu/h100-pcie โ†’ /gpu/h100, HTTP 308); an unknown slug is a 404. https://lium.io/sitemap.xml lists the landing pages plus the current indexing batch of model pages, not all of them.

Markdown for agentsโ€‹

/, /pricing and every /gpu/<slug> page have a markdown twin. Ask for it with the Accept header โ€” rank text/markdown above text/html and you get the same prices as a markdown table, no HTML to parse:

curl -sSL -H 'Accept: text/markdown' https://lium.io/pricing
curl -sSL -H 'Accept: text/markdown' https://lium.io/gpu/h200
# Lium โ€” GPU rental marketplace

...

## Prices right now

### Data center

| GPU | $ / GPU / hour | Rentable now |
| --- | --- | --- |
| [B200](https://lium.io/?gpu=NVIDIA%20B200) | $5.50 โ€“ $6.53 | 5 pods ยท 19 GPUs |
| [H200](https://lium.io/?gpu=NVIDIA%20H200) | $2.75 โ€“ $4.23 | 10 pods ยท 29 GPUs |

Negotiation follows RFC 9110: a tie, a bare */* or no Accept header returns HTML, the canonical representation; a header that rules out both (Accept: application/json) gets 406 Not Acceptable with a markdown body that lists the URLs that do answer. Responses carry Vary: Accept, so a shared cache never hands an agent the HTML it stored for a browser. The redirects and 404s are the same in both representations: /gpu/h100-pcie answers 308 to /gpu/h100 whichever you ask for.

The docs site does the same for every page here โ€” see AI Agents โ€” and https://lium.io/robots.txt names llms.txt, pricing.json and the sitemap for crawlers.