corpusAI

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.

Base URLhttps://cloud.trycorpus.ai/v1
Paymentx402 v2 · USDC via Circle Gateway · 12 networks
Seller0x3f60008Dfd0EfC03F476D9B489D6C5B13B3eBF2C

Software 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.

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&region=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&region=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&region=us-east-1&instance=c5.large"
circle services pay "https://cloud.trycorpus.ai/v1/spot/events?provider=aws&region=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

MethodPathCostWhat
GET/healthfreeliveness + ready flag
GET/catalogfreeproviders, region slugs, coverage window, event counts
GET/instances?provider&region[&prefix]freeexact instance type names in a region
GET/spot/events?provider&region&instance[&from&to&az&product&include_repeats&limit]0.010000raw price-change events
GET/spot/hourly?provider&region&instance[&from&to]0.010000hourly time-weighted OHLC bars
GET/spot/daily?provider&region&instance[&from&to]0.050000full daily history, all eras stitched, source per row
GET/spot/monthly?provider&region&instance[&from&to&include_archive]0.050000full monthly history back to 2014 (AWS legacy types)
GET/spot/latest?provider&region&instance0.010000price currently in force per (zone, product) for one type
GET/spot/snapshot?provider&region0.100000current price of every type, zone and product in a region
GET/azure/eviction?region[&sku&from&to]0.010000Azure 28-day eviction-rate buckets, daily samples
GET/spot/snapshot/all?provider1.00current spot price of every type and zone in every region of a provider
GET/spot/export/history?provider&region3.00gzip TSV: legacy daily + monthly history of every type in a region
GET/spot/export/events?provider&region&date0.50gzip TSV: every raw event of a region for one UTC day
GET/ondemand?provider&region&instance0.010000on-demand list-price change history of one type
GET/ondemand/snapshot?provider&region0.100000current on-demand list price of every type in a region
GET/reserved?region&instance[&provider&ri_type]0.010000reserved effective hourly price history: AWS RIs (1y/3y, no/all upfront), Azure reservations
GET/reserved/snapshot?region[&provider]0.100000current reserved prices of every type and ri_type in a region
GET/gpu/modelsfreeGPU models with rental quotes and the providers quoting them
GET/gpu/quotes?gpu[&provider&market]0.010000latest rental quotes for one GPU model across neo-clouds and marketplaces
GET/gpu/index?gpu[&from&to]0.050000daily lo/median/mean/hi per provider and market, with aws-spot / gcp-spot legs
GET/gpu/snapshot0.100000every GPU × provider × market in one call
GET/index/tickersfreeevery index ticker with segment definitions
GET/index/fixing?ticker[&day]0.010000one day's fixing: median, low, high, count
GET/index/history?ticker[&from&to]0.050000daily fixings; SPOT tickers back to 2022
GET/index/board[?day]0.100000every ticker's fixing for a day
GET/statusfreefreshness of every source
GET/capacity/stress?gpu&day0.010000capacity stress score, 0 slack to 100 tight, with components
GET/capacity/history?gpu&from&to0.050000daily stress scores for one GPU
GET/capacity/board?day0.100000every GPU's score for one day, tightest first
GET/tokens/modelsfreeevery LLM with a token price fixing, ticker codes, today's range
GET/tokens/quotes?model&day0.010000every source and host's price for one model, USD per million tokens
GET/tokens/fixing?ticker&day0.010000one day's fixing, CX.TOK.<MODEL>.IN, .OUT or .BLEND
GET/tokens/history?ticker&from&to0.050000daily fixings for a token ticker
GET/tokens/board?day0.100000every model's input, output and blended fixing plus the frontier basket
GET/term/instance?provider&region&instance0.010000price ladder: spot, on-demand, 1y, 3y with discounts
GET/term?gpu0.050000term 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.

sourceWhatWindowStanding
directprice-change events pulled daily from the provider APIs; the only source with zones, timestamps and intraday rangeAWS from 2026-06-06, GCP from 2026-04-08, Azure from 2025-07 (per SKU)measured
titansSpotLake 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 eventthird-party daily average, no range
pauleyAWS raw price-change events (Pauley dataset, CC-BY) time-weighted per day, Linux/UNIX; open/high/low/close on days the price moved2022-05-31 to 2024-01-31measured
uscisi-adjustedUSC/ISI monthly archive divided by a per-instance factor fitted on the 2022-2023 overlap; only the ~23 types per region with a stable factor2017 to 2022-04estimated
archiveUSC/ISI monthly spot dataset as published, open/high/low/close, 51 legacy AWS types per region2014-02 to 2023-12third-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

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

StatusMeaningCharged?
400bad or missing parameterno
402payment required (see above)no
404unknown region / instanceno
503store warming up after a restart, retry in a minuteno

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-).

ParameterTypeReq.Description
providerstring · aws | gcp | azureyesCloud provider. One of aws, gcp, azure.
regionstringyesRegion 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.
prefixstringCase-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.

ParameterTypeReq.Description
providerstring · aws | gcp | azureyesCloud provider. One of aws, gcp, azure.
regionstringyesRegion 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.
instancestringyesInstance / machine / SKU type name exactly as listed by /instances (for example c5.large, n2-standard-4, D2s_v5).
fromstring · date-timeStart of the window (inclusive), ISO 8601 UTC. Default: 7 days before to.
tostring · date-timeEnd of the window (exclusive), ISO 8601 UTC. Default: now.
azstringRestrict to one availability zone / zone id (for example use1-az1). Default: all zones.
productstringRestrict to one product / OS string (for example Linux/UNIX, Spot, Linux). Default: all.
include_repeatsbooleanKeep events whose price equals the previous event of the same (az, product) series. Default false.
limitintegerMaximum 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.

ParameterTypeReq.Description
providerstring · aws | gcp | azureyesCloud provider. One of aws, gcp, azure.
regionstringyesRegion 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.
instancestringyesInstance / machine / SKU type name exactly as listed by /instances (for example c5.large, n2-standard-4, D2s_v5).
fromstring · date-timeStart of the window (inclusive), ISO 8601 UTC. Default: 30 days before to.
tostring · date-timeEnd 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.

ParameterTypeReq.Description
providerstring · aws | gcp | azureyesCloud provider. One of aws, gcp, azure.
regionstringyesRegion 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.
instancestringyesInstance / machine / SKU type name exactly as listed by /instances (for example c5.large, n2-standard-4, D2s_v5).
fromstring · date-timeStart of the window (inclusive), ISO 8601 UTC. Default: the earliest row for the type.
tostring · date-timeEnd 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.

ParameterTypeReq.Description
providerstring · aws | gcp | azureyesCloud provider. One of aws, gcp, azure.
regionstringyesRegion 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.
instancestringyesInstance / machine / SKU type name exactly as listed by /instances (for example c5.large, n2-standard-4, D2s_v5).
fromstring · dateFirst month (inclusive), YYYY-MM-DD (use the 1st). Default: earliest.
tostring · dateLast month (inclusive), YYYY-MM-DD. Default: latest.
include_archivebooleanInclude 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.

ParameterTypeReq.Description
providerstring · aws | gcp | azureyesCloud provider. One of aws, gcp, azure.
regionstringyesRegion 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.
instancestringyesInstance / 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.

ParameterTypeReq.Description
providerstring · aws | gcp | azureyesCloud provider. One of aws, gcp, azure.
regionstringyesRegion 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.

ParameterTypeReq.Description
providerstring · aws | gcp | azureyesCloud 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.

ParameterTypeReq.Description
providerstring · aws | gcp | azureyesCloud provider. One of aws, gcp, azure.
regionstringyesRegion 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.

ParameterTypeReq.Description
providerstring · aws | gcp | azureyesCloud provider. One of aws, gcp, azure.
regionstringyesRegion 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.
datestring · dateyesUTC 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.

ParameterTypeReq.Description
providerstring · aws | gcp | azureyesCloud provider. One of aws, gcp, azure.
regionstringyesRegion 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.
instancestringyesInstance / 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.

ParameterTypeReq.Description
providerstring · aws | gcp | azureyesCloud provider. One of aws, gcp, azure.
regionstringyesRegion 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.

ParameterTypeReq.Description
providerstring · aws | azure | gcpProvider: aws (default), azure or gcp.
regionstringyesRegion slug (for example us-east-1, us-east for Azure, us-central1 for GCP).
instancestringyesInstance / machine / SKU type name exactly as listed by /instances (for example c5.large, n2-standard-4, D2s_v5).
ri_typestring · ri_1y_no_upfront_standard | ri_1y_all_upfront_standard | ri_3y_no_upfront_standard | ri_3y_all_upfront_standard | cud_1y | cud_3yRestrict 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).

ParameterTypeReq.Description
providerstring · aws | azure | gcpProvider: aws (default), azure or gcp.
regionstringyesRegion 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.

ParameterTypeReq.Description
gpustringyesNormalised GPU model from /gpu/models, e.g. H100 SXM, H200, B200, A100 SXM 80GB, L40S, RTX 4090.
providerstringRestrict to one provider (runpod, vast, datacrunch, lambda, vultr, linode, oci).
marketstringRestrict 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.

ParameterTypeReq.Description
gpustringyesNormalised GPU model from /gpu/models.
fromstring · dateFirst day (inclusive), YYYY-MM-DD. Default: earliest.
tostring · dateLast 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.

ParameterTypeReq.Description
tickerstringyesTicker from /index/tickers, e.g. CX.H100SXM.NEO or CX.H100SXM.SPOT.US-EAST-1.
daystring · dateFixing 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.

ParameterTypeReq.Description
tickerstringyesTicker from /index/tickers.
fromstring · dateFirst day, YYYY-MM-DD. Default: earliest.
tostring · dateLast 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.

ParameterTypeReq.Description
daystring · dateFixing 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.

ParameterTypeReq.Description
gpustringyesNormalised GPU model, e.g. H100 SXM.
daystring · dateYYYY-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.

ParameterTypeReq.Description
gpustringyesNormalised GPU model.
fromstring · dateYYYY-MM-DD.
tostring · dateYYYY-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.

ParameterTypeReq.Description
daystring · dateYYYY-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.

ParameterTypeReq.Description
modelstringyesCanonical model slug from /tokens/models.
daystring · dateYYYY-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.

ParameterTypeReq.Description
tickerstringyesCX.TOK.<MODELCODE>.IN | OUT | BLEND, or CX.TOK.FRONTIER.<side>.
daystring · dateYYYY-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).

ParameterTypeReq.Description
tickerstringyesToken ticker.
fromstring · dateYYYY-MM-DD.
tostring · dateYYYY-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.

ParameterTypeReq.Description
daystring · dateYYYY-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).

ParameterTypeReq.Description
providerstring · aws | gcp | azureyesCloud provider. One of aws, gcp, azure.
regionstringyesRegion 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.
instancestringyesInstance / 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.

ParameterTypeReq.Description
gpustringyesNormalised 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.

ParameterTypeReq.Description
regionstring · us-east | us-west-2 | eu-westyesAzure region slug: us-east, us-west-2 or eu-west.
skustringOptional SKU name (for example D2s_v5). Default: every SKU.
fromstring · dateFirst sample date (inclusive), YYYY-MM-DD. Default: earliest.
tostring · dateLast 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+`."
          }
        }
      }
    }
  }
}