Skip to content

Who owns the GPU supply on each marketplace

GET
/public/market-supply
curl --request GET \
--url https://api.flotera.com/api/v1/public/market-supply

Companion to getPublicMarketStats: that one answers “what is happening to GPU economics”, this one answers “who owns the supply” — consumer rig owners, workstation/pro operators, or datacenters. Same public mechanics (no auth, edge caching, CORS *) and the same boundary: aggregates only, never offer books or machine listings.

Every figure names its population, because they are NOT one measurement:

  • reported — the marketplace’s OWN counters across its whole market (Vast, Akash). The consumer/workstation/datacenter split is a proxy by GPU model: consumer GeForce silicon lives in enthusiast rigs, datacenter accelerators live in racks.
  • sample — our own snapshot. For Vast that is the rentable-offer sample over the popular-card catalog (busy machines are invisible there), but it carries the platform’s own host flags — hosting_type and verification — so the datacenter/verified shares are exact host-level facts, not a silicon proxy. For Clore the sample covers the full market including rented machines.
  • RunPod publishes no counts at all; inventing shares out of the number of listed models would be a lie, so it gets exactly that: a count of listed model classes per silicon class.

A missing denominator yields null, never zero: “no share computable” and “zero datacenter hosts” are different answers.

Supply composition per market source.

Media typeapplication/json
object
generated_at
required

RFC 3339 UTC with microsecond precision.

string format: date-time
sources
required
Array<object>
<= 8 items
object
marketplace
required

A market DATA source — a superset of MarketplaceName. Tier-B venues (tensordock, runpod, akash) feed the price index only: no accounts, no listings, no rentals — see infrastructure/26-market-intelligence.md §3. Execution paths (accounts, links, offers) keep MarketplaceName; a tier-B name is never valid there.

string
Allowed values: vast clore tensordock runpod akash
reported

The venue’s own counters across its whole market. Absent when the venue publishes none.

object
gpu_total
required

Cards across the venue’s whole market, their count.

integer
gpu_available
integer
nullable
classes
required
Array<object>
<= 3 items
object
silicon
required

Owner-type proxy by GPU model: consumer GeForce lives in enthusiast rigs, datacenter accelerators live in racks, workstation cards sit in between.

string
Allowed values: consumer workstation datacenter
gpu_count
required
integer
gpu_share

Decimal string or null when unknown.

string | null
/^-?[0-9]+(\.[0-9]{1,6})?$/
busy_share

Busy share of the class, weighted by each model’s market size. Null when the venue reports no usage for any model of the class.

string | null
/^-?[0-9]+(\.[0-9]{1,6})?$/
machine_count

Machines of the class — only where the sample counts machines (Clore).

integer
nullable
sample

Our own snapshot; population names what it covers. Absent when we hold no offer sample for the venue.

object
population
required

What the snapshot covers — e.g. Vast: available offers over the popular-card catalog (busy machines are invisible there); Clore: the full market snapshot including rented machines. Shares below describe THIS population, not the whole venue.

string
<= 128 characters
host_count
integer
nullable
machine_count
integer
nullable
gpu_count
integer
nullable
datacenter_host_share

Hosts the venue itself flags as datacenter (hosting_type) — an exact host-level fact, not a silicon proxy.

string | null
/^-?[0-9]+(\.[0-9]{1,6})?$/
verified_host_share

Decimal string or null when unknown.

string | null
/^-?[0-9]+(\.[0-9]{1,6})?$/
verified_datacenter_host_share

Decimal string or null when unknown.

string | null
/^-?[0-9]+(\.[0-9]{1,6})?$/
busy_gpu_share

Rented cards among those whose state the venue disclosed.

string | null
/^-?[0-9]+(\.[0-9]{1,6})?$/
classes
Array<object>
<= 3 items
object
silicon
required

Owner-type proxy by GPU model: consumer GeForce lives in enthusiast rigs, datacenter accelerators live in racks, workstation cards sit in between.

string
Allowed values: consumer workstation datacenter
gpu_count
required
integer
gpu_share

Decimal string or null when unknown.

string | null
/^-?[0-9]+(\.[0-9]{1,6})?$/
busy_share

Busy share of the class, weighted by each model’s market size. Null when the venue reports no usage for any model of the class.

string | null
/^-?[0-9]+(\.[0-9]{1,6})?$/
machine_count

Machines of the class — only where the sample counts machines (Clore).

integer
nullable
listed_model_counts

For venues that publish no counts at all (RunPod): how many listed model classes fall into each silicon class. A count of models, NOT a supply share — shares invented from it would lie.

object
consumer
required
integer
workstation
required
integer
datacenter
required
integer
Example
{
"generated_at": "2026-07-25T10:15:30.123456Z",
"sources": [
{
"marketplace": "vast",
"reported": {
"classes": [
{
"silicon": "consumer"
}
]
},
"sample": {
"classes": [
{
"silicon": "consumer"
}
]
}
}
]
}