{"openapi":"3.1.0","info":{"title":"OpenGrid Data API","version":"2026-11-03","description":"Real-time GPU compute market data: prices, indices, fixings, capacity, costs, reliability, events and news."},"servers":[{"url":"https://data.tryopengrid.com"}],"security":[{"bearer":[]}],"tags":[{"name":"Reference","description":"GPUs, families, providers and regions: the ids every other route uses."},{"name":"Markets","description":"One row per GPU across every provider: price range, spread and history."},{"name":"Listings","description":"Every individual offer as the provider publishes it."},{"name":"Reserved","description":"Reserved and committed-term prices beside on-demand."},{"name":"Indices","description":"OpenGrid's GPU price indices and their levels over time."},{"name":"Fixings","description":"Official fixings: exact decimal values in a verifiable hash chain."},{"name":"Capacity","description":"What providers report as in stock, by SKU and region."},{"name":"Costs","description":"Egress, storage, billing increments, and the full cost of a job."},{"name":"FX","description":"The reference exchange rates used to convert non-USD prices."},{"name":"Reliability","description":"OpenGrid's own probes of provider APIs, plus provider-reported incidents."},{"name":"Events","description":"Market events and major shifts detected in the data."},{"name":"News","description":"Story-clustered GPU market news and the timeline around price moves."},{"name":"Macro","description":"Public context series (power, filings) beside prices."},{"name":"Methodology","description":"How every number is computed, as machine-readable documents."},{"name":"Bulk exports","description":"One completed UTC day of a dataset as a gzipped JSON-lines file."}],"paths":{"/v1/families":{"get":{"tags":["Reference"],"summary":"List GPU families","description":"GPU families and their canonical variants.","operationId":"list-gpu-families","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"architecture":{"type":["null","string"]},"cheapest_variant_now":{"type":["null","object"],"properties":{"gpu":{"type":"string"},"gpu_name":{"type":"string"},"label":{"type":"string"},"price_per_gpu_hour":{"type":"number"},"provider":{"type":"string"},"provider_name":{"type":"string"}}},"id":{"type":"string"},"kind":{"type":"string"},"link":{"type":"string"},"member_families":{"type":["array","null"],"items":{"type":"string"}},"name":{"type":"string"},"variants":{"type":"array","items":{"type":"object","properties":{"gpu":{"type":"string"},"gpu_name":{"type":"string"},"price":{"type":"object","properties":{"currency":{"type":"string"},"high":{"type":["null","number"]},"low":{"type":["null","number"]},"median":{"type":["null","number"]},"unit":{"type":"string"}}},"providers":{"type":"number"}}}},"variants_priced":{"type":"number"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/families/{family}":{"get":{"tags":["Reference"],"summary":"Get a GPU family","description":"One GPU family: every variant side by side.","operationId":"get-a-gpu-family","parameters":[{"name":"family","in":"path","required":true,"schema":{"type":"string"},"description":"GPU family id, e.g. `h100`.","example":"h100"},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"architecture":{"type":"string"},"cheapest_variant_now":{"type":"object","properties":{"gpu":{"type":"string"},"gpu_name":{"type":"string"},"label":{"type":"string"},"price_per_gpu_hour":{"type":"number"},"provider":{"type":"string"},"provider_name":{"type":"string"}}},"composite_index":{"type":"string"},"id":{"type":"string"},"kind":{"type":"string"},"member_families":{"type":"null"},"name":{"type":"string"},"note":{"type":"string"},"variants":{"type":"array","items":{"type":"object","properties":{"gpu":{"type":"string"},"gpu_name":{"type":"string"},"index":{"type":"object","properties":{"change_24h":{"type":"object","properties":{"pct":{"type":["null","number"]},"reason":{"type":["null","string"]}}},"id":{"type":"string"},"level":{"type":["null","number"]},"published":{"type":"boolean"}}},"links":{"type":"object","properties":{"gpu":{"type":"string"},"history":{"type":"string"},"market":{"type":"string"},"regions":{"type":"string"}}},"listings":{"type":"object","properties":{"available":{"type":"number"},"priced":{"type":"number"}}},"low_provider":{"type":["null","string"]},"price":{"type":"object","properties":{"currency":{"type":"string"},"high":{"type":["null","number"]},"low":{"type":["null","number"]},"median":{"type":["null","number"]},"unit":{"type":"string"}}},"providers":{"type":"number"},"reason":{"type":["null","string"]}}}},"variants_priced":{"type":"number"},"variants_total":{"type":"number"}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/gpus":{"get":{"tags":["Reference"],"summary":"List GPUs","description":"Every canonical GPU: reference data and vendor specs.","operationId":"list-gpus","parameters":[{"name":"vendor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor"}},{"name":"family","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Family"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"architecture":{"type":"string"},"bf16_tflops_dense":{"type":["null","number"]},"datacenter":{"type":"boolean"},"families":{"type":"array","items":{"type":"string"}},"form_factor":{"type":["null","string"]},"fp16_tflops_dense":{"type":["null","number"]},"fp32_tflops":{"type":["null","number"]},"fp8_supported":{"type":"boolean"},"fp8_tflops_dense":{"type":["null","number"]},"fraction_of_parent":{"type":"number"},"generation":{"type":"string"},"id":{"type":"string"},"interconnect":{"type":["null","string"]},"memory_bandwidth_tbps":{"type":["null","number"]},"memory_type":{"type":["null","string"]},"name":{"type":"string"},"notes":{"type":"string"},"nvlink":{"type":["null","string"]},"parent":{"type":"string"},"released":{"type":"number"},"segment":{"type":"string"},"sources":{"type":"array","items":{"type":"string"}},"tdp_w":{"type":["null","number"]},"vendor":{"type":"string"},"vram_gb":{"type":"number"},"workload_class":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/gpus/{gpu}":{"get":{"tags":["Reference"],"summary":"Get a GPU","description":"One GPU: reference data and vendor specs.","operationId":"get-a-gpu","parameters":[{"name":"gpu","in":"path","required":true,"schema":{"type":"string"},"description":"GPU id, e.g. `nvidia-h100-80gb-sxm5`. Older short names (`h100-80gb-sxm5`) are accepted as aliases; responses always return the id.","example":"nvidia-h100-80gb-sxm5"},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"architecture":{"type":"string"},"bf16_tflops_dense":{"type":"number"},"datacenter":{"type":"boolean"},"families":{"type":"array","items":{"type":"string"}},"form_factor":{"type":"string"},"fp16_tflops_dense":{"type":"number"},"fp32_tflops":{"type":"number"},"fp8_supported":{"type":"boolean"},"fp8_tflops_dense":{"type":"number"},"generation":{"type":"string"},"id":{"type":"string"},"interconnect":{"type":"string"},"memory_bandwidth_tbps":{"type":"number"},"memory_type":{"type":"string"},"name":{"type":"string"},"notes":{"type":"string"},"nvlink":{"type":"string"},"released":{"type":"number"},"segment":{"type":"string"},"sources":{"type":"array","items":{"type":"string"}},"tdp_w":{"type":"number"},"vendor":{"type":"string"},"vram_gb":{"type":"number"},"workload_class":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/providers":{"get":{"tags":["Reference"],"summary":"List providers","description":"Every provider: meta, coverage, relative value, feed health.","operationId":"list-providers","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"coverage":{"type":"object","properties":{"architectures":{"type":"array","items":{"type":"string"}},"gpu_ids":{"type":"array","items":{"type":"string"}},"gpus":{"type":"number"},"listings":{"type":"object","properties":{"live":{"type":"number"},"priced":{"type":"number"}}},"region_groups":{"type":"array","items":{"type":"string"}}}},"facts":{"type":"array","items":{"type":"string"}},"feed_health":{"type":["null","object"],"properties":{"avg_latency_ms_24h":{"type":"null"},"failure_rate_24h":{"type":"number"},"fetches_24h":{"type":"number"},"last_fetch":{"type":"string"},"last_ok_fetch":{"type":"string"},"reason":{"type":"null"}}},"listing_lifetime":{"type":["null","object"],"properties":{"label":{"type":"string"},"listings":{"type":"number"},"median_hours":{"type":["null","number"]},"reason":{"type":["null","string"]}}},"note":{"type":"string"},"provider":{"type":"string"},"provider_class":{"type":"string"},"provider_name":{"type":"string"},"relative_value":{"type":["null","object"],"properties":{"availability":{"type":"number"},"cheapest_share":{"type":"number"},"premium_avg":{"type":"number"},"reasons":{"type":"object","properties":{"volatility_daily":{"type":"string"}}},"samples":{"type":"object","properties":{"days":{"type":"number"},"hours_compared":{"type":"number"},"hours_market":{"type":"number"},"hours_priced":{"type":"number"},"hours_tracked":{"type":"number"}}},"top3_share":{"type":"number"},"volatility_daily":{"type":["null","number"]}}},"source":{"type":"string"},"source_type":{"type":"string"},"website":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/providers/{provider}":{"get":{"tags":["Reference"],"summary":"Get a provider","description":"One provider: catalog, pricing vs market, rank history, health.","operationId":"get-a-provider","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"},"description":"Provider id, e.g. `lambda`.","example":"lambda"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"beats_the_market":{"type":"array","items":{"type":"object","properties":{"basis":{"type":"string"},"gpu":{"type":"string"},"gpu_name":{"type":"string"},"premium":{"type":"number"}}}},"catalog":{"type":"array","items":{"type":"object","properties":{"gpu":{"type":"string"},"gpu_name":{"type":"string"},"listings":{"type":"object","properties":{"available":{"type":"number"},"live":{"type":"number"},"priced":{"type":"number"}}},"market":{"type":"object","properties":{"median":{"type":"number"},"providers":{"type":"number"}}},"premium_now":{"type":["null","number"]},"price_per_gpu_hour":{"type":["null","number"]},"rank_now":{"type":["null","number"]},"region_groups":{"type":"array","items":{"type":"string"}},"window":{"type":"object","properties":{"availability":{"type":"number"},"cheapest_share":{"type":"number"},"premium_avg":{"type":["null","number"]},"reasons":{"type":"object","properties":{"premium_avg":{"type":"string"},"rank_distribution":{"type":"string"},"volatility_daily":{"type":"string"}}},"samples":{"type":"object","properties":{"days":{"type":"number"},"hours_compared":{"type":"number"},"hours_market":{"type":"number"},"hours_priced":{"type":"number"},"hours_tracked":{"type":"number"}}},"top3_share":{"type":"number"},"volatility_daily":{"type":["null","number"]}}}}}},"coverage":{"type":"object","properties":{"architectures":{"type":"array","items":{"type":"string"}},"gpu_ids":{"type":"array","items":{"type":"string"}},"gpus":{"type":"number"},"listings":{"type":"object","properties":{"live":{"type":"number"},"priced":{"type":"number"}}},"region_groups":{"type":"array","items":{"type":"string"}}}},"expensive":{"type":"array","items":{"type":"object","properties":{"basis":{"type":"string"},"gpu":{"type":"string"},"gpu_name":{"type":"string"},"premium":{"type":"number"}}}},"facts":{"type":"array","items":{"type":"string"}},"feed_health":{"type":"object","properties":{"avg_latency_ms_24h":{"type":"null"},"failure_rate_24h":{"type":"number"},"fetches_24h":{"type":"number"},"last_fetch":{"type":"string"},"last_ok_fetch":{"type":"string"},"reason":{"type":"null"}}},"listing_lifetime":{"type":"object","properties":{"label":{"type":"string"},"listings":{"type":"number"},"median_hours":{"type":"number"},"reason":{"type":"null"}}},"note":{"type":"string"},"provider":{"type":"string"},"provider_class":{"type":"string"},"provider_name":{"type":"string"},"rank_distribution":{"type":"object","additionalProperties":{"type":"number"}},"rank_history":{"type":"array","items":{"type":"object","properties":{"availability":{"type":"number"},"cheapest_share":{"type":["null","number"]},"day":{"type":"string"},"hours_compared":{"type":"number"},"hours_market":{"type":"number"},"mean_rank":{"type":["null","number"]},"premium_avg":{"type":["null","number"]},"top3_share":{"type":["null","number"]}}}},"relative_value":{"type":"object","properties":{"availability":{"type":"number"},"cheapest_share":{"type":"number"},"premium_avg":{"type":"number"},"reasons":{"type":"object"},"samples":{"type":"object","properties":{"days":{"type":"number"},"hours_compared":{"type":"number"},"hours_market":{"type":"number"},"hours_priced":{"type":"number"},"hours_tracked":{"type":"number"}}},"top3_share":{"type":"number"},"volatility_daily":{"type":"number"}}},"source":{"type":"string"},"source_type":{"type":"string"},"website":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/providers/{provider}/gpus/{gpu}/context":{"get":{"tags":["Reference"],"summary":"Provider price in context","description":"One provider's price for a GPU against its own recorded history.","operationId":"provider-price-in-context","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"},"description":"Provider id, e.g. `lambda`.","example":"lambda"},{"name":"gpu","in":"path","required":true,"schema":{"type":"string"},"description":"GPU id, e.g. `nvidia-h100-80gb-sxm5`. Older short names (`h100-80gb-sxm5`) are accepted as aliases; responses always return the id.","example":"nvidia-h100-80gb-sxm5"},{"name":"segment","in":"query","required":false,"schema":{"enum":["on_demand","spot"],"type":"string","default":"on_demand","title":"Segment"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"current":{"type":"number"},"gpu":{"type":"string"},"gpu_name":{"type":"string"},"historical":{"type":"object","properties":{"from_high_pct":{"type":"number"},"from_low_pct":{"type":"number"},"high":{"type":"object","properties":{"hour":{"type":"string"},"value":{"type":"number"}}},"low":{"type":"object","properties":{"hour":{"type":"string"},"value":{"type":"number"}}},"samples":{"type":"number"},"since":{"type":"string"}}},"hour":{"type":"string"},"interruptible":{"type":"boolean"},"label":{"type":"null"},"label_reason":{"type":"string"},"label_window":{"type":"null"},"price_concept":{"type":"string"},"provider":{"type":"string"},"provider_name":{"type":"string"},"reason":{"type":"null"},"recorded_since":{"type":"string"},"segment":{"type":"string"},"summaries":{"type":"array","items":{"type":"string"}},"vs_market_median_pct":{"type":"number"},"windows":{"type":"object","additionalProperties":{"type":"object","properties":{"coverage":{"type":"number"},"distance_from_median_pct":{"type":"null"},"first_sample":{"type":"string"},"label":{"type":"null"},"max":{"type":"null"},"median":{"type":"null"},"min":{"type":"null"},"percentile":{"type":"null"},"reason":{"type":"string"},"samples":{"type":"number"},"window":{"type":"string"},"window_hours":{"type":"number"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/providers/{provider}/listings/context":{"get":{"tags":["Reference"],"summary":"Listing price in context","description":"One listing's price against its own recorded history (90 days).","operationId":"listing-price-in-context","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"},"description":"Provider id, e.g. `lambda`.","example":"lambda"},{"name":"listing_id","in":"query","required":true,"schema":{"type":"string","title":"Listing Id"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Field-level schema not published for this route yet; send a request to see one."},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/regions":{"get":{"tags":["Reference"],"summary":"List region groups","description":"Region groups and what is listed in each now.","operationId":"list-region-groups","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"gpus":{"type":"number"},"listings":{"type":"object","properties":{"live":{"type":"number"},"priced":{"type":"number"}}},"provider_ids":{"type":"array","items":{"type":"string"}},"providers":{"type":"number"},"region_group":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/markets":{"get":{"tags":["Markets"],"summary":"List markets","description":"Current market per GPU: price, spread, efficiency score.","operationId":"list-markets","parameters":[{"name":"min_providers","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Min Providers"}},{"name":"vendor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"trend","in":"query","required":false,"schema":{"type":"boolean","description":"add change (lowest price over `hours`) and trend (a small series)","default":false,"title":"Trend"},"description":"add change (lowest price over `hours`) and trend (a small series)"},{"name":"hours","in":"query","required":false,"schema":{"type":"number","maximum":2160,"minimum":0,"description":"trend window; 0 = everything recorded","default":24,"title":"Hours"},"description":"trend window; 0 = everything recorded"},{"name":"points","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":2,"description":"trend points","default":48,"title":"Points"},"description":"trend points"},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"gpu":{"type":"string"},"gpu_name":{"type":"string"},"high_provider":{"type":"string"},"listings":{"type":"object","properties":{"availability_unknown":{"type":"number"},"available":{"type":"number"},"live":{"type":"number"},"priced":{"type":"number"},"sold_out":{"type":"number"}}},"low_provider":{"type":"string"},"price":{"type":"object","properties":{"currency":{"type":"string"},"high":{"type":"number"},"low":{"type":"number"},"median":{"type":"number"},"unit":{"type":"string"}}},"providers":{"type":"number"},"score":{"type":"object","properties":{"confidence":{"type":["null","string"]},"efficiency":{"type":["null","number"]},"fragmentation":{"type":["null","number"]},"label":{"type":["null","string"]},"reason":{"type":["null","string"]}}},"spread":{"type":"object","properties":{"abs":{"type":"number"},"pct_of_low":{"type":"number"},"pct_of_median":{"type":"number"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/markets/{gpu}":{"get":{"tags":["Markets"],"summary":"Get a market","description":"One GPU's market: price, stats, providers, capability, alternatives.","operationId":"get-a-market","parameters":[{"name":"gpu","in":"path","required":true,"schema":{"type":"string"},"description":"GPU id, e.g. `nvidia-h100-80gb-sxm5`. Older short names (`h100-80gb-sxm5`) are accepted as aliases; responses always return the id.","example":"nvidia-h100-80gb-sxm5"},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"alternatives":{"type":"object","properties":{"alternatives":{"type":"array","items":{"type":"object","properties":{"architecture":{"type":"string"},"available_listings":{"type":"number"},"delta":{"type":"object","properties":{"bf16_tflops":{"type":"number"},"low_price":{"type":"number"},"median_price":{"type":"number"},"memory_bandwidth":{"type":"number"},"vram":{"type":"number"}}},"gpu":{"type":"string"},"gpu_name":{"type":"string"},"low":{"type":"number"},"median":{"type":"number"},"providers":{"type":"number"},"shares":{"type":"array","items":{"type":"string"}},"vram_gb":{"type":"number"},"workload_class":{"type":"string"}}}},"gpu":{"type":"string"},"gpu_name":{"type":"string"},"note":{"type":"string"},"target":{"type":"object","properties":{"available_listings":{"type":"number"},"low":{"type":"number"},"median":{"type":"number"},"providers":{"type":"number"}}}}},"by_provider":{"type":"array","items":{"type":"object","properties":{"available":{"type":"boolean"},"change_24h":{"type":"object","properties":{"basis":{"type":"string"},"from":{"type":["null","number"]},"pct":{"type":["null","number"]},"reason":{"type":["null","string"]},"since":{"type":"string"},"status":{"type":"string"},"to":{"type":"number"}}},"listing_id":{"type":"string"},"listings":{"type":"number"},"premium_vs_others_median":{"type":"number"},"price":{"type":"number"},"provider":{"type":"string"},"provider_name":{"type":"string"},"rank":{"type":"number"},"region":{"type":["null","string"]},"sku":{"type":"string"}}}},"capability":{"type":"object","properties":{"gpu":{"type":"string"},"gpu_name":{"type":"string"},"label":{"type":"string"},"metrics":{"type":"object","properties":{"per_bf16_tflop_hour":{"type":"object","properties":{"low":{"type":"number"},"median":{"type":"number"},"reason":{"type":"null"},"spec_field":{"type":"string"},"spec_value":{"type":"number"},"unit":{"type":"string"}}},"per_fp16_tflop_hour":{"type":"object","properties":{"low":{"type":"number"},"median":{"type":"number"},"reason":{"type":"null"},"spec_field":{"type":"string"},"spec_value":{"type":"number"},"unit":{"type":"string"}}},"per_fp8_tflop_hour":{"type":"object","properties":{"low":{"type":"number"},"median":{"type":"number"},"reason":{"type":"null"},"spec_field":{"type":"string"},"spec_value":{"type":"number"},"unit":{"type":"string"}}},"per_gb_vram_hour":{"type":"object","properties":{"low":{"type":"number"},"median":{"type":"number"},"reason":{"type":"null"},"spec_field":{"type":"string"},"spec_value":{"type":"number"},"unit":{"type":"string"}}},"per_tbps_bandwidth_hour":{"type":"object","properties":{"low":{"type":"number"},"median":{"type":"number"},"reason":{"type":"null"},"spec_field":{"type":"string"},"spec_value":{"type":"number"},"unit":{"type":"string"}}}}}}},"context":{"type":"object","properties":{"current":{"type":"object","properties":{"highest":{"type":"number"},"lowest":{"type":"number"},"median":{"type":"number"},"providers":{"type":"number"}}},"gpu":{"type":"string"},"gpu_name":{"type":"string"},"hour":{"type":"string"},"interruptible":{"type":"boolean"},"label":{"type":"null"},"label_reason":{"type":"string"},"label_window":{"type":"null"},"metrics":{"type":"object","properties":{"lowest":{"type":"object","properties":{"current":{"type":"number"},"historical":{"type":"object","properties":{"from_high_pct":{"type":"number"},"from_low_pct":{"type":"number"},"high":{"type":"object","properties":{"hour":{"type":"string"},"value":{"type":"number"}}},"low":{"type":"object","properties":{"hour":{"type":"string"},"value":{"type":"number"}}},"samples":{"type":"number"},"since":{"type":"string"}}},"summaries":{"type":"array","items":{"type":"string"}},"windows":{"type":"object","additionalProperties":{"type":"object","properties":{"coverage":{"type":"number"},"current":{"type":"null"},"distance_from_median_pct":{"type":"null"},"excluded_recent_providers":{"type":"array","items":{"type":"string"}},"first_sample":{"type":"null"},"label":{"type":"null"},"max":{"type":"null"},"median":{"type":"null"},"min":{"type":"null"},"panel":{"type":"array","items":{}},"percentile":{"type":"null"},"reason":{"type":"string"},"samples":{"type":"number"},"window":{"type":"string"},"window_hours":{"type":"number"}}}}}},"median":{"type":"object","properties":{"current":{"type":"number"},"historical":{"type":"object","properties":{"from_high_pct":{"type":"number"},"from_low_pct":{"type":"number"},"high":{"type":"object","properties":{"hour":{"type":"string"},"value":{"type":"number"}}},"low":{"type":"object","properties":{"hour":{"type":"string"},"value":{"type":"number"}}},"samples":{"type":"number"},"since":{"type":"string"}}},"summaries":{"type":"array","items":{"type":"string"}},"windows":{"type":"object","additionalProperties":{"type":"object","properties":{"coverage":{"type":"number"},"current":{"type":"null"},"distance_from_median_pct":{"type":"null"},"excluded_recent_providers":{"type":"array","items":{"type":"string"}},"first_sample":{"type":"null"},"label":{"type":"null"},"max":{"type":"null"},"median":{"type":"null"},"min":{"type":"null"},"panel":{"type":"array","items":{}},"percentile":{"type":"null"},"reason":{"type":"string"},"samples":{"type":"number"},"window":{"type":"string"},"window_hours":{"type":"number"}}}}}}}},"price_concept":{"type":"string"},"reason":{"type":"null"},"segment":{"type":"string"},"summaries":{"type":"array","items":{"type":"string"}}}},"gpu":{"type":"string"},"gpu_name":{"type":"string"},"listings":{"type":"object","properties":{"availability_unknown":{"type":"number"},"available":{"type":"number"},"live":{"type":"number"},"priced":{"type":"number"},"sold_out":{"type":"number"},"stats":{"type":"object","properties":{"high":{"type":"number"},"low":{"type":"number"},"median":{"type":"number"},"n":{"type":"number"},"q1":{"type":"number"},"q3":{"type":"number"},"stdev":{"type":"number"}}}}},"price":{"type":"object","properties":{"currency":{"type":"string"},"high":{"type":"number"},"low":{"type":"number"},"median":{"type":"number"},"unit":{"type":"string"}}},"providers":{"type":"number"},"score":{"type":"object","properties":{"components":{"type":"object","properties":{"c_cv":{"type":"number"},"c_iqr":{"type":"number"},"c_range":{"type":"number"},"cv_adj":{"type":"number"},"iqr_rel":{"type":"number"},"range":{"type":"number"}}},"confidence":{"type":"string"},"efficiency":{"type":"number"},"fragmentation":{"type":"number"},"label":{"type":"string"},"reason":{"type":"null"},"saturation":{"type":"object","properties":{"cv":{"type":"number"},"iqr_rel":{"type":"number"},"range":{"type":"number"}}},"weights":{"type":"object","properties":{"cv":{"type":"number"},"iqr":{"type":"number"},"range":{"type":"number"}}}}},"stats":{"type":"object","properties":{"cv":{"type":"number"},"high":{"type":"number"},"iqr":{"type":"number"},"iqr_rel":{"type":"number"},"low":{"type":"number"},"mean":{"type":"number"},"median":{"type":"number"},"n":{"type":"number"},"q1":{"type":"number"},"q3":{"type":"number"},"reasons":{"type":"object"},"spread_abs":{"type":"number"},"spread_pct_of_low":{"type":"number"},"spread_pct_of_median":{"type":"number"},"stdev":{"type":"number"}}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/markets/{gpu}/history":{"get":{"tags":["Markets"],"summary":"Market history","description":"One GPU over time: low / median / high / provider count + index.","operationId":"market-history","parameters":[{"name":"gpu","in":"path","required":true,"schema":{"type":"string"},"description":"GPU id, e.g. `nvidia-h100-80gb-sxm5`. Older short names (`h100-80gb-sxm5`) are accepted as aliases; responses always return the id.","example":"nvidia-h100-80gb-sxm5"},{"name":"window","in":"query","required":false,"schema":{"enum":["24h","7d","30d","90d","ytd","all"],"type":"string","default":"30d","title":"Window"}},{"name":"interval","in":"query","required":false,"schema":{"anyOf":[{"enum":["1h","1d"],"type":"string"},{"type":"null"}],"title":"Interval"}},{"name":"segment","in":"query","required":false,"schema":{"enum":["on_demand","spot"],"type":"string","default":"on_demand","title":"Segment"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"coherent_from":{"type":"string"},"currency":{"type":"string"},"gpu":{"type":"string"},"gpu_name":{"type":"string"},"index":{"type":"object","properties":{"index":{"type":"string"},"points":{"type":"array","items":{"type":"object","properties":{"constituents":{"type":"number"},"level":{"type":["null","number"]},"link_constituents":{"type":["null","number"]},"published":{"type":"boolean"},"raw_level":{"type":"number"},"reason":{"type":["null","string"]},"segment_no":{"type":["null","number"]},"t":{"type":"string"}}}}}},"interval":{"type":"string"},"latest_hour":{"type":"string"},"providers_joined":{"type":"array","items":{"type":"object","properties":{"first_hour":{"type":"string"},"provider":{"type":"string"},"provider_name":{"type":"string"}}}},"segment":{"type":"string"},"series":{"type":"array","items":{"type":"object","properties":{"high":{"type":"number"},"low":{"type":"number"},"median":{"type":"number"},"providers":{"type":"number"},"t":{"type":"string"}}}},"unit":{"type":"string"},"window":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/markets/{gpu}/history/archived":{"get":{"tags":["Markets"],"summary":"Archived price history","description":"One GPU's ARCHIVED price history: public archive captures of provider price pages.","operationId":"archived-price-history","parameters":[{"name":"gpu","in":"path","required":true,"schema":{"type":"string"},"description":"GPU id, e.g. `nvidia-h100-80gb-sxm5`. Older short names (`h100-80gb-sxm5`) are accepted as aliases; responses always return the id.","example":"nvidia-h100-80gb-sxm5"},{"name":"segment","in":"query","required":false,"schema":{"enum":["on_demand","spot"],"type":"string","default":"on_demand","title":"Segment"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"gpu":{"type":"string"},"gpu_name":{"type":"string"},"kind":{"type":"string"},"monthly":{"type":"array","items":{}},"observed_from":{"type":"string"},"points":{"type":"array","items":{}},"providers":{"type":"array","items":{}},"segment":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/markets/{gpu}/history/daily":{"get":{"tags":["Markets"],"summary":"Daily market history","description":"One GPU, daily, as far back as archives reach: archived before recording, observed after.","operationId":"daily-market-history","parameters":[{"name":"gpu","in":"path","required":true,"schema":{"type":"string"},"description":"GPU id, e.g. `nvidia-h100-80gb-sxm5`. Older short names (`h100-80gb-sxm5`) are accepted as aliases; responses always return the id.","example":"nvidia-h100-80gb-sxm5"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":3660,"minimum":0,"description":"0 = everything archived","default":365,"title":"Days"},"description":"0 = everything archived"},{"name":"segment","in":"query","required":false,"schema":{"enum":["on_demand","spot"],"type":"string","default":"on_demand","title":"Segment"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"archived_until":{"type":"string"},"days":{"type":"array","items":{"type":"string"}},"gpu":{"type":"string"},"gpu_name":{"type":"string"},"hold_days":{"type":"number"},"kind":{"type":"array","items":{"type":"string"}},"market":{"type":"object","properties":{"high":{"type":"array","items":{"type":["null","number"]}},"low":{"type":"array","items":{"type":["null","number"]}},"median":{"type":"array","items":{"type":["null","number"]}},"providers":{"type":"array","items":{"type":"number"}}}},"providers":{"type":"array","items":{"type":"object","properties":{"capture":{"type":"array","items":{"type":"null"}},"captures":{"type":"array","items":{}},"provider":{"type":"string"},"provider_name":{"type":"string"},"values":{"type":"array","items":{"type":["null","number"]}}}}},"resolution":{"type":"string"},"segment":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/markets/{gpu}/history/dispersion":{"get":{"tags":["Markets"],"summary":"Price dispersion history","description":"Dispersion of one GPU over time.","operationId":"price-dispersion-history","parameters":[{"name":"gpu","in":"path","required":true,"schema":{"type":"string"},"description":"GPU id, e.g. `nvidia-h100-80gb-sxm5`. Older short names (`h100-80gb-sxm5`) are accepted as aliases; responses always return the id.","example":"nvidia-h100-80gb-sxm5"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"interval","in":"query","required":false,"schema":{"type":"string","pattern":"^(1h|1d)$","default":"1d","title":"Interval"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"days":{"type":"number"},"gpu":{"type":"string"},"gpu_name":{"type":"string"},"interval":{"type":"string"},"note":{"type":"string"},"points":{"type":"array","items":{"type":"object","properties":{"close_high":{"type":"number"},"close_low":{"type":"number"},"close_median":{"type":"number"},"close_providers":{"type":"number"},"cv_hours":{"type":"number"},"cv_mean":{"type":["null","number"]},"hours_market":{"type":"number"},"iqr_rel_mean":{"type":["null","number"]},"providers_max":{"type":"number"},"spread_pct_of_low_mean":{"type":["null","number"]},"t":{"type":"string"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/markets/{gpu}/history/providers":{"get":{"tags":["Markets"],"summary":"Price history by provider","description":"Each provider's price over time for one GPU, with the market low / median / high.","operationId":"price-history-by-provider","parameters":[{"name":"gpu","in":"path","required":true,"schema":{"type":"string"},"description":"GPU id, e.g. `nvidia-h100-80gb-sxm5`. Older short names (`h100-80gb-sxm5`) are accepted as aliases; responses always return the id.","example":"nvidia-h100-80gb-sxm5"},{"name":"hours","in":"query","required":false,"schema":{"type":"number","maximum":2160,"minimum":0,"description":"0 = everything recorded","default":24,"title":"Hours"},"description":"0 = everything recorded"},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"change_pct":{"type":"number"},"change_since":{"type":"string"},"gpu":{"type":"string"},"gpu_name":{"type":"string"},"high":{"type":"array","items":{"type":"number"}},"hours":{"type":"number"},"low":{"type":"array","items":{"type":"number"}},"market_from":{"type":"string"},"median":{"type":"array","items":{"type":"number"}},"providers":{"type":"array","items":{"type":"object","properties":{"available":{"type":["boolean","null"]},"change_pct":{"type":["null","number"]},"first_seen":{"type":"string"},"gpu_count":{"type":["null","number"]},"now":{"type":["null","number"]},"provider":{"type":"string"},"provider_name":{"type":"string"},"region":{"type":["null","string"]},"series":{"type":"array","items":{"type":["null","number"]}},"sku":{"type":["null","string"]}}}},"t0":{"type":"string"},"t1":{"type":"string"},"times":{"type":"array","items":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/markets/{gpu}/regions":{"get":{"tags":["Markets"],"summary":"Market by region","description":"One GPU by region group: cheapest, median, providers, premium.","operationId":"market-by-region","parameters":[{"name":"gpu","in":"path","required":true,"schema":{"type":"string"},"description":"GPU id, e.g. `nvidia-h100-80gb-sxm5`. Older short names (`h100-80gb-sxm5`) are accepted as aliases; responses always return the id.","example":"nvidia-h100-80gb-sxm5"},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"global":{"type":"object","properties":{"price":{"type":"object","properties":{"currency":{"type":"string"},"high":{"type":"number"},"low":{"type":"number"},"median":{"type":"number"},"unit":{"type":"string"}}},"providers":{"type":"number"}}},"gpu":{"type":"string"},"gpu_name":{"type":"string"},"regions":{"type":"array","items":{"type":"object","properties":{"listings":{"type":"object","properties":{"available":{"type":"number"},"live":{"type":"number"}}},"low_provider":{"type":["null","string"]},"premium_vs_global_median":{"type":["null","number"]},"price":{"type":"object","properties":{"currency":{"type":"string"},"high":{"type":["null","number"]},"low":{"type":["null","number"]},"median":{"type":["null","number"]},"unit":{"type":"string"}}},"provider_ids":{"type":"array","items":{"type":"string"}},"providers":{"type":"number"},"reason":{"type":["null","string"]},"region_group":{"type":"string"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/listings":{"get":{"tags":["Listings"],"summary":"List listings","description":"Current price listings: every offer, cheapest first, with provenance.","operationId":"list-listings","parameters":[{"name":"gpu","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gpu"}},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"region_group","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region Group"}},{"name":"market_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market Type"}},{"name":"available","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Available"}},{"name":"as_of","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"the listings as published at this time (UTC)","title":"As Of"},"description":"the listings as published at this time (UTC)"},{"name":"previous","in":"query","required":false,"schema":{"type":"boolean","description":"add price_change: the price before the newest recorded change","default":false,"title":"Previous"},"description":"add price_change: the price before the newest recorded change"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"available":{"type":"boolean"},"capacity":{"type":"null"},"capacity_unit":{"type":"null"},"country":{"type":["null","string"]},"currency":{"type":"string"},"first_seen_at":{"type":"string"},"gpu":{"type":"string"},"gpu_count":{"type":"number"},"gpu_name":{"type":"string"},"interruptible":{"type":"boolean"},"listing_id":{"type":"string"},"market_type":{"type":"string"},"observed_at":{"type":"string"},"original":{"type":"null"},"price_change":{"type":"null"},"price_per_gpu_hour":{"type":"number"},"price_per_instance_hour":{"type":"number"},"provider":{"type":"string"},"provider_name":{"type":"string"},"provider_tier":{"type":"null"},"ram_gb":{"type":"null"},"raw_gpu_name":{"type":"string"},"region":{"type":["null","string"]},"region_group":{"type":"string"},"sku":{"type":"string"},"storage_gb":{"type":"null"},"trust":{"type":"object","properties":{"age_seconds":{"type":"number"},"availability_basis":{"type":"string"},"confidence":{"type":"string"},"confidence_reasons":{"type":"array","items":{"type":"string"}},"flags":{"type":"array","items":{}},"freshness":{"type":"string"},"held":{"type":"array","items":{}},"last_changed":{"type":"string"},"last_fetched":{"type":"string"},"last_seen":{"type":"string"},"polling_interval_seconds":{"type":"number"},"provider_status":{"type":"string"},"source":{"type":"null"},"source_detail":{"type":"string"},"source_type":{"type":"string"}}},"vcpu":{"type":"null"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/listings/history":{"get":{"tags":["Listings"],"summary":"Listing changes","description":"Recorded listing changes (price, availability, capacity), newest first.","operationId":"listing-changes","parameters":[{"name":"gpu","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gpu"}},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"listing_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Listing Id"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"To"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"available":{"type":"boolean"},"capacity":{"type":"null"},"capacity_unit":{"type":"null"},"gpu":{"type":"string"},"gpu_count":{"type":"number"},"gpu_name":{"type":"string"},"listing_id":{"type":"string"},"market_type":{"type":"string"},"observed_at":{"type":"string"},"price_per_gpu_hour":{"type":"number"},"price_per_instance_hour":{"type":"number"},"provider":{"type":"string"},"provider_name":{"type":"string"},"region":{"type":["null","string"]}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/reserved":{"get":{"tags":["Reserved"],"summary":"List reserved prices","description":"Reserved and committed GPU prices, with the on-demand saving.","operationId":"list-reserved-prices","parameters":[{"name":"gpu","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"GPU slug or canonical name","title":"Gpu"},"description":"GPU slug or canonical name"},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"term","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"term bucket: lt1m, 1m, 3m, 6m, 1y, 2y, 3y, 5y","title":"Term"},"description":"term bucket: lt1m, 1m, 3m, 6m, 1y, 2y, 3y, 5y"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/reserved/summary":{"get":{"tags":["Reserved"],"summary":"Reserved price summary","description":"Per GPU: the cheapest reserved price in each term.","operationId":"reserved-price-summary","parameters":[{"name":"gpu","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"GPU slug or canonical name","title":"Gpu"},"description":"GPU slug or canonical name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/indices":{"get":{"tags":["Indices"],"summary":"List indices","description":"OpenGrid indices: current level and changes.","operationId":"list-indices","parameters":[{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"enum":["gpu","spot","regional","provider_class","composite"],"type":"string"},{"type":"null"}],"title":"Kind"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"change_reasons":{"type":"object","properties":{"all":{"type":"string"},"ytd":{"type":"string"}},"additionalProperties":{"type":"string"}},"changes":{"type":"object","properties":{"all":{"type":["null","number"]},"ytd":{"type":"null"}},"additionalProperties":{"type":["null","number"]}},"constituents":{"type":"number"},"coverage":{"type":"object","properties":{"chain_segment":{"type":["null","number"]},"chain_segment_start":{"type":["null","string"]},"constituents_now":{"type":"number"},"first_published":{"type":["null","string"]},"hours_30d":{"type":"number"},"published_hours_30d":{"type":"number"}}},"first_published":{"type":["null","string"]},"gpu":{"type":["null","string"]},"gpu_name":{"type":"string"},"high":{"type":["null","object"],"properties":{"hour":{"type":"string"},"level":{"type":"number"},"since":{"type":"string"}}},"hour":{"type":"string"},"id":{"type":"string"},"interruptible":{"type":"boolean"},"kind":{"type":"string"},"last_published":{"type":["null","object"],"properties":{"hour":{"type":"string"},"level":{"type":"number"}}},"level":{"type":["null","number"]},"low":{"type":["null","object"],"properties":{"hour":{"type":"string"},"level":{"type":"number"},"since":{"type":"string"}}},"name":{"type":"string"},"provider_class":{"type":"null"},"published":{"type":"boolean"},"raw_level":{"type":["null","number"]},"reason":{"type":["null","string"]},"region_group":{"type":["null","string"]},"segment":{"type":"string"},"spark_7d":{"type":"array","items":{"type":["null","number"]}},"unit":{"type":"string"},"volatility":{"type":"object","additionalProperties":{"type":"object","properties":{"annualized":{"type":"null"},"basis":{"type":"string"},"reason":{"type":"string"},"returns":{"type":"number"},"window_hours":{"type":"number"}}}}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/indices/{index_id}":{"get":{"tags":["Indices"],"summary":"Get an index","description":"One index: definition, level, constituents, statistics.","operationId":"get-an-index","parameters":[{"name":"index_id","in":"path","required":true,"schema":{"type":"string"},"description":"Index id, e.g. `h100-80gb-sxm5` (index ids are frozen, see IDs).","example":"h100-80gb-sxm5"},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"changes":{"type":"object","properties":{"all":{"type":"object","properties":{"from_hour":{"type":"string"},"from_level":{"type":"number"},"pct":{"type":"number"},"reason":{"type":"null"}}},"ytd":{"type":"object","properties":{"from_hour":{"type":"null"},"from_level":{"type":"null"},"pct":{"type":"null"},"reason":{"type":"string"}}}},"additionalProperties":{"type":"object","properties":{"from_hour":{"type":["null","string"]},"from_level":{"type":["null","number"]},"pct":{"type":["null","number"]},"reason":{"type":["null","string"]}}}},"components":{"type":"array","items":{}},"constituents":{"type":"number"},"constituents_now":{"type":"object","properties":{"constituents":{"type":"array","items":{"type":"object","properties":{"price":{"type":"number"},"provider":{"type":"string"},"provider_class":{"type":"string"},"provider_name":{"type":"string"},"recorded_since":{"type":"string"},"status":{"type":"string"}}}},"hour":{"type":"string"}}},"coverage":{"type":"object","properties":{"chain_segment":{"type":"number"},"chain_segment_start":{"type":"string"},"constituents_now":{"type":"number"},"first_published":{"type":"string"},"hours_30d":{"type":"number"},"published_hours_30d":{"type":"number"}}},"description":{"type":"string"},"gpu":{"type":"string"},"gpu_name":{"type":"string"},"high":{"type":"object","properties":{"hour":{"type":"string"},"level":{"type":"number"},"since":{"type":"string"}}},"hour":{"type":"string"},"id":{"type":"string"},"interruptible":{"type":"boolean"},"kind":{"type":"string"},"last_published":{"type":"object","properties":{"hour":{"type":"string"},"level":{"type":"number"}}},"level":{"type":"number"},"low":{"type":"object","properties":{"hour":{"type":"string"},"level":{"type":"number"},"since":{"type":"string"}}},"method":{"type":"string"},"methodology":{"type":"string"},"methodology_version":{"type":"string"},"name":{"type":"string"},"note":{"type":"null"},"price_concept":{"type":"string"},"provider_class":{"type":"null"},"published":{"type":"boolean"},"raw_level":{"type":"number"},"reason":{"type":"null"},"region_group":{"type":"null"},"segment":{"type":"string"},"spark_7d":{"type":"array","items":{"type":["null","number"]}},"unit":{"type":"string"},"volatility":{"type":"object","additionalProperties":{"type":"object","properties":{"annualized":{"type":"null"},"basis":{"type":"string"},"reason":{"type":"string"},"returns":{"type":"number"},"window_hours":{"type":"number"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/indices/{index_id}/fixings":{"get":{"tags":["Indices"],"summary":"Index fixings","description":"Official fixing history of one index.","operationId":"index-fixings","parameters":[{"name":"index_id","in":"path","required":true,"schema":{"type":"string"},"description":"Index id, e.g. `h100-80gb-sxm5` (index ids are frozen, see IDs).","example":"h100-80gb-sxm5"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"enum":["hourly","daily"],"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["final","restated","not_published"],"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"To"}},{"name":"effective","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Effective"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"fixings":{"type":"array","items":{}},"index":{"type":"string"},"index_name":{"type":"string"},"settlement_index":{"type":"boolean"},"unit":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/indices/{index_id}/history":{"get":{"tags":["Indices"],"summary":"Index history","description":"Stored index levels over a window.","operationId":"index-history","parameters":[{"name":"index_id","in":"path","required":true,"schema":{"type":"string"},"description":"Index id, e.g. `h100-80gb-sxm5` (index ids are frozen, see IDs).","example":"h100-80gb-sxm5"},{"name":"window","in":"query","required":false,"schema":{"enum":["24h","7d","30d","90d","ytd","all"],"type":"string","default":"30d","title":"Window"}},{"name":"interval","in":"query","required":false,"schema":{"anyOf":[{"enum":["1h","1d"],"type":"string"},{"type":"null"}],"title":"Interval"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"index":{"type":"string"},"index_name":{"type":"string"},"interval":{"type":"string"},"points":{"type":"array","items":{"type":"object","properties":{"constituents":{"type":"number"},"level":{"type":["null","number"]},"link_constituents":{"type":["null","number"]},"published":{"type":"boolean"},"raw_level":{"type":"number"},"reason":{"type":["null","string"]},"segment_no":{"type":["null","number"]},"t":{"type":"string"}}}},"unit":{"type":"string"},"window":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/fixings":{"get":{"tags":["Fixings"],"summary":"List latest fixings","description":"Latest official fixings of every settlement index.","operationId":"list-latest-fixings","parameters":[{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"final_through":{"type":"string"},"indices":{"type":"array","items":{"type":"object","properties":{"daily":{"type":"null"},"hourly":{"type":"null"},"index":{"type":"string"},"index_name":{"type":"string"},"provisional":{"type":"object","properties":{"final_after":{"type":"string"},"fixing_time":{"type":"string"},"note":{"type":"string"},"reason":{"type":["null","string"]},"status":{"type":"string"},"value":{"type":["null","string"]}}},"unit":{"type":"string"}}}},"ledger_head":{"type":"null"}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/fixings/chain/verify":{"get":{"tags":["Fixings"],"summary":"Verify the fixing chain","description":"Check the hash chain over the whole fixings ledger (paged).","operationId":"verify-the-fixing-chain","parameters":[{"name":"from_seq","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"From Seq"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":1000,"title":"Limit"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"break_count":{"type":"number"},"breaks":{"type":"array","items":{}},"checked":{"type":"number"},"from_seq":{"type":"null"},"head_hash":{"type":"string"},"head_seq":{"type":"null"},"ledger_rows":{"type":"number"},"next_seq":{"type":"null"},"ok":{"type":"boolean"},"result":{"type":"string"},"to_seq":{"type":"null"}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/fixings/methodology":{"get":{"tags":["Fixings"],"summary":"Fixing methodology","description":"Fixing schedule, thresholds, correction windows, change notices.","operationId":"fixing-methodology","parameters":[{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"correction_windows":{"type":"object","properties":{"daily_business_days":{"type":"number"},"hourly_hours":{"type":"number"}}},"daily":{"type":"object","properties":{"fixing_time":{"type":"string"},"hours":{"type":"number"},"min_hours":{"type":"number"},"statistic":{"type":"string"}}},"hourly":{"type":"object","properties":{"fixing_time":{"type":"string"},"rollup_overlap_hours":{"type":"number"},"safety_margin_hours":{"type":"number"},"taken_after":{"type":"string"}}},"index_methodology_version":{"type":"string"},"notices":{"type":"array","items":{}},"settlement_indices":{"type":"array","items":{"type":"string"}},"settlement_version":{"type":"string"},"sufficiency":{"type":"object","properties":{"min_components":{"type":"number"},"min_constituents":{"type":"number"}}},"surveillance":{"type":"object","properties":{"concentration_severe":{"type":"number"},"concentration_warn":{"type":"number"},"feed_outage_severe_share":{"type":"number"},"jump_pct":{"type":"number"},"new_listing_hours":{"type":"number"},"pre_fix_hours":{"type":"number"}}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/fixings/restatements":{"get":{"tags":["Fixings"],"summary":"List restatements","description":"Every restatement: what was corrected, by whom, why.","operationId":"list-restatements","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/fixings/{fixing_id}":{"get":{"tags":["Fixings"],"summary":"Get a fixing","description":"One fixing: value, flags, full inputs and raw evidence.","operationId":"get-a-fixing","parameters":[{"name":"fixing_id","in":"path","required":true,"schema":{"type":"string","pattern":"^fx-[0-9a-f]{24}$"},"description":"Fixing id, as returned by `GET /v1/fixings`."},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Field-level schema not published for this route yet; send a request to see one."},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/fixings/{fixing_id}/verify":{"get":{"tags":["Fixings"],"summary":"Verify a fixing","description":"Recompute a fixing from its stored inputs; check hashes and links.","operationId":"verify-a-fixing","parameters":[{"name":"fixing_id","in":"path","required":true,"schema":{"type":"string","pattern":"^fx-[0-9a-f]{24}$"},"description":"Fixing id, as returned by `GET /v1/fixings`."},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"break_count":{"type":"number"},"breaks":{"type":"array","items":{}},"checked":{"type":"number"},"from_seq":{"type":"null"},"head_hash":{"type":"string"},"head_seq":{"type":"null"},"ledger_rows":{"type":"number"},"next_seq":{"type":"null"},"ok":{"type":"boolean"},"result":{"type":"string"},"to_seq":{"type":"null"}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/capacity":{"get":{"tags":["Capacity"],"summary":"List capacity","description":"Provider-reported capacity, by SKU and region.","operationId":"list-capacity","parameters":[{"name":"gpu","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"GPU slug or canonical name","title":"Gpu"},"description":"GPU slug or canonical name"},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"in_stock","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"In Stock"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/capacity/history":{"get":{"tags":["Capacity"],"summary":"Capacity changes","description":"Capacity state changes, newest first.","operationId":"capacity-changes","parameters":[{"name":"gpu","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gpu"}},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"sku","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sku"}},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":7,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":500,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/costs/billing":{"get":{"tags":["Costs"],"summary":"Billing increments","description":"Billing increment and minimum per provider.","operationId":"billing-increments","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"increment_s":{"type":["null","number"]},"minimum_s":{"type":["null","number"]},"notes":{"type":["null","string"]},"products":{"type":["null","object"],"additionalProperties":{"type":"object","properties":{"increment_s":{"type":"number"},"minimum_s":{"type":"number"},"notes":{"type":"string"}}}},"provider":{"type":"string"},"provider_name":{"type":"string"},"source":{"type":"string"},"status":{"type":"string"},"verified_at":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/costs/components":{"get":{"tags":["Costs"],"summary":"Cost components","description":"Egress, storage and other cost components per provider.","operationId":"cost-components","parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"component","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"allowance_scope":{"type":["null","string"]},"as_of":{"type":"string"},"billed_when_stopped":{"type":["boolean","null"]},"component":{"type":"string"},"kind":{"type":"string"},"listing_id":{"type":"null"},"notes":{"type":["null","string"]},"origin":{"type":"string"},"product":{"type":"string"},"provider":{"type":"string"},"provider_name":{"type":"string"},"raw_unit":{"type":"string"},"region":{"type":["null","string"]},"source":{"type":"string"},"status":{"type":"string"},"tiers":{"type":"array","items":{"type":"object","properties":{"end_gb":{"type":["null","number"]},"price":{"type":"number"},"start_gb":{"type":"number"}}}},"unit":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/costs/estimate":{"post":{"tags":["Costs"],"summary":"Estimate a job's cost","description":"Full cost of a job per provider: compute + egress + storage, unknown components named.","operationId":"estimate-a-job-s-cost","parameters":[{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"A job. Start from a `preset` and override fields, or give `gpu`, `count` and `hours`. Terabytes are decimal (1 TB = 1,000 GB). Body at most 16384 bytes.","properties":{"preset":{"type":"string","enum":["R0","R1","R2","R3"],"description":"A reference job (`GET /v1/costs/presets`)."},"gpu":{"type":"string","description":"GPU id or alias.","example":"nvidia-h100-80gb-sxm5"},"count":{"type":"integer","minimum":1,"maximum":1024,"example":8},"hours":{"type":"number","minimum":0.016667,"maximum":8760,"example":24},"egress_tb":{"type":"number","minimum":0,"maximum":10000,"description":"Give `egress_tb` or `egress_gb`, not both."},"egress_gb":{"type":"number","minimum":0,"maximum":10000000},"storage_tb":{"type":"number","minimum":0,"maximum":10000,"description":"Give `storage_tb` or `storage_gb`, not both."},"storage_gb":{"type":"number","minimum":0,"maximum":10000000},"storage_class":{"type":"string","enum":["auto","shared_fs","block_storage","object_storage"],"default":"auto"},"min_fabric_gbps":{"type":"number","minimum":1,"maximum":100000,"description":"Only providers whose interconnect is at least this fast."}}},"example":{"gpu":"nvidia-h100-80gb-sxm5","count":8,"hours":24,"egress_tb":2}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Field-level schema not published for this route yet; send a request to see one."},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/costs/presets":{"get":{"tags":["Costs"],"summary":"Reference jobs","description":"The published reference jobs.","operationId":"reference-jobs","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"count":{"type":"number"},"egress_gb":{"type":"number"},"gpu":{"type":"string"},"gpu_name":{"type":"string"},"hours":{"type":"number"},"label":{"type":"string"},"preset":{"type":"string"},"storage_gb":{"type":"number"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/costs/sources":{"get":{"tags":["Costs"],"summary":"Cost sources","description":"Machine-readable cost sources and their last fetch.","operationId":"cost-sources","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"last_attempt_at":{"type":"null"},"last_attempt_ok":{"type":"null"},"last_error":{"type":"null"},"last_ok_fetch_at":{"type":"null"},"provider":{"type":"string"},"provider_name":{"type":"string"},"source":{"type":"string"},"url":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/fx/rates":{"get":{"tags":["FX"],"summary":"Current FX rates","description":"Reference rates in force now: EUR->USD and every X->USD cross.","operationId":"current-fx-rates","parameters":[{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"eur_usd":{"type":"object","properties":{"age_days":{"type":"null"},"base":{"type":"string"},"cross_currencies":{"type":"array","items":{}},"cross_method":{"type":"string"},"last_fetch_at":{"type":"null"},"last_fetch_error":{"type":"null"},"last_fetch_ok":{"type":"null"},"last_ok_fetch_at":{"type":"null"},"max_age_days":{"type":"number"},"published_at":{"type":"null"},"quote":{"type":"string"},"rate":{"type":"null"},"rate_date":{"type":"null"},"source":{"type":"string"},"source_name":{"type":"string"},"source_url":{"type":"string"},"state":{"type":"string"}}},"to_usd":{"type":"array","items":{}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/fx/rates/history":{"get":{"tags":["FX"],"summary":"FX rate history","description":"Stored ECB EUR->X reference rates (default USD), newest first.","operationId":"fx-rate-history","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":3650,"minimum":1,"default":30,"title":"Days"}},{"name":"quote","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","title":"Quote"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/reliability/agents":{"get":{"tags":["Reliability"],"summary":"Probe vantage points","description":"Vantage points that have reported.","operationId":"probe-vantage-points","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/reliability/incidents":{"get":{"tags":["Reliability"],"summary":"Provider incidents","description":"Incidents providers reported on their own status pages.","operationId":"provider-incidents","parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":730,"minimum":1,"default":90,"title":"Days"}},{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(global|regional|unspecified)$"},{"type":"null"}],"title":"Scope"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/reliability/probes":{"get":{"tags":["Reliability"],"summary":"Raw probe results","description":"Raw probe results of one target, newest first.","operationId":"raw-probe-results","parameters":[{"name":"target","in":"query","required":true,"schema":{"type":"string","title":"Target"}},{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"failures_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Failures Only"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Field-level schema not published for this route yet; send a request to see one."},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/reliability/providers":{"get":{"tags":["Reliability"],"summary":"Provider reliability","description":"Per provider: probe status, availability, latency; data freshness; feed health.","operationId":"provider-reliability","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":1,"default":24,"title":"Hours"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"feed_health":{"type":["null","object"],"properties":{"consecutive_failures":{"type":"number"},"display_name":{"type":"string"},"failure_rate_24h":{"type":"number"},"failures_24h":{"type":"number"},"fetches_24h":{"type":"number"},"last_failure_at":{"type":"null"},"last_ok_fetch":{"type":"string"},"latency_ms_p50_24h":{"type":"null"},"latency_ms_p95_24h":{"type":"null"},"listings_24h_ago":{"type":"null"},"listings_24h_ago_at":{"type":"null"},"listings_24h_ago_note":{"type":"string"},"listings_now":{"type":"number"},"listings_total":{"type":"number"},"polling_interval_seconds":{"type":"number"},"quarantined":{"type":"number"},"schema_changes_24h":{"type":"number"},"schema_changes_7d":{"type":"number"},"source":{"type":"string"},"source_type":{"type":"string"},"status":{"type":"string"},"status_reasons":{"type":"array","items":{}},"throttled_24h":{"type":"number"}}},"freshness":{"type":"array","items":{}},"probes":{"type":["null","object"],"properties":{"availability":{"type":"null"},"kinds":{"type":"array","items":{"type":"string"}},"latency_p50_ms":{"type":"null"},"locations":{"type":"array","items":{}},"source":{"type":"string"},"status":{"type":"string"},"targets":{"type":"array","items":{"type":"object","properties":{"accept":{"type":"array","items":{"type":"number"}},"availability":{"type":"null"},"checks":{"type":"number"},"error_classes":{"type":"object"},"id":{"type":"string"},"interval_s":{"type":"number"},"kind":{"type":"string"},"latency_p50_ms":{"type":"null"},"locations":{"type":"array","items":{}},"name":{"type":"string"},"note":{"type":"string"},"provider":{"type":"string"},"provider_name":{"type":"string"},"region":{"type":["null","string"]},"slots":{"type":"object","properties":{"global":{"type":"number"},"regional":{"type":"number"},"single":{"type":"number"}}},"status":{"type":"string"},"url":{"type":"string"}}}}}},"provider":{"type":"string"},"provider_name":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/reliability/providers/{provider}":{"get":{"tags":["Reliability"],"summary":"One provider's reliability","description":"One provider: probes with each target's series, data freshness, feed health.","operationId":"one-provider-s-reliability","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"},"description":"Provider id, e.g. `lambda`.","example":"lambda"},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":1,"default":24,"title":"Hours"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"feed_health":{"type":"object","properties":{"consecutive_failures":{"type":"number"},"display_name":{"type":"string"},"failure_rate_24h":{"type":"number"},"failures_24h":{"type":"number"},"fetches_24h":{"type":"number"},"last_failure_at":{"type":"null"},"last_ok_fetch":{"type":"string"},"latency_ms_p50_24h":{"type":"null"},"latency_ms_p95_24h":{"type":"null"},"listings_24h_ago":{"type":"null"},"listings_24h_ago_at":{"type":"null"},"listings_24h_ago_note":{"type":"string"},"listings_now":{"type":"number"},"listings_total":{"type":"number"},"polling_interval_seconds":{"type":"number"},"quarantined":{"type":"number"},"schema_changes_24h":{"type":"number"},"schema_changes_7d":{"type":"number"},"source":{"type":"string"},"source_type":{"type":"string"},"status":{"type":"string"},"status_reasons":{"type":"array","items":{}},"throttled_24h":{"type":"number"}}},"freshness":{"type":"array","items":{}},"probes":{"type":"null"},"provider":{"type":"string"},"provider_name":{"type":"string"},"targets":{"type":"array","items":{}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/reliability/providers/{provider}/dips":{"get":{"tags":["Reliability"],"summary":"Reliability dips","description":"Hours with a failed check, with measured scope and reason.","operationId":"reliability-dips","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"},"description":"Provider id, e.g. `lambda`.","example":"lambda"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":7,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Field-level schema not published for this route yet; send a request to see one."},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/reliability/targets":{"get":{"tags":["Reliability"],"summary":"Probe targets","description":"What OpenGrid probes.","operationId":"probe-targets","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"accept":{"type":"array","items":{"type":"number"}},"id":{"type":"string"},"interval_s":{"type":"number"},"kind":{"type":"string"},"name":{"type":"string"},"note":{"type":"string"},"provider":{"type":"string"},"provider_name":{"type":"string"},"region":{"type":["null","string"]},"url":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/events":{"get":{"tags":["Events"],"summary":"List events","description":"Market events, newest first.","operationId":"list-events","parameters":[{"name":"gpu","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"GPU slug or canonical name","title":"Gpu"},"description":"GPU slug or canonical name"},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"comma-separated event types","title":"Type"},"description":"comma-separated event types"},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"comma-separated: info, notable, major","title":"Severity"},"description":"comma-separated: info, notable, major"},{"name":"min_severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(info|notable|major)$"},{"type":"null"}],"title":"Min Severity"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Until"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"dedupe_key":{"type":"string"},"detail":{"type":"object","properties":{"basis":{"type":"string"},"direction":{"type":"string"},"examples":{"type":"array","items":{"type":"object","properties":{"gpu":{"type":"string"},"gpu_name":{"type":"string"},"provider":{"type":"string"},"provider_name":{"type":"string"}}}},"from":{"type":"number"},"gpus":{"type":"number"},"is_cheapest":{"type":"boolean"},"last_lowest":{"type":"number"},"last_price":{"type":"number"},"listings":{"type":"number"},"live_markets":{"type":"number"},"lowest":{"type":"number"},"lowest_provider":{"type":"string"},"markets":{"type":"number"},"matched":{"type":"boolean"},"median":{"type":"number"},"metric":{"type":"string"},"previous_price":{"type":"number"},"previous_provider":{"type":"string"},"previous_provider_now":{"type":["null","number"]},"price":{"type":"number"},"priced_listings":{"type":"number"},"providers":{"type":["array","number"],"items":{"type":"string"}},"reason":{"type":"string"},"share":{"type":"number"},"since":{"type":"string"},"sold_out_listings":{"type":"number"},"to":{"type":"number"},"was_cheapest":{"type":"boolean"}}},"detected_at":{"type":"string"},"gpu":{"type":["null","string"]},"gpu_name":{"type":"string"},"id":{"type":"number"},"kind":{"type":"string"},"occurred_at":{"type":"string"},"pct":{"type":["null","number"]},"provider":{"type":["null","string"]},"provider_name":{"type":["null","string"]},"region_group":{"type":"null"},"segment":{"type":"string"},"severity":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"value_after":{"type":["null","number"]},"value_before":{"type":["null","number"]}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/events/shifts":{"get":{"tags":["Events"],"summary":"List shifts","description":"Major market shifts with related items (not necessarily causal).","operationId":"list-shifts","parameters":[{"name":"gpu","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"GPU slug or canonical name","title":"Gpu"},"description":"GPU slug or canonical name"},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"enum":["observed","archived"],"type":"string"},{"type":"null"}],"title":"Kind"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"comma-separated shift types; see /v1/events/shifts/definition","title":"Type"},"description":"comma-separated shift types; see /v1/events/shifts/definition"},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"enum":["notable","major"],"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Until"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"top","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":0,"description":"related items per shift in the list","default":3,"title":"Top"},"description":"related items per shift in the list"},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/events/shifts/definition":{"get":{"tags":["Events"],"summary":"Shift definition","description":"How a major shift is defined and its items ranked.","operationId":"shift-definition","parameters":[{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"heading":{"type":"string"},"items_version":{"type":"string"},"note":{"type":"string"},"ranking":{"type":"string"},"segment":{"type":"string"},"thresholds":{"type":"object","properties":{"archived_min":{"type":"number"},"baseline_days":{"type":"number"},"baseline_min_hours":{"type":"number"},"index_min":{"type":"number"},"k_times_rms":{"type":"number"},"major":{"type":"string"},"median_min":{"type":"number"},"median_min_providers":{"type":"number"},"reprice_min_gpus":{"type":"number"}}},"types":{"type":"object","properties":{"archived_price_change":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":"string"}}},"archived_provider_repricing":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":"string"}}},"capacity_collapse":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":"string"}}},"index_move":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":"string"}}},"market_median":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":"string"}}},"provider_repricing":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":"string"}}}}},"version":{"type":"string"},"window":{"type":"object","properties":{"after_hours":{"type":"number"},"archived_pad_days":{"type":"number"},"before_hours":{"type":"number"},"max_items":{"type":"number"},"settle_days":{"type":"number"}}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/events/shifts/{shift_id}":{"get":{"tags":["Events"],"summary":"Get a shift","description":"One shift with every related item (not necessarily causal).","operationId":"get-a-shift","parameters":[{"name":"shift_id","in":"path","required":true,"schema":{"type":"integer"},"description":"Shift id, as returned by `GET /v1/events/shifts`."},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"heading":{"type":"string"},"items_version":{"type":"string"},"note":{"type":"string"},"ranking":{"type":"string"},"segment":{"type":"string"},"thresholds":{"type":"object","properties":{"archived_min":{"type":"number"},"baseline_days":{"type":"number"},"baseline_min_hours":{"type":"number"},"index_min":{"type":"number"},"k_times_rms":{"type":"number"},"major":{"type":"string"},"median_min":{"type":"number"},"median_min_providers":{"type":"number"},"reprice_min_gpus":{"type":"number"}}},"types":{"type":"object","properties":{"archived_price_change":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":"string"}}},"archived_provider_repricing":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":"string"}}},"capacity_collapse":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":"string"}}},"index_move":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":"string"}}},"market_median":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":"string"}}},"provider_repricing":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":"string"}}}}},"version":{"type":"string"},"window":{"type":"object","properties":{"after_hours":{"type":"number"},"archived_pad_days":{"type":"number"},"before_hours":{"type":"number"},"max_items":{"type":"number"},"settle_days":{"type":"number"}}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/events/types":{"get":{"tags":["Events"],"summary":"Event types","description":"Event catalogue: triggers, severity rules, data kind.","operationId":"event-types","parameters":[{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"kind":{"type":"string"},"severity":{"type":"string"},"type":{"type":"string"}}}},"opportunities":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"kind":{"type":"string"},"type":{"type":"string"}}}},"severities":{"type":"array","items":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/news":{"get":{"tags":["News"],"summary":"List news","description":"GPU market news clustered into stories, newest activity first. Filter by GPU, provider, region, topic, source or free text (`q`).","operationId":"list-news","parameters":[{"name":"gpu","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gpu"}},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"}},{"name":"topic","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Q"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Since"}},{"name":"min_relevance","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":0,"default":1,"title":"Min Relevance"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/news/families":{"get":{"tags":["News"],"summary":"News GPU families","description":"Every GPU family the news classifier recognises; `tracked: false` means OpenGrid has no prices for it.","operationId":"news-gpu-families","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"architecture":{"type":["null","string"]},"id":{"type":"string"},"kind":{"type":"string"},"member_families":{"type":["array","null"],"items":{"type":"string"}},"name":{"type":"string"},"slug":{"type":"string"},"tracked":{"type":"boolean"},"variants":{"type":"array","items":{"type":"string"}}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/news/sources":{"get":{"tags":["News"],"summary":"News sources","description":"Every news source OpenGrid reads, with its health.","operationId":"news-sources","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"avg_fetch_ms_24h":{"type":"null"},"backfilled_items":{"type":"number"},"category":{"type":"string"},"conditional_get":{"type":"boolean"},"consecutive_failures":{"type":"number"},"day_dates":{"type":"boolean"},"enabled":{"type":"boolean"},"entity_hints":{"type":"object","properties":{"provider":{"type":"string"},"provider_name":{"type":"string"},"vendor":{"type":"string"}}},"fetches_24h":{"type":"number"},"health":{"type":"string"},"id":{"type":"string"},"items_stored":{"type":"number"},"key":{"type":"string"},"kind":{"type":"string"},"last_error":{"type":"null"},"last_fetched_at":{"type":"null"},"last_ok_at":{"type":"null"},"name":{"type":"string"},"new_items_24h":{"type":"number"},"newest_item_at":{"type":"null"},"note":{"type":"string"},"ok_fetches_24h":{"type":"number"},"oldest_dated_item_at":{"type":"null"},"poll_seconds":{"type":"number"},"topics":{"type":"array","items":{"type":"string"}},"trust_tier":{"type":"string"},"url":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/news/topics":{"get":{"tags":["News"],"summary":"News topics","description":"The topic catalogue, with how many items each had in the last 30 days.","operationId":"news-topics","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"id":{"type":"string"},"items_30d":{"type":"number"},"weight":{"type":"number"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/news/{item_id}":{"get":{"tags":["News"],"summary":"Get a news story","description":"One news item with its classification (topics, GPUs, providers it concerns).","operationId":"get-a-news-story","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"integer"},"description":"News story id, as returned by `GET /v1/news`."},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Field-level schema not published for this route yet; send a request to see one."},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/timeline":{"get":{"tags":["News"],"summary":"Timeline","description":"Price moves, events and news for a GPU and/or provider over a window, on one timeline. Give `gpu`, `provider` or both.","operationId":"timeline","parameters":[{"name":"gpu","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gpu"}},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"window","in":"query","required":false,"schema":{"type":"string","default":"7d","title":"Window"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"segment","in":"query","required":false,"schema":{"enum":["on_demand","spot"],"type":"string","default":"on_demand","title":"Segment"}},{"name":"move_pct","in":"query","required":false,"schema":{"type":"number","maximum":100,"exclusiveMinimum":0,"default":3,"title":"Move Pct"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Field-level schema not published for this route yet; send a request to see one."},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/timeline/around":{"get":{"tags":["News"],"summary":"Timeline around a moment","description":"What happened around one moment (`at`) for a GPU: the price move, events and news within `window_hours`. Shown together, not claimed as cause and effect.","operationId":"timeline-around-a-moment","parameters":[{"name":"gpu","in":"query","required":true,"schema":{"type":"string","title":"Gpu"}},{"name":"at","in":"query","required":true,"schema":{"type":"string","title":"At"}},{"name":"window_hours","in":"query","required":false,"schema":{"type":"number","maximum":720,"exclusiveMinimum":0,"default":48,"title":"Window Hours"}},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"segment","in":"query","required":false,"schema":{"enum":["on_demand","spot"],"type":"string","default":"on_demand","title":"Segment"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Field-level schema not published for this route yet; send a request to see one."},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/macro/power":{"get":{"tags":["Macro"],"summary":"Listings beside power prices","description":"US listings by state, beside the state's electricity price.","operationId":"listings-beside-power-prices","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/macro/series":{"get":{"tags":["Macro"],"summary":"List macro series","description":"Market-context series: the catalogue.","operationId":"list-macro-series","parameters":[{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"entity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity"}},{"name":"geo","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Geo"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"attribution":{"type":"string"},"enabled":{"type":"boolean"},"entity":{"type":"null"},"frequency":{"type":"string"},"geo":{"type":"string"},"latest":{"type":"null"},"market_area":{"type":["null","string"]},"name":{"type":"string"},"points":{"type":"number"},"series_id":{"type":"string"},"source":{"type":"string"},"unit":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/macro/series/{series}":{"get":{"tags":["Macro"],"summary":"Get a macro series","description":"One market-context series: source, unit, latest.","operationId":"get-a-macro-series","parameters":[{"name":"series","in":"path","required":true,"schema":{"type":"string"},"description":"Series id, as returned by `GET /v1/macro/series`."},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Field-level schema not published for this route yet; send a request to see one."},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/macro/series/{series}/history":{"get":{"tags":["Macro"],"summary":"Macro series history","description":"One market-context series over time.","operationId":"macro-series-history","parameters":[{"name":"series","in":"path","required":true,"schema":{"type":"string"},"description":"Series id, as returned by `GET /v1/macro/series`."},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Since"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Field-level schema not published for this route yet; send a request to see one."},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/methodology":{"get":{"tags":["Methodology"],"summary":"List methodology documents","description":"Methodology documents: name, title, links.","operationId":"list-methodology-documents","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"html":{"type":"string"},"markdown":{"type":"string"},"name":{"type":"string"},"summary":{"type":"string"},"title":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/methodology/{name}":{"get":{"tags":["Methodology"],"summary":"Get a methodology document","description":"One methodology document as raw markdown.","operationId":"get-a-methodology-document","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"Methodology document name, e.g. `indices`.","example":"indices"},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Field-level schema not published for this route yet; send a request to see one."},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/exports":{"get":{"tags":["Bulk exports"],"summary":"List export datasets","description":"Bulk export datasets and the first day each has data.","operationId":"list-export-datasets","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"dataset":{"type":"string"},"description":{"type":"string"},"first_date":{"type":["null","string"]},"format":{"type":"string"},"url":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/exports/{dataset}":{"get":{"tags":["Bulk exports"],"summary":"Download a day's export","description":"One completed UTC day of a dataset (gzipped JSON lines).","operationId":"download-a-day-s-export","parameters":[{"name":"dataset","in":"path","required":true,"schema":{"type":"string","pattern":"^(listings|listing_changes|index_levels|fixings)$"},"description":"`listings`, `listing_changes`, `index_levels` or `fixings`.","example":"listings"},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"a completed UTC day, YYYY-MM-DD","title":"Date"},"description":"a completed UTC day, YYYY-MM-DD"},{"name":"OpenGrid-Version","in":"header","required":false,"description":"The API version to shape the response for. Default: the version pinned to your key.","schema":{"type":"string","enum":["2026-11-03"],"example":"2026-11-03"}}],"responses":{"200":{"description":"The day's rows as gzipped JSON lines.","content":{"application/gzip":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Bad request: an unknown `OpenGrid-Version`, a cursor this API did not issue, or a malformed body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or the key is invalid, revoked or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the `data:read` scope, or the account is suspended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such resource (an unknown GPU, provider, index ...).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"A parameter failed validation; `error.param` names it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the per-key or per-account rate limit; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Your API key: `Authorization: Bearer opg_live_...`"}},"schemas":{"Meta":{"type":"object","description":"Present on every success. List routes add `limit`, `next_cursor` (null on the last page) and `total`.","properties":{"as_of":{"type":"string","format":"date-time","description":"When the response was built (UTC)."},"api_version":{"type":"string","description":"The version the body is shaped for.","example":"2026-11-03"},"request_id":{"type":"string","description":"Quote it when reporting a problem.","example":"req_5bd092f30d380c07d2f32f8f"},"next_cursor":{"type":["string","null"],"description":"Pass back as `cursor` for the next page."},"limit":{"type":"integer"},"total":{"type":"integer"}},"required":["as_of","api_version","request_id"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","description":"Broad class: `invalid_request`, `authentication`, `permission`, `rate_limit` or `api_error`."},"code":{"type":"string","description":"Machine-readable reason. Part of the contract.","example":"authentication_required"},"message":{"type":"string","description":"Human-readable; may change. Do not parse it."},"param":{"type":["string","null"],"description":"The parameter at fault, when there is one."},"request_id":{"type":"string"},"docs_url":{"type":"string","description":"This error on the Errors page."}},"required":["type","code","message","param","request_id","docs_url"]}},"required":["error"]}}}}