corpusAI Cloud Pricing API
corpusAI: event-level spot price history for AWS, GCP and Azure, paid per call in USDC over x402.
Machine-readable: openapi.json · docs.md · llms.txt · agent card
Every spot price change collected directly from the provider APIs (EC2 DescribeSpotPriceHistory, GCP Capacity Advisor, Azure Resource Graph), stored as immutable events with the exact timestamp, availability zone and product, plus the full legacy history behind the dashboard: AWS daily back to 2022-05 (measured, with open/high/low/close), daily averages back to 2024 (SpotLake TITANS, all providers), and AWS monthly back to 2014 (USC/ISI archive). Every row names its source. Endpoints return raw events, hourly bars, stitched daily and monthly series across all eras, the current price per zone, whole-provider snapshots and region-level file exports, on-demand and reserved-instance list-price history, Azure eviction-rate history, and GPU rental quotes from neo-clouds and marketplaces (RunPod, Vast.ai, DataCrunch, Lambda, Vultr, Linode, Oracle) normalised to USD per GPU-hour with hyperscaler spot beside them. The free public dashboard at https://tools.traversa.dev/cloud-pricing shows one daily average per instance for the trailing 90 days (weekly for a year, monthly beyond); this API is the full-precision, per-zone tier behind it. Built and operated by corpusAI (https://www.trycorpus.ai), software that outlives its owners.
https://cloud.trycorpus.ai/v10x3f60008Dfd0EfC03F476D9B489D6C5B13B3eBF2CSoftware that outlives its owners. Built and operated by corpusAI.
Spot price history for AWS, GCP and Azure at every depth: price-change events since 2026, daily series since 2022 (AWS) / 2024 (all providers), monthly since 2014 (legacy AWS types). Sold per call in USDC over x402 with settlement through Circle Gateway. No signup, no API key: an unpaid request answers 402 Payment Required with the payment requirements, an x402-capable client pays and retries.
- Base URL:
https://cloud.trycorpus.ai/v1 - OpenAPI 3.1:
https://cloud.trycorpus.ai/openapi.json - Prices: 0.010000 USDC per call for events, hourly bars, single-type latest price, on-demand and reserved history of a type, and Azure eviction; 0.050000 USDC for the full daily or monthly spot history of a type; 0.100000 USDC for a whole-region snapshot (spot, on-demand or reserved); bulk: 1.00 USDC for every region of a provider, 3.00 USDC for a region's legacy history file, 0.50 USDC for a region-day of raw events. Discovery endpoints are free.
- Free dashboard (daily averages, precision decays with age):
https://tools.traversa.dev/cloud-pricing - Contact: julian@traversa.dev · trycorpus.ai
Quick start for agents
MCP server (Claude Code, Claude Desktop, Cursor, any MCP client), published as corpus-cloud-pricing-mcp:
claude mcp add corpus-cloud-pricing -e CORPUS_PAYER_KEY=0x... -- npx -y corpus-cloud-pricing-mcp
Free tools work without a key; paid tools pay automatically from the payer wallet's Circle Gateway balance (npx corpus-cloud-pricing-mcp deposit 2.00 to fund it once). Or call the API directly:
# 1. What exists? (free)
curl -s "https://cloud.trycorpus.ai/v1/catalog"
curl -s "https://cloud.trycorpus.ai/v1/instances?provider=aws®ion=us-east-1&prefix=c5."
# 2. An unpaid paid call returns 402 with x402 v2 requirements (header + body)
curl -si "https://cloud.trycorpus.ai/v1/spot/events?provider=aws®ion=us-east-1&instance=c5.large"
# 3. Pay with the Circle CLI (any Gateway-supported network listed in accepts[])
circle services inspect "https://cloud.trycorpus.ai/v1/spot/events?provider=aws®ion=us-east-1&instance=c5.large"
circle services pay "https://cloud.trycorpus.ai/v1/spot/events?provider=aws®ion=us-east-1&instance=c5.large" \
-X GET --address <your-wallet> --chain <CHAIN-FROM-INSPECT> --max-amount 0.010000 --output json
# (use --max-amount 0.050000 for /spot/daily and /spot/monthly, 0.100000 for /spot/snapshot)
Any x402 v2 client works (@circle-fin/x402-batching GatewayClient, @x402/fetch, the Circle CLI). Payment is verified and settled before the handler runs; a 400 or 404 is never charged.
Endpoints
| Method | Path | Cost | What |
|---|---|---|---|
| GET | /health | free | liveness + ready flag |
| GET | /catalog | free | providers, region slugs, coverage window, event counts |
| GET | /instances?provider®ion[&prefix] | free | exact instance type names in a region |
| GET | /spot/events?provider®ion&instance[&from&to&az&product&include_repeats&limit] | 0.010000 | raw price-change events |
| GET | /spot/hourly?provider®ion&instance[&from&to] | 0.010000 | hourly time-weighted OHLC bars |
| GET | /spot/daily?provider®ion&instance[&from&to] | 0.050000 | full daily history, all eras stitched, source per row |
| GET | /spot/monthly?provider®ion&instance[&from&to&include_archive] | 0.050000 | full monthly history back to 2014 (AWS legacy types) |
| GET | /spot/latest?provider®ion&instance | 0.010000 | price currently in force per (zone, product) for one type |
| GET | /spot/snapshot?provider®ion | 0.100000 | current price of every type, zone and product in a region |
| GET | /azure/eviction?region[&sku&from&to] | 0.010000 | Azure 28-day eviction-rate buckets, daily samples |
| GET | /spot/snapshot/all?provider | 1.00 | current spot price of every type and zone in every region of a provider |
| GET | /spot/export/history?provider®ion | 3.00 | gzip TSV: legacy daily + monthly history of every type in a region |
| GET | /spot/export/events?provider®ion&date | 0.50 | gzip TSV: every raw event of a region for one UTC day |
| GET | /ondemand?provider®ion&instance | 0.010000 | on-demand list-price change history of one type |
| GET | /ondemand/snapshot?provider®ion | 0.100000 | current on-demand list price of every type in a region |
| GET | /reserved?region&instance[&provider&ri_type] | 0.010000 | reserved effective hourly price history: AWS RIs (1y/3y, no/all upfront), Azure reservations |
| GET | /reserved/snapshot?region[&provider] | 0.100000 | current reserved prices of every type and ri_type in a region |
| GET | /gpu/models | free | GPU models with rental quotes and the providers quoting them |
| GET | /gpu/quotes?gpu[&provider&market] | 0.010000 | latest rental quotes for one GPU model across neo-clouds and marketplaces |
| GET | /gpu/index?gpu[&from&to] | 0.050000 | daily lo/median/mean/hi per provider and market, with aws-spot / gcp-spot legs |
| GET | /gpu/snapshot | 0.100000 | every GPU × provider × market in one call |
| GET | /index/tickers | free | every index ticker with segment definitions |
| GET | /index/fixing?ticker[&day] | 0.010000 | one day's fixing: median, low, high, count |
| GET | /index/history?ticker[&from&to] | 0.050000 | daily fixings; SPOT tickers back to 2022 |
| GET | /index/board[?day] | 0.100000 | every ticker's fixing for a day |
| GET | /status | free | freshness of every source |
| GET | /capacity/stress?gpu&day | 0.010000 | capacity stress score, 0 slack to 100 tight, with components |
| GET | /capacity/history?gpu&from&to | 0.050000 | daily stress scores for one GPU |
| GET | /capacity/board?day | 0.100000 | every GPU's score for one day, tightest first |
| GET | /tokens/models | free | every LLM with a token price fixing, ticker codes, today's range |
| GET | /tokens/quotes?model&day | 0.010000 | every source and host's price for one model, USD per million tokens |
| GET | /tokens/fixing?ticker&day | 0.010000 | one day's fixing, CX.TOK.<MODEL>.IN, .OUT or .BLEND |
| GET | /tokens/history?ticker&from&to | 0.050000 | daily fixings for a token ticker |
| GET | /tokens/board?day | 0.100000 | every model's input, output and blended fixing plus the frontier basket |
| GET | /term/instance?provider®ion&instance | 0.010000 | price ladder: spot, on-demand, 1y, 3y with discounts |
| GET | /term?gpu | 0.050000 | term structure per hyperscaler for a GPU, USD per GPU-hour |
Parameters are query strings. provider is aws, gcp or azure; region and instance must match /catalog and /instances exactly. Times are ISO 8601 UTC (from inclusive, to exclusive). Prices are USD per hour.
Eras and sources
Every daily and monthly row carries a source. /catalog returns the same legend as sources.
| source | What | Window | Standing |
|---|---|---|---|
direct | price-change events pulled daily from the provider APIs; the only source with zones, timestamps and intraday range | AWS from 2026-06-06, GCP from 2026-04-08, Azure from 2025-07 (per SKU) | measured |
titans | SpotLake TITANS daily sample average (the dashboard's dense series) | AWS 2024-02 to 2026-06-05, GCP 2024-01 to 2026-04-07, Azure until each SKU's first direct event | third-party daily average, no range |
pauley | AWS raw price-change events (Pauley dataset, CC-BY) time-weighted per day, Linux/UNIX; open/high/low/close on days the price moved | 2022-05-31 to 2024-01-31 | measured |
uscisi-adjusted | USC/ISI monthly archive divided by a per-instance factor fitted on the 2022-2023 overlap; only the ~23 types per region with a stable factor | 2017 to 2022-04 | estimated |
archive | USC/ISI monthly spot dataset as published, open/high/low/close, 51 legacy AWS types per region | 2014-02 to 2023-12 | third-party; averages mix OS products and some rows' origin could not be verified; returned separately by /spot/monthly, never blended |
/spot/daily returns legacy rows up to the day before the type's first direct event (direct_from) and derived bars from then on. /spot/monthly returns uscisi-adjusted months, then months rolled up from the daily series, and the raw archive alongside. /spot/events, /spot/hourly, /spot/latest and /spot/snapshot are direct only. The free dashboard shows daily averages for the trailing 90 days, weekly for the trailing year and monthly beyond; the API is where the full-precision history lives.
Bulk products
The per-type calls suit targeted questions. For whole-region or whole-provider work use the bulk products: /spot/snapshot/all returns every region of a provider in one JSON response; /spot/export/history streams the store's own legacy-history file for a region (all types, daily and monthly rows with their source, about 10 MB gzip for an AWS region; only the original three regions per provider have one); /spot/export/events streams one region-day of raw events exactly as collected (every type, zone and repeat). Pulling a region's whole direct-era history is therefore one events call per day.
Index fixings
/index/* turn the quotes into citable numbers. A ticker is CX.<MODEL>.<SEGMENT>: CX.H100SXM.NEO is the neo-cloud on-demand median for H100 SXM, CX.H100SXM.SPOT the hyperscaler spot composite, and CX.H100SXM.SPOT.US-EAST-1 one region. Segments: MKT marketplace, NEO neo-cloud on-demand, INT interruptible, HYP hyperscaler on-demand, SPOT hyperscaler spot. Every fixing carries the methodology version; the method (eligibility, median aggregation, instance mapping, timing, revisions) is published at /methodology. SPOT histories reach back to 2022 for A100, V100, T4 and A10 and to 2023 for H100, from measured AWS data.
Capacity stress
A daily 0 to 100 tightness score per GPU model built from signals the feed already holds: the share of Shadeform and Lambda listings flagged available, deployable versus total units on io.net, Vast.ai on-demand offers against their trailing 30-day median, and the hyperscaler spot-to-on-demand ratio (spot converges on on-demand when capacity is scarce). The score is the mean of the components present that day and every component is returned with its inputs. History starts 2026-09-13.
LLM token prices
One snapshot a day from four public sources: the OpenRouter catalog, OpenRouter's per-host endpoints for twenty index models (the same model priced by Azure, Amazon Bedrock, Google, Together, DeepInfra and others), the LiteLLM price table, and DeepInfra's model list. Prices are USD per million tokens. A model's fixing is the median across every source and host at the standard tier; batch and free variants are stored but excluded from fixings. Tickers are CX.TOK.<MODELCODE>.IN, .OUT and .BLEND where BLEND is the 3:1 input:output blend, plus CX.TOK.FRONTIER.* for the median across the frontier basket listed by /tokens/models. History starts 2026-09-14.
Term structure
/term/instance returns one instance type's ladder from no commitment to three years: the current spot median across zones, the on-demand list price, and each reserved or reservation term as an effective hourly price with any upfront amortised, plus the discount to on-demand. /term?gpu= does the same per GPU-hour for every hyperscaler with a mapped instance family, taking the median across regions. AWS carries four committed terms (1y/3y × no/all upfront), Azure two (1y/3y all upfront), GCP two resource-based committed-use terms (cud_1y, cud_3y, no upfront) built from the Billing Catalog. Neo-cloud commitment prices are quote-only on their sites and are not included.
GPU rental market
/gpu/* cover the GPU rental market outside the big three: RunPod (secure and community tiers, spot), Vast.ai (marketplace: the cheapest 64 on-demand and bid offers per model, with host reliability and verification), DataCrunch (on-demand and spot), Lambda, Vultr, Linode and Oracle Cloud list prices. Quotes are taken from each provider's public price feed once a day and normalised to USD per GPU-hour under a common model name (/gpu/models). /gpu/index puts hyperscaler spot beside them: rows with provider aws-spot, gcp-spot or azure-spot are our own spot price events for the instance family that carries the GPU (for example H100 SXM ↔ p5.48xlarge, 8 GPUs), divided by GPUs per node, per region. Quote history starts 2026-09-13; the hyperscaler legs reach back to the start of the event data.
List prices (on-demand and reserved)
/ondemand and /reserved are change-point series: a row is a day the list price changed and the last row is the price in force. AWS on-demand and reserved prices come from the AWS Price List API, refreshed weekly, for the same 13 regions as spot; reserved history reaches back to 2016 in the original three regions. Azure on-demand and reservation prices come from Microsoft's public Retail Prices API for every Linux VM SKU in the 9 Azure regions, refreshed daily since 2026-09-13 (/reserved?provider=azure). ri_type values: ri_1y_no_upfront_standard, ri_1y_all_upfront_standard, ri_3y_no_upfront_standard, ri_3y_all_upfront_standard, all standard class, Linux, shared tenancy, with upfront amortised over the term. GCP and Azure on-demand series are the TITANS-era feed (2024 to 2026-08) and are not refreshed yet; /catalog shows per-region coverage under ondemand and reserved.
Data semantics
- Events are price changes, not samples. A price holds from its
tsuntil the next event in the same(instance, az, product)series. AWS reprices roughly 3.5 times a day per type and zone; GCP about 9 times a year; Azure monthly. azis the AWS zone id (use1-az1), the GCP region name, or the Azure region name (eastus).productis the OS/product string the price applies to (Linux/UNIX,Spot,Linux, ...).- Bars (
/spot/hourly,directrows of/spot/daily) weight each price by how long it was in force, per zone, then collapse zones:open/close/avgare the median across zones,highthe max,lowthe min,durthe seconds covered. A final price is carried forward at most 10 days (AWS) or 400 days (GCP, Azure), so a retired type does not grow a flat tail.avgis exactly the public dashboard value; the other fields exist only here. /spot/latestand/spot/snapshotreturn the newest event of every series. Checkage_seconds: an AWS series older than ~10 days is probably retired.- Coverage (see
/catalogfor the live list and first/last dates): 13 AWS regions, 8 GCP regions and 9 Azure regions. The original three per cloud (AWS us-east-1, us-west-2, eu-west-1; GCP us-central1, us-east4, europe-west4; Azure us-easteastus, us-west-2westus2, eu-westwesteurope) carry event-level data from 2026-06-06 (AWS), 2026-04 (GCP), 2025-07 (Azure), daily history from 2022-05-31 (AWS) and 2024 (GCP, Azure), and monthly from 2014-02 (51 legacy AWS types). Regions added in September 2026 start from their first collection day (the providers expose at most 90 days back, so there is no deeper backfill). Eviction samples from 2026-09-05. Collection runs daily at 03:17 UTC and the store is refreshed shortly after. - Limits:
/spot/eventsreturns at mostlimitrows (max 10000); whentruncatedis true continue fromnext_from. Hourly windows are capped at 366 days.
Pay with a key
The same endpoints, the same prices, without a wallet. A prepaid key (ck_live_…) sent as X-Api-Key is charged the per-call price from its USD balance; every response carries X-Charge-USD and X-Balance-USD, and GET /v1/account (with the key) returns the balance, the last 31 days of usage and the last credits. A key with no balance left gets a 402 with the price and the balance; an unknown or expired key gets 401.
Getting a key: write to julian@traversa.dev and we send one, or a trial key with a small balance. Topping up: GET /v1/billing/packs lists the credit packs ($25 buys $25, $100 buys $110, $500 buys $575 of calls); opening /v1/billing/topup?pack=100 with your key opens a card checkout, and the balance is credited the moment the payment completes.
Payment details
An unpaid request to a paid path returns:
HTTP/1.1 402 Payment Required
PAYMENT-REQUIRED: <base64 JSON, same as the body>
Content-Type: application/json
{"x402Version":2,"resource":{...},"accepts":[{"scheme":"exact","network":"eip155:8453","asset":"<USDC>","amount":"10000","payTo":"<seller>","extra":{...}}, ...]}
accepts[] lists every network accepted; pay on any one of them. Payments are signed off-chain (EIP-712 authorisations on a Circle Gateway balance, gasless) and settled in batches by Circle Gateway. Amounts are USDC atomic units (6 decimals).
Errors
| Status | Meaning | Charged? |
|---|---|---|
| 400 | bad or missing parameter | no |
| 402 | payment required (see above) | no |
| 404 | unknown region / instance | no |
| 503 | store warming up after a restart, retry in a minute | no |
Endpoint reference
Generated from the OpenAPI document. All operations are GET with query parameters.
GET/healthfree
Liveness and store readiness (free). Returns 200 whenever the server is up. ready is false while the store is still ingesting after a restart; paid endpoints answer 503 (and take no payment) until it is true.
Responses: 200 · 200 body: Health
GET/catalogfree
Providers, regions, coverage window and event counts (free). One row per (provider, region) with raw-event coverage (instance types, events, first/last event) and legacy-history coverage (daily and monthly date ranges), plus sources, the legend explaining every source value returned by /spot/daily and /spot/monthly. Use the region values here verbatim in every other call.
Responses: 200, 503 · 200 body: Catalog
GET/instancesfree
Instance types available in a region (free). Exact type names with per-type coverage: raw events (events, first_event, last_event; zero/null for types that only exist in the legacy history) and legacy history ranges (history_daily_from/to, history_monthly_from/to). Optional prefix narrows the list (for example c5. or n2-).
| Parameter | Type | Req. | Description |
|---|---|---|---|
provider | string · aws | gcp | azure | yes | Cloud provider. One of aws, gcp, azure. |
region | string | yes | Region slug as listed by /catalog (for example us-east-1 for AWS, us-central1 for GCP, us-east for Azure). Azure slugs map to eastus, westus2, westeurope. |
prefix | string | Case-sensitive prefix filter on the type name. |
Responses: 200, 400, 404, 503 · 200 body: InstanceList
GET/spot/events0.01 USDC
Raw spot price-change events for one instance type. Every price change for the type in the window, with exact timestamp, availability zone and product (OS). Sorted by time. Repeated identical prices are dropped by default (include_repeats=true keeps them). Up to limit rows; when truncated is true, continue with from = next_from.
| Parameter | Type | Req. | Description |
|---|---|---|---|
provider | string · aws | gcp | azure | yes | Cloud provider. One of aws, gcp, azure. |
region | string | yes | Region slug as listed by /catalog (for example us-east-1 for AWS, us-central1 for GCP, us-east for Azure). Azure slugs map to eastus, westus2, westeurope. |
instance | string | yes | Instance / machine / SKU type name exactly as listed by /instances (for example c5.large, n2-standard-4, D2s_v5). |
from | string · date-time | Start of the window (inclusive), ISO 8601 UTC. Default: 7 days before to. | |
to | string · date-time | End of the window (exclusive), ISO 8601 UTC. Default: now. | |
az | string | Restrict to one availability zone / zone id (for example use1-az1). Default: all zones. | |
product | string | Restrict to one product / OS string (for example Linux/UNIX, Spot, Linux). Default: all. | |
include_repeats | boolean | Keep events whose price equals the previous event of the same (az, product) series. Default false. | |
limit | integer | Maximum rows to return (1 to 10000). Default 5000. |
Responses: 200, 400, 402, 404, 503 · 200 body: EventList
GET/spot/hourly0.01 USDC
Hourly time-weighted OHLC bars for one instance type. Per-zone series are bucketed by UTC hour with time weighting (a price counts for as long as it was in force), then collapsed across zones: open/close/avg are the median across zones, high is the max, low is the min. Window is capped at 366 days.
| Parameter | Type | Req. | Description |
|---|---|---|---|
provider | string · aws | gcp | azure | yes | Cloud provider. One of aws, gcp, azure. |
region | string | yes | Region slug as listed by /catalog (for example us-east-1 for AWS, us-central1 for GCP, us-east for Azure). Azure slugs map to eastus, westus2, westeurope. |
instance | string | yes | Instance / machine / SKU type name exactly as listed by /instances (for example c5.large, n2-standard-4, D2s_v5). |
from | string · date-time | Start of the window (inclusive), ISO 8601 UTC. Default: 30 days before to. | |
to | string · date-time | End of the window (exclusive), ISO 8601 UTC. Default: now. |
Responses: 200, 400, 402, 404, 503 · 200 body: HourlyBars
GET/spot/daily0.05 USDC
Full daily history for one instance type, all eras stitched. One row per UTC day from the earliest data for the type to now. Rows dated before the type's first raw event come from the legacy history (source = pauley: measured 2022-05 to 2024-01 AWS, open/high/low/close present on days the price moved; titans: daily average only, 2024 to 2026). Rows from direct_from on are time-weighted, zone-collapsed bars from the raw event store (source = direct, same method as /spot/hourly; avg equals the public dashboard value). open/high/low/close are null where the source only has an average.
| Parameter | Type | Req. | Description |
|---|---|---|---|
provider | string · aws | gcp | azure | yes | Cloud provider. One of aws, gcp, azure. |
region | string | yes | Region slug as listed by /catalog (for example us-east-1 for AWS, us-central1 for GCP, us-east for Azure). Azure slugs map to eastus, westus2, westeurope. |
instance | string | yes | Instance / machine / SKU type name exactly as listed by /instances (for example c5.large, n2-standard-4, D2s_v5). |
from | string · date-time | Start of the window (inclusive), ISO 8601 UTC. Default: the earliest row for the type. | |
to | string · date-time | End of the window (exclusive), ISO 8601 UTC. Default: now. |
Responses: 200, 400, 402, 404, 503 · 200 body: DailyBars
GET/spot/monthly0.05 USDC
Full monthly history for one instance type, back to 2014 for legacy AWS types. Calendar months from the earliest data to now. months is the curated series: uscisi-adjusted months (2017 to 2022-04, AWS types with a stable correction factor, average only), then months rolled up from the daily series (pauley, titans, direct: avg = median of daily averages, open/close from the first/last day, high/low the extremes, days = days covered, source = the source covering most days). archive (AWS, default on) is the USC/ISI monthly dataset 2014-02 to 2023-12 as published, with open/high/low/close, for 51 legacy types: third-party, mixes OS products, provenance partly unverified; returned separately so it never silently blends into the curated series.
| Parameter | Type | Req. | Description |
|---|---|---|---|
provider | string · aws | gcp | azure | yes | Cloud provider. One of aws, gcp, azure. |
region | string | yes | Region slug as listed by /catalog (for example us-east-1 for AWS, us-central1 for GCP, us-east for Azure). Azure slugs map to eastus, westus2, westeurope. |
instance | string | yes | Instance / machine / SKU type name exactly as listed by /instances (for example c5.large, n2-standard-4, D2s_v5). |
from | string · date | First month (inclusive), YYYY-MM-DD (use the 1st). Default: earliest. | |
to | string · date | Last month (inclusive), YYYY-MM-DD. Default: latest. | |
include_archive | boolean | Include the raw USC/ISI archive rows in archive. Default true. |
Responses: 200, 400, 402, 404, 503 · 200 body: MonthlySeries
GET/spot/latest0.01 USDC
Price currently in force per zone and product for one instance type. The most recent event of every (zone, product) series of the type, with its timestamp and age. A price is only meaningful while the provider still offers the type; AWS series older than ~10 days are likely retired, GCP/Azure reprice rarely so old timestamps are normal. For every type in a region at once use /spot/snapshot.
| Parameter | Type | Req. | Description |
|---|---|---|---|
provider | string · aws | gcp | azure | yes | Cloud provider. One of aws, gcp, azure. |
region | string | yes | Region slug as listed by /catalog (for example us-east-1 for AWS, us-central1 for GCP, us-east for Azure). Azure slugs map to eastus, westus2, westeurope. |
instance | string | yes | Instance / machine / SKU type name exactly as listed by /instances (for example c5.large, n2-standard-4, D2s_v5). |
Responses: 200, 400, 402, 404, 503 · 200 body: LatestList
GET/spot/snapshot0.10 USDC
Current price of every instance type, zone and product in a whole region, in one call. Bulk snapshot: the most recent event of every series in the region (about 6,000 rows for an AWS region), with timestamp and age per row. Same semantics as /spot/latest. Priced higher because one call returns the entire current price surface of the region.
| Parameter | Type | Req. | Description |
|---|---|---|---|
provider | string · aws | gcp | azure | yes | Cloud provider. One of aws, gcp, azure. |
region | string | yes | Region slug as listed by /catalog (for example us-east-1 for AWS, us-central1 for GCP, us-east for Azure). Azure slugs map to eastus, westus2, westeurope. |
Responses: 200, 400, 402, 404, 503 · 200 body: LatestList
GET/spot/snapshot/all1.00 USDC
Current spot price of every type and zone in every region of a provider, in one call. Same rows as /spot/snapshot, for all regions of the provider (about 80,000 rows for AWS). regions lists each region with its as-of time.
| Parameter | Type | Req. | Description |
|---|---|---|---|
provider | string · aws | gcp | azure | yes | Cloud provider. One of aws, gcp, azure. |
Responses: 200, 400, 402, 503 · 200 body: ProviderSnapshot
GET/spot/export/history3.00 USDC
Legacy daily and monthly history of every type in a region as one gzip TSV file. Columns: instance, res (daily|monthly), date, open, high, low, close, avg, source. Covers the pauley, titans, uscisi-adjusted and archive eras for the region (the same rows /spot/daily and /spot/monthly serve before a type's first raw event). Only the original three regions per provider have legacy history; other regions answer 404. Pair with /spot/export/events for the direct era. About 10 MB for an AWS region.
| Parameter | Type | Req. | Description |
|---|---|---|---|
provider | string · aws | gcp | azure | yes | Cloud provider. One of aws, gcp, azure. |
region | string | yes | Region slug as listed by /catalog (for example us-east-1 for AWS, us-central1 for GCP, us-east for Azure). Azure slugs map to eastus, westus2, westeurope. |
Responses: 200, 400, 402, 404, 503 · 200 body: application/gzip
GET/spot/export/events0.50 USDC
Every raw spot price-change event of a region for one UTC day, as a gzip TSV file. Columns: ts (ISO 8601), az, instance, product, price. The exact file the store ingests: every type and zone, repeats included. About 25,000 rows / 170 KB for a large AWS region-day. Use /catalog for the covered window.
| Parameter | Type | Req. | Description |
|---|---|---|---|
provider | string · aws | gcp | azure | yes | Cloud provider. One of aws, gcp, azure. |
region | string | yes | Region slug as listed by /catalog (for example us-east-1 for AWS, us-central1 for GCP, us-east for Azure). Azure slugs map to eastus, westus2, westeurope. |
date | string · date | yes | UTC day, YYYY-MM-DD. |
Responses: 200, 400, 402, 404, 503 · 200 body: application/gzip
GET/ondemand0.01 USDC
On-demand list-price history of one instance type. Change-point series: one row per day the on-demand (pay-as-you-go) hourly list price changed; current is the price in force. AWS: Linux, shared tenancy, from the AWS Price List API, refreshed weekly, since 2024-01 (13 regions). Azure: every Linux VM SKU from the public Retail Prices API, refreshed daily, since 2026-09-13 (9 regions). GCP: the TITANS-era series (2024 to 2026-08), not refreshed.
| Parameter | Type | Req. | Description |
|---|---|---|---|
provider | string · aws | gcp | azure | yes | Cloud provider. One of aws, gcp, azure. |
region | string | yes | Region slug as listed by /catalog (for example us-east-1 for AWS, us-central1 for GCP, us-east for Azure). Azure slugs map to eastus, westus2, westeurope. |
instance | string | yes | Instance / machine / SKU type name exactly as listed by /instances (for example c5.large, n2-standard-4, D2s_v5). |
Responses: 200, 400, 402, 404, 503 · 200 body: OnDemandHistory
GET/ondemand/snapshot0.10 USDC
Current on-demand list price of every instance type in a region.
| Parameter | Type | Req. | Description |
|---|---|---|---|
provider | string · aws | gcp | azure | yes | Cloud provider. One of aws, gcp, azure. |
region | string | yes | Region slug as listed by /catalog (for example us-east-1 for AWS, us-central1 for GCP, us-east for Azure). Azure slugs map to eastus, westus2, westeurope. |
Responses: 200, 400, 402, 404, 503 · 200 body: OnDemandSnapshot
GET/reserved0.01 USDC
Reserved / reservation price history of one instance type (AWS standard RIs 1y/3y no-upfront/all-upfront; Azure reservations 1y/3y). Effective hourly USD with any upfront amortised over the term, as change-point series per ri_type (ri_1y_no_upfront_standard, ri_1y_all_upfront_standard, ri_3y_no_upfront_standard, ri_3y_all_upfront_standard; GCP cud_1y, cud_3y). AWS: Linux, shared tenancy, history back to 2016 for the original three regions, weekly refresh from the AWS Price List API. Azure: all-upfront reservations from the public Retail Prices API, daily, since 2026-09-13. GCP: resource-based committed-use discounts from the Cloud Billing Catalog (vCPU, RAM and GPU commitment SKUs), daily, since 2026-09-13.
| Parameter | Type | Req. | Description |
|---|---|---|---|
provider | string · aws | azure | gcp | Provider: aws (default), azure or gcp. | |
region | string | yes | Region slug (for example us-east-1, us-east for Azure, us-central1 for GCP). |
instance | string | yes | Instance / machine / SKU type name exactly as listed by /instances (for example c5.large, n2-standard-4, D2s_v5). |
ri_type | string · ri_1y_no_upfront_standard | ri_1y_all_upfront_standard | ri_3y_no_upfront_standard | ri_3y_all_upfront_standard | cud_1y | cud_3y | Restrict to one ri_type. |
Responses: 200, 400, 402, 404, 503 · 200 body: ReservedHistory
GET/reserved/snapshot0.10 USDC
Current reserved effective hourly price of every instance type and ri_type in a region (AWS or Azure).
| Parameter | Type | Req. | Description |
|---|---|---|---|
provider | string · aws | azure | gcp | Provider: aws (default), azure or gcp. | |
region | string | yes | Region slug (for example us-east-1, us-east for Azure, us-central1 for GCP). |
Responses: 200, 400, 402, 404, 503 · 200 body: ReservedSnapshot
GET/gpu/modelsfree
GPU models with rental quotes, and which providers quote them (free). Normalised model names (use verbatim as gpu), number of providers quoting each, quote counts, first/last snapshot day, the lowest observed USD per GPU-hour, and which hyperscaler spot instance families map to the model.
Responses: 200, 503 · 200 body: GpuModels
GET/gpu/quotes0.01 USDC
Latest rental quotes for one GPU model across neo-clouds, marketplaces and other clouds. One row per quote in each provider's latest daily snapshot: provider, market (ondemand, spot = interruptible, bid = marketplace minimum bid, secure/community = RunPod tiers), GPUs in the quoted unit, USD per GPU-hour, quoted unit price, region where the provider exposes one, and provider-specific detail in extra (marketplace host reliability, VRAM, stock status). Sources: RunPod GraphQL, Vast.ai marketplace (cheapest 64 offers per model, on-demand and bid), DataCrunch, Lambda, Vultr, Linode, Oracle Cloud list prices. Snapshots are taken daily.
| Parameter | Type | Req. | Description |
|---|---|---|---|
gpu | string | yes | Normalised GPU model from /gpu/models, e.g. H100 SXM, H200, B200, A100 SXM 80GB, L40S, RTX 4090. |
provider | string | Restrict to one provider (runpod, vast, datacrunch, lambda, vultr, linode, oci). | |
market | string | Restrict to one market (ondemand, spot, bid, secure, community). |
Responses: 200, 400, 402, 404, 503 · 200 body: GpuQuotes
GET/gpu/index0.05 USDC
Daily USD per GPU-hour index per provider and market for one GPU model, with hyperscaler spot legs. For each snapshot day and (provider, market): number of quotes and the lowest, median, mean and highest USD per GPU-hour. Rows with provider aws-spot or gcp-spot are computed from our own spot price events for the instance family that carries the GPU (time-weighted daily bar divided by GPUs per node, per region), so the neo-cloud market and hyperscaler spot are comparable in one series. Quote history starts 2026-09-13; hyperscaler spot legs reach back to the start of our event data.
| Parameter | Type | Req. | Description |
|---|---|---|---|
gpu | string | yes | Normalised GPU model from /gpu/models. |
from | string · date | First day (inclusive), YYYY-MM-DD. Default: earliest. | |
to | string · date | Last day (inclusive), YYYY-MM-DD. Default: latest. |
Responses: 200, 400, 402, 404, 503 · 200 body: GpuIndex
GET/gpu/snapshot0.10 USDC
Every GPU model × provider × market: lowest and median USD per GPU-hour in the latest snapshot, plus hyperscaler spot per region.
Responses: 200, 402, 503 · 200 body: GpuSnapshot
GET/statusfree
Freshness of every data source (free). Per source: last successful snapshot or event, staleness in days, and the public URL it is read from. Use it to decide whether a fixing or quote is current before paying for it.
Responses: 200 · 200 body: application/json
GET/index/tickersfree
Every index ticker, its segment and definition (free). Tickers are CX.<MODEL>.<SEGMENT> (for example CX.H100SXM.NEO) or CX.<MODEL>.SPOT.<REGION>. Includes the segment membership lists and the methodology version.
Responses: 200, 503 · 200 body: Tickers
GET/index/fixing0.01 USDC
One day's fixing for a ticker: median USD per GPU-hour of eligible quotes, with low, high and count. Quote segments (MKT, NEO, INT, HYP) fix from that day's snapshots; the default day is the latest snapshot. SPOT fixes from the full UTC day of spot events, so the default is yesterday; SPOT composites carry per-region values and spread_vs_neo. See /methodology for eligibility and aggregation.
| Parameter | Type | Req. | Description |
|---|---|---|---|
ticker | string | yes | Ticker from /index/tickers, e.g. CX.H100SXM.NEO or CX.H100SXM.SPOT.US-EAST-1. |
day | string · date | Fixing day, YYYY-MM-DD. Default: latest available. |
Responses: 200, 400, 402, 404, 503 · 200 body: Fixing
GET/index/history0.05 USDC
Daily fixings for a ticker over a date range. Quote segments start 2026-09-13. SPOT tickers reach back to the start of the spot series (AWS daily from 2022-05-31 for A100, V100, T4, A10; from 2023-07 for H100), each row carrying its data source.
| Parameter | Type | Req. | Description |
|---|---|---|---|
ticker | string | yes | Ticker from /index/tickers. |
from | string · date | First day, YYYY-MM-DD. Default: earliest. | |
to | string · date | Last day, YYYY-MM-DD. Default: today. |
Responses: 200, 400, 402, 404, 503 · 200 body: FixingSeries
GET/index/board0.10 USDC
Every ticker's fixing for one day in one call.
| Parameter | Type | Req. | Description |
|---|---|---|---|
day | string · date | Fixing day, YYYY-MM-DD. Default: latest. |
Responses: 200, 402, 503 · 200 body: Board
GET/capacity/headlinefree
Free: capacity stress score per GPU model for the latest day, score only. Rounded 0–100 score per GPU with at least two signals, tightest first, cached ten minutes. The components and their inputs are in the paid /capacity/stress and /capacity/board.
Responses: 200, 503 · 200 body: application/json
GET/capacity/stress0.01 USDC
Capacity stress score (0 slack … 100 tight) for one GPU model on one day, with every component. Mean of the components available that day: availability (share of Shadeform and Lambda listings flagged available), ionet (deployable ÷ total units on io.net regional SKUs), supply (Vast on-demand offers vs the trailing 30-day median) and spot_ratio (hyperscaler SPOT fixing ÷ HYP fixing, 0.3 → 0 and 0.9 → 100). Each component carries its inputs.
| Parameter | Type | Req. | Description |
|---|---|---|---|
gpu | string | yes | Normalised GPU model, e.g. H100 SXM. |
day | string · date | YYYY-MM-DD; default latest. |
Responses: 200, 400, 402, 404, 503 · 200 body: CapacityStress
GET/capacity/history0.05 USDC
Daily capacity stress scores for one GPU model.
| Parameter | Type | Req. | Description |
|---|---|---|---|
gpu | string | yes | Normalised GPU model. |
from | string · date | YYYY-MM-DD. | |
to | string · date | YYYY-MM-DD. |
Responses: 200, 400, 402, 503 · 200 body: CapacitySeries
GET/capacity/board0.10 USDC
Every GPU model's capacity stress score for one day, tightest first.
| Parameter | Type | Req. | Description |
|---|---|---|---|
day | string · date | YYYY-MM-DD; default latest. |
Responses: 200, 402, 503 · 200 body: CapacityBoard
GET/tokens/modelsfree
Every LLM with a token price fixing, its ticker codes and today's price range (free). Canonical model slugs (for example claude-sonnet-5, gpt-6-astra, llama-4-maverick), their ticker codes, how many sources and hosts list them, and the min/max input and output price seen today. Also lists the frontier basket.
Responses: 200, 503 · 200 body: TokenModels
GET/tokens/quotes0.01 USDC
Every listed price for one model on one day: each source and hosting provider, USD per million tokens. Rows from the OpenRouter catalog, OpenRouter per-host endpoints (Azure, Amazon Bedrock, Google, Together, DeepInfra, …), the LiteLLM price table and DeepInfra. Includes cache-read price and context length where known; variants such as batch tiers are marked in extra.variant.
| Parameter | Type | Req. | Description |
|---|---|---|---|
model | string | yes | Canonical model slug from /tokens/models. |
day | string · date | YYYY-MM-DD; default latest. |
Responses: 200, 400, 402, 404, 503 · 200 body: TokenQuotes
GET/tokens/fixing0.01 USDC
One day's token price fixing for a ticker such as CX.TOK.CLAUDESONNET5.IN. Median across every source and host at the standard tier (batch and free variants excluded). .IN and .OUT are input and output USD per million tokens; .BLEND is (3·input + output) / 4. CX.TOK.FRONTIER.<side> is the median across the frontier basket listed by /tokens/models.
| Parameter | Type | Req. | Description |
|---|---|---|---|
ticker | string | yes | CX.TOK.<MODELCODE>.IN | OUT | BLEND, or CX.TOK.FRONTIER.<side>. |
day | string · date | YYYY-MM-DD; default latest. |
Responses: 200, 400, 402, 404, 503 · 200 body: TokenFixing
GET/tokens/history0.05 USDC
Daily fixings for a token ticker, from the first snapshot (2026-09-14).
| Parameter | Type | Req. | Description |
|---|---|---|---|
ticker | string | yes | Token ticker. |
from | string · date | YYYY-MM-DD. | |
to | string · date | YYYY-MM-DD. |
Responses: 200, 400, 402, 503 · 200 body: TokenSeries
GET/tokens/board0.10 USDC
Every model's input, output and blended fixing for one day, plus the frontier basket.
| Parameter | Type | Req. | Description |
|---|---|---|---|
day | string · date | YYYY-MM-DD; default latest. |
Responses: 200, 402, 404, 503 · 200 body: TokenBoard
GET/term/instance0.01 USDC
Price ladder for one instance type: spot, on-demand, 1-year and 3-year commitments, with discounts. Current prices from our series: spot median across zones (where spot events exist), on-demand list price, and reserved/reservation terms as effective hourly with upfront amortised. discount_pct is relative to on-demand. AWS carries four reserved terms (1y/3y × no/all upfront), Azure two (1y/3y all upfront), GCP two resource-based committed-use terms (cud_1y, cud_3y, no upfront).
| Parameter | Type | Req. | Description |
|---|---|---|---|
provider | string · aws | gcp | azure | yes | Cloud provider. One of aws, gcp, azure. |
region | string | yes | Region slug as listed by /catalog (for example us-east-1 for AWS, us-central1 for GCP, us-east for Azure). Azure slugs map to eastus, westus2, westeurope. |
instance | string | yes | Instance / machine / SKU type name exactly as listed by /instances (for example c5.large, n2-standard-4, D2s_v5). |
Responses: 200, 400, 402, 404, 503 · 200 body: TermLadder
GET/term0.05 USDC
Term structure per hyperscaler for one GPU model, USD per GPU-hour: spot, on-demand, 1y, 3y. For each hyperscaler with a mapped instance family (see /gpu/models hyperscaler_spot_legs), the median across regions of each term's price divided by GPUs per node, with lo/hi across regions and the discount to on-demand. Answers "what does a committed H100 cost against spot and on-demand, per cloud". Neo-cloud commitment prices are quote-only and excluded.
| Parameter | Type | Req. | Description |
|---|---|---|---|
gpu | string | yes | Normalised GPU model with a hyperscaler mapping, e.g. H100 SXM, A100 SXM 80GB, L4, T4. |
Responses: 200, 400, 402, 404, 503 · 200 body: TermCurve
GET/azure/eviction0.01 USDC
Azure spot eviction-rate history (28-day buckets, sampled daily). Daily samples of the eviction-rate bucket Azure reports per SKU (0-5, 5-10, 10-15, 15-20, 20+ percent over the trailing 28 days). Collected daily since 2026-09-05; there is no history before the first sample.
| Parameter | Type | Req. | Description |
|---|---|---|---|
region | string · us-east | us-west-2 | eu-west | yes | Azure region slug: us-east, us-west-2 or eu-west. |
sku | string | Optional SKU name (for example D2s_v5). Default: every SKU. | |
from | string · date | First sample date (inclusive), YYYY-MM-DD. Default: earliest. | |
to | string · date | Last sample date (inclusive), YYYY-MM-DD. Default: latest. |
Responses: 200, 400, 402, 404, 503 · 200 body: EvictionList
Schemas
Error
{
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "string",
"description": "Human-readable problem."
}
}
}PaymentRequired
{
"type": "object",
"description": "x402 v2 payment requirements.",
"properties": {
"x402Version": {
"type": "integer",
"const": 2
},
"resource": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"description": {
"type": "string"
},
"mimeType": {
"type": "string"
}
}
},
"accepts": {
"type": "array",
"description": "One entry per accepted network; pay any one of them.",
"items": {
"type": "object",
"properties": {
"scheme": {
"type": "string",
"description": "Payment scheme, `exact`."
},
"network": {
"type": "string",
"description": "CAIP-2 network id, e.g. `eip155:8453`."
},
"asset": {
"type": "string",
"description": "USDC contract address on that network."
},
"amount": {
"type": "string",
"description": "Price in USDC atomic units (6 decimals)."
},
"payTo": {
"type": "string",
"description": "Seller address."
},
"maxTimeoutSeconds": {
"type": "integer"
},
"extra": {
"type": "object",
"description": "Circle Gateway signing domain (verifyingContract, name, version)."
}
}
}
}
}
}Health
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"ready": {
"type": "boolean",
"description": "True once the store has ingested every raw file."
},
"ingest": {
"type": "object",
"properties": {
"done": {
"type": "integer"
},
"total": {
"type": "integer"
},
"added": {
"type": "integer"
},
"error": {
"type": [
"string",
"null"
]
}
}
},
"version": {
"type": "string"
}
}
}Catalog
{
"type": "object",
"properties": {
"generated_at": {
"type": "string",
"format": "date-time"
},
"price_usdc": {
"type": "string",
"description": "Base price of one paid call (events, hourly, latest, eviction)."
},
"prices_usdc": {
"type": "object",
"description": "Price per operation family: events, hourly, latest, eviction, daily, monthly, snapshot.",
"additionalProperties": {
"type": "string"
}
},
"sources": {
"type": "object",
"description": "Legend: source value → what it is and how much to trust it.",
"additionalProperties": {
"type": "string"
}
},
"regions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"provider": {
"type": "string"
},
"region": {
"type": "string",
"description": "Slug to pass as `region`."
},
"instances": {
"type": "integer",
"description": "Types with raw events."
},
"events": {
"type": "integer"
},
"first_event": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"last_event": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"history_instances": {
"type": "integer",
"description": "Types with legacy history rows."
},
"history_daily_from": {
"type": [
"string",
"null"
],
"format": "date"
},
"history_daily_to": {
"type": [
"string",
"null"
],
"format": "date"
},
"history_monthly_from": {
"type": [
"string",
"null"
],
"format": "date"
},
"history_monthly_to": {
"type": [
"string",
"null"
],
"format": "date"
},
"ondemand": {
"type": [
"object",
"null"
],
"description": "On-demand series coverage (types, change points, from, to) or null.",
"properties": {
"types": {
"type": "integer"
},
"points": {
"type": "integer"
},
"from": {
"type": "string",
"format": "date"
},
"to": {
"type": "string",
"format": "date"
}
}
},
"reserved": {
"type": [
"object",
"null"
],
"description": "AWS reserved-instance series coverage or null.",
"properties": {
"types": {
"type": "integer"
},
"points": {
"type": "integer"
},
"from": {
"type": "string",
"format": "date"
},
"to": {
"type": "string",
"format": "date"
}
}
}
}
}
}
}
}InstanceList
{
"type": "object",
"properties": {
"provider": {
"type": "string"
},
"region": {
"type": "string"
},
"count": {
"type": "integer"
},
"instances": {
"type": "array",
"items": {
"type": "object",
"properties": {
"instance": {
"type": "string"
},
"events": {
"type": "integer",
"description": "Raw events; 0 for legacy-only types."
},
"first_event": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"last_event": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"history_daily_from": {
"type": [
"string",
"null"
],
"format": "date"
},
"history_daily_to": {
"type": [
"string",
"null"
],
"format": "date"
},
"history_monthly_from": {
"type": [
"string",
"null"
],
"format": "date"
},
"history_monthly_to": {
"type": [
"string",
"null"
],
"format": "date"
}
}
}
}
}
}Event
{
"type": "object",
"required": [
"ts",
"az",
"product",
"price"
],
"properties": {
"ts": {
"type": "string",
"format": "date-time",
"description": "When the price took effect (UTC)."
},
"az": {
"type": "string",
"description": "Availability zone or zone id; the region name for GCP."
},
"product": {
"type": "string",
"description": "Product / OS the price applies to."
},
"price": {
"type": "number",
"description": "USD per hour."
}
}
}EventList
{
"type": "object",
"properties": {
"provider": {
"type": "string"
},
"region": {
"type": "string"
},
"instance": {
"type": "string"
},
"from": {
"type": "string",
"format": "date-time"
},
"to": {
"type": "string",
"format": "date-time"
},
"count": {
"type": "integer"
},
"truncated": {
"type": "boolean",
"description": "True when `limit` was hit."
},
"next_from": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "Pass as `from` to continue when truncated."
},
"events": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Event"
}
}
}
}HourlyBars
{
"type": "object",
"properties": {
"provider": {
"type": "string"
},
"region": {
"type": "string"
},
"instance": {
"type": "string"
},
"zones": {
"type": "integer",
"description": "Number of zone series collapsed."
},
"from": {
"type": "string",
"format": "date-time"
},
"to": {
"type": "string",
"format": "date-time"
},
"count": {
"type": "integer"
},
"bars": {
"type": "array",
"items": {
"type": "object",
"required": [
"hour",
"open",
"high",
"low",
"close",
"avg"
],
"properties": {
"hour": {
"type": "string",
"description": "Bucket start, ISO 8601 UTC hour."
},
"open": {
"type": "number",
"description": "Price in force at the start of the bucket, USD per hour (median across AZs)."
},
"high": {
"type": "number",
"description": "Highest price seen in any AZ during the bucket."
},
"low": {
"type": "number",
"description": "Lowest price seen in any AZ during the bucket."
},
"close": {
"type": "number",
"description": "Price in force at the end of the bucket (median across AZs)."
},
"avg": {
"type": "number",
"description": "Time-weighted average price over the bucket (median across AZs). This is the value the public dashboard shows."
},
"dur": {
"type": "integer",
"description": "Seconds of the bucket covered by known prices (a partial value means the series starts or ends inside the bucket)."
}
}
}
}
}
}Source
{
"type": "string",
"enum": [
"direct",
"titans",
"pauley",
"uscisi-adjusted",
"archive"
],
"description": "Where a row comes from; see `sources` in /catalog for the legend and standing of each."
}DailyBars
{
"type": "object",
"properties": {
"provider": {
"type": "string"
},
"region": {
"type": "string"
},
"instance": {
"type": "string"
},
"zones": {
"type": "integer",
"description": "Zone series collapsed in the `direct` rows."
},
"direct_from": {
"type": [
"string",
"null"
],
"format": "date",
"description": "First day served from the raw event store; earlier rows are legacy history. Null for a type with legacy history only."
},
"from": {
"type": "string",
"format": "date-time"
},
"to": {
"type": "string",
"format": "date-time"
},
"count": {
"type": "integer"
},
"bars": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"avg",
"source"
],
"properties": {
"date": {
"type": "string",
"format": "date",
"description": "UTC day."
},
"open": {
"type": [
"number",
"null"
],
"description": "Price at the start of the day (median across zones for `direct`); null when the source only has an average."
},
"high": {
"type": [
"number",
"null"
],
"description": "Highest price of the day, any zone; null when unavailable."
},
"low": {
"type": [
"number",
"null"
],
"description": "Lowest price of the day, any zone; null when unavailable."
},
"close": {
"type": [
"number",
"null"
],
"description": "Price at the end of the day; null when unavailable."
},
"avg": {
"type": "number",
"description": "Time-weighted (or, for titans, sampled) daily average, USD per hour. Equals the public dashboard value."
},
"dur": {
"type": [
"integer",
"null"
],
"description": "Seconds of the day covered by known prices (`direct` rows only)."
},
"source": {
"$ref": "#/components/schemas/Source"
}
}
}
}
}
}MonthlySeries
{
"type": "object",
"properties": {
"provider": {
"type": "string"
},
"region": {
"type": "string"
},
"instance": {
"type": "string"
},
"count": {
"type": "integer"
},
"months": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"avg",
"source"
],
"properties": {
"date": {
"type": "string",
"format": "date",
"description": "First day of the month."
},
"open": {
"type": [
"number",
"null"
]
},
"high": {
"type": [
"number",
"null"
]
},
"low": {
"type": [
"number",
"null"
]
},
"close": {
"type": [
"number",
"null"
]
},
"avg": {
"type": "number",
"description": "Median of the month's daily averages (or the adjusted archive value), USD per hour."
},
"days": {
"type": [
"integer",
"null"
],
"description": "Days of daily data behind the month; null for uscisi-adjusted months."
},
"source": {
"$ref": "#/components/schemas/Source"
}
}
}
},
"archive": {
"type": "array",
"description": "Raw USC/ISI archive months (AWS legacy types only), unadjusted.",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date"
},
"open": {
"type": "number"
},
"high": {
"type": "number"
},
"low": {
"type": "number"
},
"close": {
"type": "number"
},
"avg": {
"type": "number"
}
}
}
},
"archive_note": {
"type": "string",
"description": "Standing of the archive rows."
}
}
}LatestList
{
"type": "object",
"properties": {
"provider": {
"type": "string"
},
"region": {
"type": "string"
},
"as_of": {
"type": "string",
"format": "date-time",
"description": "Newest event in the region; the snapshot is current to this time."
},
"count": {
"type": "integer"
},
"prices": {
"type": "array",
"items": {
"type": "object",
"properties": {
"instance": {
"type": "string"
},
"az": {
"type": "string"
},
"product": {
"type": "string"
},
"price": {
"type": "number",
"description": "USD per hour."
},
"since": {
"type": "string",
"format": "date-time",
"description": "When this price took effect."
},
"age_seconds": {
"type": "integer",
"description": "Seconds since `since`, at response time."
}
}
}
}
}
}ProviderSnapshot
{
"type": "object",
"properties": {
"provider": {
"type": "string"
},
"regions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"region": {
"type": "string"
},
"instances": {
"type": "integer"
},
"as_of": {
"type": "string",
"format": "date-time"
}
}
}
},
"count": {
"type": "integer"
},
"prices": {
"type": "array",
"items": {
"type": "object",
"properties": {
"region": {
"type": "string"
},
"instance": {
"type": "string"
},
"az": {
"type": "string"
},
"product": {
"type": "string"
},
"price": {
"type": "number"
},
"since": {
"type": "string",
"format": "date-time"
},
"age_seconds": {
"type": "integer"
}
}
}
}
}
}PricePoint
{
"type": "object",
"required": [
"date",
"price"
],
"properties": {
"date": {
"type": "string",
"format": "date",
"description": "Day the price took effect."
},
"price": {
"type": "number",
"description": "USD per hour."
}
}
}OnDemandHistory
{
"type": "object",
"properties": {
"provider": {
"type": "string"
},
"region": {
"type": "string"
},
"instance": {
"type": "string"
},
"note": {
"type": "string"
},
"current": {
"$ref": "#/components/schemas/PricePoint"
},
"count": {
"type": "integer"
},
"changes": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PricePoint"
}
}
}
}OnDemandSnapshot
{
"type": "object",
"properties": {
"provider": {
"type": "string"
},
"region": {
"type": "string"
},
"note": {
"type": "string"
},
"count": {
"type": "integer"
},
"prices": {
"type": "array",
"items": {
"type": "object",
"properties": {
"instance": {
"type": "string"
},
"price": {
"type": "number"
},
"since": {
"type": "string",
"format": "date"
}
}
}
}
}
}ReservedHistory
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"const": "aws"
},
"region": {
"type": "string"
},
"instance": {
"type": "string"
},
"note": {
"type": "string"
},
"series": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ri_type": {
"type": "string"
},
"current": {
"$ref": "#/components/schemas/PricePoint"
},
"count": {
"type": "integer"
},
"changes": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PricePoint"
}
}
}
}
}
}
}ReservedSnapshot
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"const": "aws"
},
"region": {
"type": "string"
},
"note": {
"type": "string"
},
"count": {
"type": "integer"
},
"prices": {
"type": "array",
"items": {
"type": "object",
"properties": {
"instance": {
"type": "string"
},
"ri_type": {
"type": "string"
},
"price": {
"type": "number"
},
"since": {
"type": "string",
"format": "date"
}
}
}
}
}
}GpuModels
{
"type": "object",
"properties": {
"note": {
"type": "string"
},
"providers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"provider": {
"type": "string"
},
"latest_day": {
"type": "string",
"format": "date"
},
"quotes": {
"type": "integer"
}
}
}
},
"models": {
"type": "array",
"items": {
"type": "object",
"properties": {
"gpu": {
"type": "string"
},
"providers": {
"type": "integer"
},
"quotes": {
"type": "integer"
},
"first_day": {
"type": "string",
"format": "date"
},
"last_day": {
"type": "string",
"format": "date"
},
"min_price_gpu_hr": {
"type": "number"
},
"hyperscaler_spot_legs": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
}GpuQuote
{
"type": "object",
"required": [
"provider",
"market",
"gpus",
"price_gpu_hr"
],
"properties": {
"provider": {
"type": "string"
},
"market": {
"type": "string",
"enum": [
"ondemand",
"spot",
"bid",
"secure",
"community"
]
},
"gpus": {
"type": "integer",
"description": "GPUs in the quoted unit."
},
"price_gpu_hr": {
"type": "number",
"description": "USD per GPU-hour."
},
"price_unit_hr": {
"type": "number",
"description": "USD per hour for the quoted unit."
},
"region": {
"type": [
"string",
"null"
]
},
"sku": {
"type": [
"string",
"null"
]
},
"observed": {
"type": "string",
"format": "date-time"
},
"extra": {
"type": [
"object",
"null"
],
"description": "Provider-specific detail (offer id, host reliability, VRAM, stock)."
}
}
}GpuQuotes
{
"type": "object",
"properties": {
"gpu": {
"type": "string"
},
"count": {
"type": "integer"
},
"note": {
"type": "string"
},
"quotes": {
"type": "array",
"items": {
"$ref": "#/components/schemas/GpuQuote"
}
}
}
}GpuIndexRow
{
"type": "object",
"required": [
"day",
"provider",
"market",
"n",
"lo",
"median"
],
"properties": {
"day": {
"type": "string",
"format": "date"
},
"provider": {
"type": "string",
"description": "A quote provider, or `aws-spot` / `gcp-spot` for legs from our own events."
},
"market": {
"type": "string"
},
"region": {
"type": "string",
"description": "Hyperscaler legs only."
},
"instance": {
"type": "string",
"description": "Hyperscaler legs only."
},
"gpus": {
"type": "integer",
"description": "Hyperscaler legs only: GPUs per node."
},
"n": {
"type": "integer",
"description": "Quotes behind the row (1 for hyperscaler legs)."
},
"lo": {
"type": "number"
},
"hi": {
"type": "number"
},
"median": {
"type": "number"
},
"mean": {
"type": "number"
}
}
}GpuIndex
{
"type": "object",
"properties": {
"gpu": {
"type": "string"
},
"note": {
"type": "string"
},
"count": {
"type": "integer"
},
"series": {
"type": "array",
"items": {
"$ref": "#/components/schemas/GpuIndexRow"
}
}
}
}GpuSnapshot
{
"type": "object",
"properties": {
"note": {
"type": "string"
},
"count": {
"type": "integer"
},
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"gpu": {
"type": "string"
},
"provider": {
"type": "string"
},
"market": {
"type": "string"
},
"region": {
"type": "string"
},
"instance": {
"type": "string"
},
"n": {
"type": "integer"
},
"lo": {
"type": "number"
},
"median": {
"type": "number"
},
"as_of": {
"type": "string",
"format": "date-time"
},
"age_seconds": {
"type": "integer"
}
}
}
}
}
}Tickers
{
"type": "object",
"properties": {
"methodology": {
"type": "string"
},
"methodology_url": {
"type": "string"
},
"unit": {
"type": "string"
},
"segments": {
"type": "object",
"additionalProperties": {
"type": "object"
}
},
"count": {
"type": "integer"
},
"tickers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ticker": {
"type": "string"
},
"gpu": {
"type": "string"
},
"segment": {
"type": "string"
},
"segment_name": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
}
}
}Fixing
{
"type": "object",
"required": [
"ticker",
"day",
"value",
"n",
"methodology"
],
"properties": {
"ticker": {
"type": "string"
},
"gpu": {
"type": "string"
},
"segment": {
"type": "string"
},
"day": {
"type": "string",
"format": "date"
},
"methodology": {
"type": "string"
},
"unit": {
"type": "string"
},
"value": {
"type": "number",
"description": "Median USD per GPU-hour of eligible quotes (or median across regions for SPOT composites)."
},
"lo": {
"type": "number"
},
"hi": {
"type": "number"
},
"n": {
"type": "integer",
"description": "Quotes (or regions) behind the fixing."
},
"members": {
"type": "object",
"description": "Quote counts per provider/market.",
"additionalProperties": {
"type": "integer"
}
},
"regions": {
"type": "array",
"description": "SPOT composites: per-region values.",
"items": {
"type": "object",
"properties": {
"region": {
"type": "string"
},
"value": {
"type": "number"
}
}
}
},
"spread_vs_neo": {
"type": [
"number",
"null"
],
"description": "SPOT composite minus the latest NEO fixing."
},
"instance": {
"type": "string"
},
"source": {
"type": "string"
}
}
}FixingSeries
{
"type": "object",
"properties": {
"ticker": {
"type": "string"
},
"gpu": {
"type": "string"
},
"segment": {
"type": "string"
},
"methodology": {
"type": "string"
},
"unit": {
"type": "string"
},
"count": {
"type": "integer"
},
"series": {
"type": "array",
"items": {
"type": "object",
"properties": {
"day": {
"type": "string",
"format": "date"
},
"value": {
"type": "number"
},
"lo": {
"type": [
"number",
"null"
]
},
"hi": {
"type": [
"number",
"null"
]
},
"n": {
"type": "integer"
},
"source": {
"type": "string"
},
"instance": {
"type": "string"
}
}
}
}
}
}Board
{
"type": "object",
"properties": {
"day": {
"type": "string",
"format": "date"
},
"methodology": {
"type": "string"
},
"unit": {
"type": "string"
},
"count": {
"type": "integer"
},
"fixings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ticker": {
"type": "string"
},
"gpu": {
"type": "string"
},
"segment": {
"type": "string"
},
"day": {
"type": "string",
"format": "date"
},
"value": {
"type": "number"
},
"lo": {
"type": "number"
},
"hi": {
"type": "number"
},
"n": {
"type": "integer"
},
"spread_vs_neo": {
"type": [
"number",
"null"
]
}
}
}
}
}
}CapacityStress
{
"type": "object",
"required": [
"gpu",
"day",
"score",
"components"
],
"properties": {
"gpu": {
"type": "string"
},
"day": {
"type": "string",
"format": "date"
},
"methodology": {
"type": "string"
},
"score": {
"type": "number",
"description": "0 slack … 100 tight"
},
"n_components": {
"type": "integer"
},
"scale": {
"type": "string"
},
"components": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"stress": {
"type": "number"
},
"note": {
"type": "string"
}
},
"additionalProperties": true
}
}
}
}CapacitySeries
{
"type": "object",
"properties": {
"gpu": {
"type": "string"
},
"methodology": {
"type": "string"
},
"scale": {
"type": "string"
},
"count": {
"type": "integer"
},
"series": {
"type": "array",
"items": {
"type": "object",
"properties": {
"day": {
"type": "string"
},
"score": {
"type": "number"
},
"n_components": {
"type": "integer"
},
"components": {
"type": "object",
"additionalProperties": {
"type": "number"
}
}
}
}
}
}
}CapacityBoard
{
"type": "object",
"properties": {
"day": {
"type": "string",
"format": "date"
},
"methodology": {
"type": "string"
},
"scale": {
"type": "string"
},
"note": {
"type": "string"
},
"count": {
"type": "integer"
},
"models": {
"type": "array",
"items": {
"type": "object",
"properties": {
"gpu": {
"type": "string"
},
"score": {
"type": "number"
},
"n_components": {
"type": "integer"
},
"components": {
"type": "object",
"additionalProperties": {
"type": "number"
}
}
}
}
}
}
}TokenModels
{
"type": "object",
"properties": {
"day": {
"type": "string",
"format": "date"
},
"methodology": {
"type": "string"
},
"unit": {
"type": "string"
},
"fixing": {
"type": "string"
},
"frontier_basket": {
"type": "array",
"items": {
"type": "string"
}
},
"frontier_tickers": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
},
"models": {
"type": "array",
"items": {
"type": "object",
"properties": {
"model": {
"type": "string"
},
"code": {
"type": "string"
},
"tickers": {
"type": "array",
"items": {
"type": "string"
}
},
"rows": {
"type": "integer"
},
"sources": {
"type": "integer"
},
"providers": {
"type": "integer"
},
"input_lo": {
"type": [
"number",
"null"
]
},
"input_hi": {
"type": [
"number",
"null"
]
},
"output_lo": {
"type": [
"number",
"null"
]
},
"output_hi": {
"type": [
"number",
"null"
]
}
}
}
}
}
}TokenQuotes
{
"type": "object",
"properties": {
"model": {
"type": "string"
},
"code": {
"type": "string"
},
"day": {
"type": "string",
"format": "date"
},
"unit": {
"type": "string"
},
"count": {
"type": "integer"
},
"quotes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"source": {
"type": "string"
},
"provider": {
"type": "string"
},
"sku": {
"type": "string"
},
"as_of": {
"type": "string"
},
"input_per_m": {
"type": [
"number",
"null"
]
},
"output_per_m": {
"type": [
"number",
"null"
]
},
"cache_read_per_m": {
"type": [
"number",
"null"
]
},
"context": {
"type": [
"integer",
"null"
]
},
"extra": {
"type": [
"object",
"null"
]
}
}
}
}
}
}TokenFixing
{
"type": "object",
"required": [
"ticker",
"day",
"value",
"n",
"methodology"
],
"properties": {
"ticker": {
"type": "string"
},
"model": {
"type": "string"
},
"basket": {
"type": "array",
"items": {
"type": "string"
}
},
"side": {
"type": "string",
"enum": [
"IN",
"OUT",
"BLEND"
]
},
"day": {
"type": "string",
"format": "date"
},
"methodology": {
"type": "string"
},
"unit": {
"type": "string"
},
"value": {
"type": "number"
},
"input": {
"type": [
"number",
"null"
]
},
"output": {
"type": [
"number",
"null"
]
},
"lo": {
"type": "number"
},
"hi": {
"type": "number"
},
"n": {
"type": "integer"
},
"members": {
"type": "object",
"additionalProperties": {
"type": "number"
}
}
}
}TokenSeries
{
"type": "object",
"properties": {
"ticker": {
"type": "string"
},
"model": {
"type": [
"string",
"null"
]
},
"side": {
"type": "string"
},
"methodology": {
"type": "string"
},
"unit": {
"type": "string"
},
"count": {
"type": "integer"
},
"series": {
"type": "array",
"items": {
"type": "object",
"properties": {
"day": {
"type": "string"
},
"value": {
"type": "number"
},
"lo": {
"type": "number"
},
"hi": {
"type": "number"
},
"n": {
"type": "integer"
}
}
}
}
}
}TokenBoard
{
"type": "object",
"properties": {
"day": {
"type": "string",
"format": "date"
},
"methodology": {
"type": "string"
},
"unit": {
"type": "string"
},
"frontier": {
"type": "object",
"additionalProperties": {
"type": "object"
}
},
"count": {
"type": "integer"
},
"models": {
"type": "array",
"items": {
"type": "object",
"properties": {
"model": {
"type": "string"
},
"code": {
"type": "string"
},
"input": {
"type": [
"number",
"null"
]
},
"output": {
"type": [
"number",
"null"
]
},
"blend": {
"type": [
"number",
"null"
]
},
"n": {
"type": "integer"
},
"sources": {
"type": "integer"
},
"providers": {
"type": "integer"
}
}
}
}
}
}TermPoint
{
"type": "object",
"required": [
"term",
"price"
],
"properties": {
"term": {
"type": "string",
"enum": [
"spot",
"ondemand",
"ri_1y_no_upfront_standard",
"ri_1y_all_upfront_standard",
"ri_3y_no_upfront_standard",
"ri_3y_all_upfront_standard",
"cud_1y",
"cud_3y"
]
},
"label": {
"type": "string"
},
"price": {
"type": "number",
"description": "USD per hour for the instance."
},
"since": {
"type": "string"
},
"discount_pct": {
"type": "number",
"description": "Percent below on-demand."
},
"zones": {
"type": "integer",
"description": "spot only: zones behind the median."
}
}
}TermLadder
{
"type": "object",
"properties": {
"provider": {
"type": "string"
},
"region": {
"type": "string"
},
"instance": {
"type": "string"
},
"unit": {
"type": "string"
},
"note": {
"type": "string"
},
"terms": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TermPoint"
}
}
}
}TermCurve
{
"type": "object",
"properties": {
"gpu": {
"type": "string"
},
"unit": {
"type": "string"
},
"methodology": {
"type": "string"
},
"note": {
"type": "string"
},
"providers": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"instance": {
"type": "string"
},
"gpus_per_node": {
"type": "integer"
},
"regions": {
"type": "integer"
},
"terms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"term": {
"type": "string"
},
"label": {
"type": "string"
},
"value": {
"type": "number",
"description": "Median across regions, USD per GPU-hour."
},
"lo": {
"type": "number"
},
"hi": {
"type": "number"
},
"regions": {
"type": "integer"
},
"discount_pct": {
"type": [
"number",
"null"
]
}
}
}
}
}
}
}
}
}EvictionList
{
"type": "object",
"properties": {
"region": {
"type": "string"
},
"count": {
"type": "integer"
},
"samples": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date",
"description": "Sample day."
},
"sku": {
"type": "string"
},
"bucket": {
"type": "string",
"description": "Eviction-rate bucket in percent over the trailing 28 days: `0-5`, `5-10`, `10-15`, `15-20`, `20+`."
}
}
}
}
}
}