Public Nodes Feed
Every GPU node currently rentable on Lium, as one unauthenticated JSON call. No key, no signup, no rate-limit negotiation — point your ingester at it and start listing us today.
| Resource | URL |
|---|---|
| Live feed | https://lium.io/api/public/v1/nodes |
| OpenAPI schema | https://lium.io/api/openapi.json |
| Per-model price table (min/max live ask, availability, page URL — one row per GPU model, hourly) | https://lium.io/pricing.json — fields on Pricing Pages and Price Feed |
curl -sSL https://lium.io/api/public/v1/nodes
Response
{
"generated_at": "2026-08-17T09:14:03.117Z",
"count": 95,
"nodes": [
{
"id": "ad83de56-8a04-4ab1-ac5a-4ab007b4e2b3",
"gpu_model": "RTX 5090",
"gpu_count": 8,
"available_gpu_count": 8,
"price_per_gpu_hour": 0.55,
"price_per_node_hour": 4.4,
"min_rentable_gpu_count": 8,
"gpu_memory_gb": 32,
"cpu_count": 384,
"ram_gb": 283,
"disk_gb": 2460,
"cpu_model": "AMD EPYC 9654 96-Core Processor",
"network_upload_mbps": 1057.7,
"network_download_mbps": 2535.7,
"uptime_minutes": 4815,
"reliability_score": 97.5,
"disk_type": "nvme",
"tier": "secure",
"country": "Japan",
"country_code": "JP",
"region": "13",
"city": "Tokyo",
"rent_url": "https://lium.io/browse-pods/ad83de56-8a04-4ab1-ac5a-4ab007b4e2b3",
"disk_free_gb": 1435,
"gpu_driver": "570.133.20",
"cuda_driver": "12.8",
"gpu_interconnect": "nvlink",
"region_name": "Tokyo",
"timezone": "Asia/Tokyo"
}
]
}
Fields
| Field | Type | Notes |
|---|---|---|
generated_at | ISO 8601 | When this snapshot was built. Use it to detect a stale source. |
count | integer | Number of nodes in this response. |
id | UUID | Stable identifier for the node. Safe to use as your primary key. |
gpu_model | string, nullable | Normalized name, vendor prefixes stripped — RTX 5090, not NVIDIA GeForce RTX 5090. |
gpu_count | integer, nullable | GPUs on the node. |
available_gpu_count | integer, nullable | GPUs free right now. Always at least 1 — a fully rented node leaves the feed. |
price_per_gpu_hour | float, nullable | USD per GPU per hour. |
price_per_node_hour | float, nullable | USD for the whole node per hour, null when the price is unknown. Published so you never have to derive it. |
min_rentable_gpu_count | integer, nullable | Smallest order we accept on this node. Quoting a single GPU below this number sells an order our checkout refuses. |
gpu_memory_gb | integer, nullable | VRAM per GPU. |
cpu_count | integer, nullable | CPU cores on the whole node; a partial rental gets a proportional share. |
ram_gb | integer, nullable | System RAM of the whole node; a partial rental gets a proportional share. |
disk_gb | integer, nullable | Whole-node disk; a partial rental gets a proportional share. |
cpu_model | string, nullable | CPU model string as the host reports it, at most 128 characters, for example AMD EPYC 9654 96-Core Processor. |
network_upload_mbps | float, nullable | Measured upload speed of the node in Mbps, one decimal. null until Lium has measured it. |
network_download_mbps | float, nullable | Measured download speed of the node in Mbps, one decimal. null until Lium has measured it. |
uptime_minutes | integer, nullable | Minutes Lium has seen this node online, counted 15 per validation cycle since the node was first listed. This is cumulative online time, not the current streak. |
reliability_score | float, nullable | Provider reliability over a rolling 14-day window of rentals other than voluntary spot, 0 to 100 with one decimal, recomputed every 12 hours. It counts penalized rentals and rentals that failed to start because of the provider's node. A failed start does not count when it failed on the renter's own image (building, pulling or running it, or the registry login); when the renter deleted the pod before it started; when it failed on Lium's side before the request reached the node; or when it was a reboot of a pod that had started. It is scored per provider, so every node of one provider carries the same value. The Lium browse page shows the same score rounded to a whole percent. null means the provider had neither a billed rental nor a counted failed start in the window, so there is no score; rank an unscored node as unknown, not as 0. |
disk_type | string, nullable | Kind of disk under the node's container storage, as Lium reads it off the kernel: nvme, ssd, hdd, or unknown when it looked and could not tell (a virtual or stacked device, or an unreadable reading). null until Lium has reported it. Rank an unknown or null node as unknown, not as hdd. |
tier | string, nullable | secure or spot. A spot node may be reclaimed by its provider at any time. |
country, country_code, region, city | string, nullable | Node location; region is the subdivision code. |
rent_url | string | Deep link straight to the rent page for this node. |
disk_free_gb | integer, nullable | Free disk on the whole node at the last scrape; a partial rental gets a proportional share. 0 is a full disk, null means not yet reported. |
gpu_driver | string, nullable | NVIDIA driver build as the host reports it, at most 32 characters, for example 570.133.20. |
cuda_driver | string, nullable | Highest CUDA version the installed driver supports, as major.minor, for example 12.8. Compare as a version, not as a number. |
gpu_interconnect | string, nullable | nvlink when every GPU pair on the node is joined by NVLink, pcie when at least one pair is not. null on a single-GPU node, and until our validator has scraped the topology. |
region_name | string, nullable | Name of the subdivision region is the code of, for example Tokyo for 13. |
timezone | string, nullable | IANA time zone of the node's city, for example Asia/Tokyo. |
Only id and rent_url are guaranteed non-null; treat every other field as optional in your ingester.
Location is published to city level and no finer: postal code and coordinates are not in the feed and will not be added to /public/v1.
Freshness
Lium prices are dynamic — providers set them and they move. The feed is rebuilt at most once per minute, so polling faster than that returns the same snapshot. Once a minute is the right cadence.
Rate limit
60 requests per minute per IP. If you need more, get in touch and we will raise it for your ingester.
Compatibility promise
This feed is a published contract, not an internal endpoint that happens to be reachable. Concretely:
- Fields are only ever added. No field under
/public/v1will be removed or renamed. - A field's meaning never changes. If
price_per_gpu_hourever needed to mean something different, it would become a new field, not a redefinition of this one. - Breaking changes ship as
/public/v2. They never land on/public/v1. - A retired version keeps serving for six months after we publish the deprecation notice, so you have half a year to migrate without an outage.
Fields added so far, newest first:
- 21 Sep 2026:
disk_free_gb,gpu_driver,cuda_driver,gpu_interconnect,region_name,timezone— all nullable; a consumer built against the 12 Sep shape keeps working unchanged. - 19 Sep 2026:
disk_type. - 12 Sep 2026:
cpu_model,network_upload_mbps,network_download_mbps,uptime_minutes,reliability_score.
Build against /public/v1/nodes and it will keep working.
Listing Lium on your site
If you run a GPU price comparison site, marketplace, or agent that provisions compute, this feed is everything you need to list us. Ingest it directly — you get correct prices, real availability, and a deploy link that converts.
Questions about a partnership, a higher rate limit, or a custom field: reach us at lium.io.