{"openapi":"3.1.0","info":{"title":"RackRadar Public API","version":"1.0.0","description":"Read-only access to collected hosting offers and reviewed geographic metadata. No account or API key required. These are dated observations, not live stock or measured performance. Null means unknown. Original prices retain their currency, tax basis and billing commitment. Value scores are editorial.\n\nLists use ascending stable IDs with opaque keyset cursors: follow page.nextCursor until null. Default limit 25, maximum 100. Keep filters unchanged between pages. Pages are a moving catalog, not a frozen snapshot; repeat a crawl to capture concurrent additions or edits. Only listed offers are returned by default; stale and retired records require an explicit status. Provider counts include all statuses. Location metadata is a reviewed registry, not a list of currently available servers.\n\nGET and HEAD are cacheable for 60 seconds and support ETag / If-None-Match. Anonymous, credential-free CORS is enabled for these public reads. A shared 600-request/minute budget protects each server process; 429 includes Retry-After. It resets on restart and is not a per-client quota. Larger deployments should apply per-client limits at their trusted edge. Unknown or repeated query parameters return 400. No write methods are available.\n\nCredit RackRadar and link to the provider source when displaying derived comparisons. Verify source terms and prices before relying on them; no blanket redistribution license for third-party material is granted. Raw source payloads, private reports and provider requests are excluded."},"servers":[{"url":"/","description":"This RackRadar instance"}],"tags":[{"name":"Offers"},{"name":"Providers"},{"name":"Locations"}],"paths":{"/api/v1/offers":{"get":{"operationId":"listOffers","summary":"Browse published offers","description":"Filters are combined with AND. Missing numeric specs do not match a minimum. Allocation and status follow the same source interpretation as the comparison UI. No value-ranking sort is provided in v1; ordering is ascending ID.","tags":["Offers"],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"default":25,"description":"Page size, from 1 to 100. Defaults to 25.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"description":"Opaque nextCursor from the previous page. Keep the same filters.","type":"string","minLength":1,"maxLength":1500}},{"name":"provider","in":"query","required":false,"schema":{"description":"Exact provider ID from /providers.","type":"string","minLength":1,"maxLength":300}},{"name":"allocation","in":"query","required":false,"schema":{"type":"string","enum":["cloud","shared_vps","dedicated_vds","container_nat","bare_metal"]}},{"name":"capability","in":"query","required":false,"schema":{"description":"GPU capability is independent of host allocation. Omit for all offers.","type":"string","enum":["compute","gpu"]}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["catalog","auction","promo"]}},{"name":"status","in":"query","required":false,"schema":{"default":"listed","description":"Observation status, not live availability. Defaults to listed.","type":"string","enum":["listed","stale","retired"]}},{"name":"minRamGb","in":"query","required":false,"schema":{"description":"Minimum published RAM in GB. Unknown RAM is excluded.","type":"number","minimum":0,"maximum":1000000}},{"name":"minCores","in":"query","required":false,"schema":{"description":"Minimum advertised sold cores; not measured performance.","type":"number","minimum":0,"maximum":1000000}},{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Collected research data.","headers":{"ETag":{"description":"Validator for this representation. Send with If-None-Match to revalidate.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Shared per-process request budget per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the shared budget.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current budget resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffersPage"},"examples":{"observed":{"summary":"Recorded example, 23 October 2026","description":"GET /api/v1/offers?provider=hostbrr&limit=1. Dated observations; current terms may differ.","value":{"data":[{"id":"hostbrr:hb-9950x-10gbrr-12m","provider":{"id":"hostbrr","name":"HostBrr","websiteUrl":"https://hostbrr.com/vps.html"},"productName":"9950X-10GBrr","productFamily":"HostBrr Performance VPS","allocationModel":"shared_vps","kind":"catalog","cpu":{"model":"AMD Ryzen 9 9950X","soldCores":5},"memory":{"gb":10,"generation":"ddr5","ecc":"ecc"},"storage":{"gb":200,"type":"nvme","breakdownGb":null},"network":{"portMbps":10000,"trafficPolicy":"bounded","monthlyTrafficTb":25,"ipv4Count":null,"ipv6Included":null,"ddos":{"status":"included","capacityGbps":null}},"locations":[],"pricing":{"amountCents":24995,"currency":"EUR","basis":"period","billingMonths":12,"setupFeeCents":null,"taxBasis":"unknown","recurringMonthlyUsd":23.4391,"effectiveMonthlyUsd":23.4391},"value":{"index":76.36824618989381,"specScore":1790,"methodologyVersion":"2"},"source":{"url":"https://hostbrr.com/vps.html","provenanceUrl":null,"observedAt":"2026-10-22T12:21:47Z","lastSeenAt":"2026-10-22T12:21:47Z","status":"listed"}}],"page":{"limit":1,"hasMore":true,"nextCursor":"eyJ2IjoxLCJzY29wZSI6ImZLb0tocVItLWF5aTkxWDN0OWRsekNPeiIsImFmdGVyIjoiaG9zdGJycjpoYi05OTUweC0xMGdicnItMTJtIn0"},"meta":{"apiVersion":"1.0.0","exchangeRates":{"asOf":"2026-10-16","source":"European Central Bank reference rates (EUR base) via frankfurter.dev"},"locationRegistryVersion":2}}}}}}},"304":{"description":"Representation unchanged. No response body.","headers":{"ETag":{"description":"Validator for this representation. Send with If-None-Match to revalidate.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Shared per-process request budget per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the shared budget.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current budget resets.","schema":{"type":"integer"}}}},"400":{"description":"Invalid query, duplicate/unknown parameter or cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Read-only API. Use GET or HEAD.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"},"example":"GET, HEAD, OPTIONS"}}},"429":{"description":"Shared request budget exhausted. Retry after the indicated delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying."}}},"500":{"description":"Internal error. No private error details are returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/offers/{offerId}":{"get":{"operationId":"getOffer","summary":"Read an offer","description":"Fetch one stable offer ID, including a stale or retired observation. A missing ID returns 404.","tags":["Offers"],"parameters":[{"name":"offerId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":300},"description":"Stable offer ID, URL-encoded as a single path segment."},{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Collected research data.","headers":{"ETag":{"description":"Validator for this representation. Send with If-None-Match to revalidate.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Shared per-process request budget per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the shared budget.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current budget resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferResponse"},"examples":{"observed":{"summary":"Recorded example, 23 October 2026","description":"Recorded public data. Current terms/counts may differ.","value":{"data":{"id":"hostbrr:hb-9950x-10gbrr-12m","provider":{"id":"hostbrr","name":"HostBrr","websiteUrl":"https://hostbrr.com/vps.html"},"productName":"9950X-10GBrr","productFamily":"HostBrr Performance VPS","allocationModel":"shared_vps","kind":"catalog","cpu":{"model":"AMD Ryzen 9 9950X","soldCores":5},"memory":{"gb":10,"generation":"ddr5","ecc":"ecc"},"storage":{"gb":200,"type":"nvme","breakdownGb":null},"network":{"portMbps":10000,"trafficPolicy":"bounded","monthlyTrafficTb":25,"ipv4Count":null,"ipv6Included":null,"ddos":{"status":"included","capacityGbps":null}},"locations":[],"pricing":{"amountCents":24995,"currency":"EUR","basis":"period","billingMonths":12,"setupFeeCents":null,"taxBasis":"unknown","recurringMonthlyUsd":23.4391,"effectiveMonthlyUsd":23.4391},"value":{"index":76.36824618989381,"specScore":1790,"methodologyVersion":"2"},"source":{"url":"https://hostbrr.com/vps.html","provenanceUrl":null,"observedAt":"2026-10-22T12:21:47Z","lastSeenAt":"2026-10-22T12:21:47Z","status":"listed"}},"meta":{"apiVersion":"1.0.0","exchangeRates":{"asOf":"2026-10-16","source":"European Central Bank reference rates (EUR base) via frankfurter.dev"},"locationRegistryVersion":2}}}}}}},"304":{"description":"Representation unchanged. No response body.","headers":{"ETag":{"description":"Validator for this representation. Send with If-None-Match to revalidate.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Shared per-process request budget per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the shared budget.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current budget resets.","schema":{"type":"integer"}}}},"400":{"description":"Invalid query, duplicate/unknown parameter or cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Read-only API. Use GET or HEAD.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"},"example":"GET, HEAD, OPTIONS"}}},"429":{"description":"Shared request budget exhausted. Retry after the indicated delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying."}}},"500":{"description":"Internal error. No private error details are returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/offers/{offerId}/history":{"get":{"operationId":"getOfferHistory","summary":"Read dated price observations","description":"Dated original source observations, not continuous price history, live availability or an inflation-adjusted series. Prices are not converted using current exchange rates. Unknown offers return 404; known offers with no observations return an empty page. Cursors order by observation timestamp and a private unique tie-breaker.","tags":["Offers"],"parameters":[{"name":"offerId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":300},"description":"Stable offer ID, URL-encoded as a single path segment."},{"name":"limit","in":"query","required":false,"schema":{"default":25,"description":"Page size, from 1 to 100. Defaults to 25.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"description":"Opaque nextCursor from the previous page. Keep the same filters.","type":"string","minLength":1,"maxLength":1500}},{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Collected research data.","headers":{"ETag":{"description":"Validator for this representation. Send with If-None-Match to revalidate.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Shared per-process request budget per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the shared budget.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current budget resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferHistoryPage"},"examples":{"observed":{"summary":"Recorded example, 23 October 2026","description":"Recorded public data. Current terms/counts may differ.","value":{"data":[{"observedAt":"2026-10-22T12:21:47Z","sourceUrl":"https://hostbrr.com/vps.html","pricing":{"amountCents":24995,"currency":"EUR","basis":"period","billingMonths":12,"setupFeeCents":null,"taxBasis":"unknown"}}],"page":{"limit":25,"hasMore":false,"nextCursor":null},"meta":{"apiVersion":"1.0.0","exchangeRates":{"asOf":"2026-10-16","source":"European Central Bank reference rates (EUR base) via frankfurter.dev"},"locationRegistryVersion":2}}}}}}},"304":{"description":"Representation unchanged. No response body.","headers":{"ETag":{"description":"Validator for this representation. Send with If-None-Match to revalidate.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Shared per-process request budget per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the shared budget.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current budget resets.","schema":{"type":"integer"}}}},"400":{"description":"Invalid query, duplicate/unknown parameter or cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Read-only API. Use GET or HEAD.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"},"example":"GET, HEAD, OPTIONS"}}},"429":{"description":"Shared request budget exhausted. Retry after the indicated delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying."}}},"500":{"description":"Internal error. No private error details are returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/providers":{"get":{"operationId":"listProviders","summary":"Browse collected providers","description":"Only providers with collected offers. Research backlog entries and unreviewed requests are excluded. Counts cover all statuses, not live availability.","tags":["Providers"],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"default":25,"description":"Page size, from 1 to 100. Defaults to 25.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"description":"Opaque nextCursor from the previous page. Keep the same filters.","type":"string","minLength":1,"maxLength":1500}},{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Collected research data.","headers":{"ETag":{"description":"Validator for this representation. Send with If-None-Match to revalidate.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Shared per-process request budget per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the shared budget.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current budget resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvidersPage"},"examples":{"observed":{"summary":"Recorded example, 23 October 2026","description":"Recorded public data. Current terms/counts may differ.","value":{"data":[{"id":"24fire","name":"24fire","websiteUrl":"https://24fire.de/kvmserver/boerse/","offerCount":36}],"page":{"limit":1,"hasMore":true,"nextCursor":"eyJ2IjoxLCJzY29wZSI6IjkyUS1XR2owRENKM3U5eE0xUFNRMTdvSCIsImFmdGVyIjoiMjRmaXJlIn0"},"meta":{"apiVersion":"1.0.0","exchangeRates":{"asOf":"2026-10-16","source":"European Central Bank reference rates (EUR base) via frankfurter.dev"},"locationRegistryVersion":2}}}}}}},"304":{"description":"Representation unchanged. No response body.","headers":{"ETag":{"description":"Validator for this representation. Send with If-None-Match to revalidate.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Shared per-process request budget per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the shared budget.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current budget resets.","schema":{"type":"integer"}}}},"400":{"description":"Invalid query, duplicate/unknown parameter or cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Read-only API. Use GET or HEAD.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"},"example":"GET, HEAD, OPTIONS"}}},"429":{"description":"Shared request budget exhausted. Retry after the indicated delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying."}}},"500":{"description":"Internal error. No private error details are returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/locations":{"get":{"operationId":"listLocations","summary":"Browse geographic metadata","description":"Reviewed regions, countries and metro centers. Coordinates describe approximate metro centers, never datacenter addresses or measured latency. Country-only offer evidence stays country-only.","tags":["Locations"],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"default":25,"description":"Page size, from 1 to 100. Defaults to 25.","type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"description":"Opaque nextCursor from the previous page. Keep the same filters.","type":"string","minLength":1,"maxLength":1500}},{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Collected research data.","headers":{"ETag":{"description":"Validator for this representation. Send with If-None-Match to revalidate.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Shared per-process request budget per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the shared budget.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current budget resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationsPage"},"examples":{"observed":{"summary":"Recorded example, 23 October 2026","description":"Recorded public data. Current terms/counts may differ.","value":{"data":[{"id":"country:AU","type":"country","name":"Australia","regionId":"oceania","countryCode":"AU","latitude":null,"longitude":null}],"page":{"limit":1,"hasMore":true,"nextCursor":"eyJ2IjoxLCJzY29wZSI6IjNDTXJKam1UTXZMem9KMXhORk1yU2dHRCIsImFmdGVyIjoiY291bnRyeTpBVSJ9"},"meta":{"apiVersion":"1.0.0","exchangeRates":{"asOf":"2026-10-16","source":"European Central Bank reference rates (EUR base) via frankfurter.dev"},"locationRegistryVersion":2}}}}}}},"304":{"description":"Representation unchanged. No response body.","headers":{"ETag":{"description":"Validator for this representation. Send with If-None-Match to revalidate.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Shared per-process request budget per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the shared budget.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current budget resets.","schema":{"type":"integer"}}}},"400":{"description":"Invalid query, duplicate/unknown parameter or cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Read-only API. Use GET or HEAD.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string"},"example":"GET, HEAD, OPTIONS"}}},"429":{"description":"Shared request budget exhausted. Retry after the indicated delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying."}}},"500":{"description":"Internal error. No private error details are returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Offer":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":300},"provider":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":300},"name":{"type":"string"},"websiteUrl":{"type":["string","null"]}},"required":["id","name","websiteUrl"],"additionalProperties":false},"productName":{"type":"string"},"productFamily":{"type":"string"},"allocationModel":{"type":"string","enum":["cloud","shared_vps","dedicated_vds","container_nat","bare_metal"]},"kind":{"type":"string","enum":["catalog","auction","promo"]},"gpu":{"description":"Null/absent means no normalized GPU capability. VRAM is the plan total, not per device. Monthly references are not caps.","anyOf":[{"type":"object","properties":{"model":{"anyOf":[{"type":"string","minLength":1,"maxLength":160},{"type":"null"}]},"vendor":{"type":"string","enum":["nvidia","amd","intel","unknown"]},"count":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":1024},{"type":"null"}]},"vramGb":{"anyOf":[{"type":"number","exclusiveMinimum":0,"maximum":1000000},{"type":"null"}]},"access":{"type":"string","enum":["full_device","partitioned","shared","unknown"]},"hourlyRate":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"monthlyPriceKind":{"type":"string","enum":["listed","reference"]},"vramPer100Usd":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Total allocated GB per $100 recurring monthly USD. Capacity economics, never GPU performance."},"perGpuMonthlyUsd":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"methodologyVersion":{"type":"string"}},"required":["model","vendor","count","vramGb","access","hourlyRate","monthlyPriceKind","vramPer100Usd","perGpuMonthlyUsd","methodologyVersion"],"additionalProperties":false},{"type":"null"}]},"cpu":{"type":"object","properties":{"model":{"type":["string","null"]},"soldCores":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["model","soldCores"],"additionalProperties":false},"memory":{"type":"object","properties":{"gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"generation":{"anyOf":[{"type":"string","enum":["ddr3","ddr4","ddr5"]},{"type":"null"}]},"ecc":{"anyOf":[{"type":"string","enum":["ecc","non_ecc","on_die"]},{"type":"null"}]}},"required":["gb","generation","ecc"],"additionalProperties":false},"storage":{"type":"object","properties":{"gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"type":{"anyOf":[{"type":"string","enum":["nvme","ssd","hdd","unspecified"]},{"type":"null"}]},"breakdownGb":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},{"type":"null"}]}},"required":["gb","type","breakdownGb"],"additionalProperties":false},"network":{"type":"object","properties":{"portMbps":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"trafficPolicy":{"type":"string","enum":["bounded","unlimited","unknown"]},"monthlyTrafficTb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"ipv4Count":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"ipv6Included":{"type":["boolean","null"]},"ddos":{"type":"object","properties":{"status":{"type":"string","enum":["included","optional","not_included","unknown"]},"capacityGbps":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Explicit offer mitigation rate only; excludes shared network capacity."}},"required":["status","capacityGbps"],"additionalProperties":false}},"required":["portMbps","trafficPolicy","monthlyTrafficTb","ipv4Count","ipv6Included","ddos"],"additionalProperties":false},"locations":{"type":"array","items":{"type":"object","properties":{"raw":{"type":"string"},"precision":{"type":"string","enum":["metro","country","unresolved"]},"regionId":{"type":["string","null"]},"countryCode":{"type":["string","null"]},"metroId":{"type":["string","null"]}},"required":["raw","precision","regionId","countryCode","metroId"],"additionalProperties":false},"description":"Provider-scoped reviewed aliases. An empty list means not published. Metro coordinates are approximate centers."},"pricing":{"type":"object","properties":{"amountCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"basis":{"type":"string","enum":["month","period"]},"billingMonths":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"setupFeeCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"taxBasis":{"type":"string","enum":["net","gross","unknown"]},"recurringMonthlyUsd":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Reference USD conversion of the recurring price only. One-time setup fees are excluded. Not a live exchange rate."},"effectiveMonthlyUsd":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Legacy v1 alias for recurringMonthlyUsd. One-time setup fees are excluded. Not a live exchange rate."}},"required":["amountCents","currency","basis","billingMonths","setupFeeCents","taxBasis","recurringMonthlyUsd","effectiveMonthlyUsd"],"additionalProperties":false},"value":{"type":"object","properties":{"index":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"specScore":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"methodologyVersion":{"type":"string"}},"required":["index","specScore","methodologyVersion"],"additionalProperties":false,"description":"CPU advertised-value index. Index and specScore are null for GPU offers; use the separate GPU capacity metric. Never a benchmark."},"source":{"type":"object","properties":{"url":{"type":"string"},"provenanceUrl":{"type":["string","null"]},"observedAt":{"type":"string"},"lastSeenAt":{"type":"string"},"status":{"type":"string","enum":["listed","stale","retired"]}},"required":["url","provenanceUrl","observedAt","lastSeenAt","status"],"additionalProperties":false}},"required":["id","provider","productName","productFamily","allocationModel","kind","cpu","memory","storage","network","locations","pricing","value","source"],"additionalProperties":false},"OfferResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":300},"provider":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":300},"name":{"type":"string"},"websiteUrl":{"type":["string","null"]}},"required":["id","name","websiteUrl"],"additionalProperties":false},"productName":{"type":"string"},"productFamily":{"type":"string"},"allocationModel":{"type":"string","enum":["cloud","shared_vps","dedicated_vds","container_nat","bare_metal"]},"kind":{"type":"string","enum":["catalog","auction","promo"]},"gpu":{"description":"Null/absent means no normalized GPU capability. VRAM is the plan total, not per device. Monthly references are not caps.","anyOf":[{"type":"object","properties":{"model":{"anyOf":[{"type":"string","minLength":1,"maxLength":160},{"type":"null"}]},"vendor":{"type":"string","enum":["nvidia","amd","intel","unknown"]},"count":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":1024},{"type":"null"}]},"vramGb":{"anyOf":[{"type":"number","exclusiveMinimum":0,"maximum":1000000},{"type":"null"}]},"access":{"type":"string","enum":["full_device","partitioned","shared","unknown"]},"hourlyRate":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"monthlyPriceKind":{"type":"string","enum":["listed","reference"]},"vramPer100Usd":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Total allocated GB per $100 recurring monthly USD. Capacity economics, never GPU performance."},"perGpuMonthlyUsd":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"methodologyVersion":{"type":"string"}},"required":["model","vendor","count","vramGb","access","hourlyRate","monthlyPriceKind","vramPer100Usd","perGpuMonthlyUsd","methodologyVersion"],"additionalProperties":false},{"type":"null"}]},"cpu":{"type":"object","properties":{"model":{"type":["string","null"]},"soldCores":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["model","soldCores"],"additionalProperties":false},"memory":{"type":"object","properties":{"gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"generation":{"anyOf":[{"type":"string","enum":["ddr3","ddr4","ddr5"]},{"type":"null"}]},"ecc":{"anyOf":[{"type":"string","enum":["ecc","non_ecc","on_die"]},{"type":"null"}]}},"required":["gb","generation","ecc"],"additionalProperties":false},"storage":{"type":"object","properties":{"gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"type":{"anyOf":[{"type":"string","enum":["nvme","ssd","hdd","unspecified"]},{"type":"null"}]},"breakdownGb":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},{"type":"null"}]}},"required":["gb","type","breakdownGb"],"additionalProperties":false},"network":{"type":"object","properties":{"portMbps":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"trafficPolicy":{"type":"string","enum":["bounded","unlimited","unknown"]},"monthlyTrafficTb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"ipv4Count":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"ipv6Included":{"type":["boolean","null"]},"ddos":{"type":"object","properties":{"status":{"type":"string","enum":["included","optional","not_included","unknown"]},"capacityGbps":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Explicit offer mitigation rate only; excludes shared network capacity."}},"required":["status","capacityGbps"],"additionalProperties":false}},"required":["portMbps","trafficPolicy","monthlyTrafficTb","ipv4Count","ipv6Included","ddos"],"additionalProperties":false},"locations":{"type":"array","items":{"type":"object","properties":{"raw":{"type":"string"},"precision":{"type":"string","enum":["metro","country","unresolved"]},"regionId":{"type":["string","null"]},"countryCode":{"type":["string","null"]},"metroId":{"type":["string","null"]}},"required":["raw","precision","regionId","countryCode","metroId"],"additionalProperties":false},"description":"Provider-scoped reviewed aliases. An empty list means not published. Metro coordinates are approximate centers."},"pricing":{"type":"object","properties":{"amountCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"basis":{"type":"string","enum":["month","period"]},"billingMonths":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"setupFeeCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"taxBasis":{"type":"string","enum":["net","gross","unknown"]},"recurringMonthlyUsd":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Reference USD conversion of the recurring price only. One-time setup fees are excluded. Not a live exchange rate."},"effectiveMonthlyUsd":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Legacy v1 alias for recurringMonthlyUsd. One-time setup fees are excluded. Not a live exchange rate."}},"required":["amountCents","currency","basis","billingMonths","setupFeeCents","taxBasis","recurringMonthlyUsd","effectiveMonthlyUsd"],"additionalProperties":false},"value":{"type":"object","properties":{"index":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"specScore":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"methodologyVersion":{"type":"string"}},"required":["index","specScore","methodologyVersion"],"additionalProperties":false,"description":"CPU advertised-value index. Index and specScore are null for GPU offers; use the separate GPU capacity metric. Never a benchmark."},"source":{"type":"object","properties":{"url":{"type":"string"},"provenanceUrl":{"type":["string","null"]},"observedAt":{"type":"string"},"lastSeenAt":{"type":"string"},"status":{"type":"string","enum":["listed","stale","retired"]}},"required":["url","provenanceUrl","observedAt","lastSeenAt","status"],"additionalProperties":false}},"required":["id","provider","productName","productFamily","allocationModel","kind","cpu","memory","storage","network","locations","pricing","value","source"],"additionalProperties":false},"meta":{"type":"object","properties":{"apiVersion":{"type":"string","const":"1.0.0"},"exchangeRates":{"type":"object","properties":{"asOf":{"type":"string"},"source":{"type":"string"}},"required":["asOf","source"],"additionalProperties":false},"locationRegistryVersion":{"type":"number"}},"required":["apiVersion","exchangeRates","locationRegistryVersion"],"additionalProperties":false}},"required":["data","meta"],"additionalProperties":false},"OfferHistoryPage":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"observedAt":{"type":"string"},"sourceUrl":{"type":"string"},"pricing":{"type":"object","properties":{"amountCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"basis":{"type":"string","enum":["month","period"]},"billingMonths":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"setupFeeCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"taxBasis":{"type":"string","enum":["net","gross","unknown"]}},"required":["amountCents","currency","basis","billingMonths","setupFeeCents","taxBasis"],"additionalProperties":false}},"required":["observedAt","sourceUrl","pricing"],"additionalProperties":false,"description":"A dated source observation; not a continuous price history."}},"page":{"type":"object","properties":{"limit":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"nextCursor":{"type":["string","null"]},"hasMore":{"type":"boolean"}},"required":["limit","nextCursor","hasMore"],"additionalProperties":false},"meta":{"type":"object","properties":{"apiVersion":{"type":"string","const":"1.0.0"},"exchangeRates":{"type":"object","properties":{"asOf":{"type":"string"},"source":{"type":"string"}},"required":["asOf","source"],"additionalProperties":false},"locationRegistryVersion":{"type":"number"}},"required":["apiVersion","exchangeRates","locationRegistryVersion"],"additionalProperties":false}},"required":["data","page","meta"],"additionalProperties":false},"OffersPage":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":300},"provider":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":300},"name":{"type":"string"},"websiteUrl":{"type":["string","null"]}},"required":["id","name","websiteUrl"],"additionalProperties":false},"productName":{"type":"string"},"productFamily":{"type":"string"},"allocationModel":{"type":"string","enum":["cloud","shared_vps","dedicated_vds","container_nat","bare_metal"]},"kind":{"type":"string","enum":["catalog","auction","promo"]},"gpu":{"description":"Null/absent means no normalized GPU capability. VRAM is the plan total, not per device. Monthly references are not caps.","anyOf":[{"type":"object","properties":{"model":{"anyOf":[{"type":"string","minLength":1,"maxLength":160},{"type":"null"}]},"vendor":{"type":"string","enum":["nvidia","amd","intel","unknown"]},"count":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":1024},{"type":"null"}]},"vramGb":{"anyOf":[{"type":"number","exclusiveMinimum":0,"maximum":1000000},{"type":"null"}]},"access":{"type":"string","enum":["full_device","partitioned","shared","unknown"]},"hourlyRate":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"monthlyPriceKind":{"type":"string","enum":["listed","reference"]},"vramPer100Usd":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Total allocated GB per $100 recurring monthly USD. Capacity economics, never GPU performance."},"perGpuMonthlyUsd":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"methodologyVersion":{"type":"string"}},"required":["model","vendor","count","vramGb","access","hourlyRate","monthlyPriceKind","vramPer100Usd","perGpuMonthlyUsd","methodologyVersion"],"additionalProperties":false},{"type":"null"}]},"cpu":{"type":"object","properties":{"model":{"type":["string","null"]},"soldCores":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["model","soldCores"],"additionalProperties":false},"memory":{"type":"object","properties":{"gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"generation":{"anyOf":[{"type":"string","enum":["ddr3","ddr4","ddr5"]},{"type":"null"}]},"ecc":{"anyOf":[{"type":"string","enum":["ecc","non_ecc","on_die"]},{"type":"null"}]}},"required":["gb","generation","ecc"],"additionalProperties":false},"storage":{"type":"object","properties":{"gb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"type":{"anyOf":[{"type":"string","enum":["nvme","ssd","hdd","unspecified"]},{"type":"null"}]},"breakdownGb":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},{"type":"null"}]}},"required":["gb","type","breakdownGb"],"additionalProperties":false},"network":{"type":"object","properties":{"portMbps":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"trafficPolicy":{"type":"string","enum":["bounded","unlimited","unknown"]},"monthlyTrafficTb":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"ipv4Count":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"ipv6Included":{"type":["boolean","null"]},"ddos":{"type":"object","properties":{"status":{"type":"string","enum":["included","optional","not_included","unknown"]},"capacityGbps":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Explicit offer mitigation rate only; excludes shared network capacity."}},"required":["status","capacityGbps"],"additionalProperties":false}},"required":["portMbps","trafficPolicy","monthlyTrafficTb","ipv4Count","ipv6Included","ddos"],"additionalProperties":false},"locations":{"type":"array","items":{"type":"object","properties":{"raw":{"type":"string"},"precision":{"type":"string","enum":["metro","country","unresolved"]},"regionId":{"type":["string","null"]},"countryCode":{"type":["string","null"]},"metroId":{"type":["string","null"]}},"required":["raw","precision","regionId","countryCode","metroId"],"additionalProperties":false},"description":"Provider-scoped reviewed aliases. An empty list means not published. Metro coordinates are approximate centers."},"pricing":{"type":"object","properties":{"amountCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currency":{"type":"string"},"basis":{"type":"string","enum":["month","period"]},"billingMonths":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"setupFeeCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"taxBasis":{"type":"string","enum":["net","gross","unknown"]},"recurringMonthlyUsd":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Reference USD conversion of the recurring price only. One-time setup fees are excluded. Not a live exchange rate."},"effectiveMonthlyUsd":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Legacy v1 alias for recurringMonthlyUsd. One-time setup fees are excluded. Not a live exchange rate."}},"required":["amountCents","currency","basis","billingMonths","setupFeeCents","taxBasis","recurringMonthlyUsd","effectiveMonthlyUsd"],"additionalProperties":false},"value":{"type":"object","properties":{"index":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"specScore":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"methodologyVersion":{"type":"string"}},"required":["index","specScore","methodologyVersion"],"additionalProperties":false,"description":"CPU advertised-value index. Index and specScore are null for GPU offers; use the separate GPU capacity metric. Never a benchmark."},"source":{"type":"object","properties":{"url":{"type":"string"},"provenanceUrl":{"type":["string","null"]},"observedAt":{"type":"string"},"lastSeenAt":{"type":"string"},"status":{"type":"string","enum":["listed","stale","retired"]}},"required":["url","provenanceUrl","observedAt","lastSeenAt","status"],"additionalProperties":false}},"required":["id","provider","productName","productFamily","allocationModel","kind","cpu","memory","storage","network","locations","pricing","value","source"],"additionalProperties":false}},"page":{"type":"object","properties":{"limit":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"nextCursor":{"type":["string","null"]},"hasMore":{"type":"boolean"}},"required":["limit","nextCursor","hasMore"],"additionalProperties":false},"meta":{"type":"object","properties":{"apiVersion":{"type":"string","const":"1.0.0"},"exchangeRates":{"type":"object","properties":{"asOf":{"type":"string"},"source":{"type":"string"}},"required":["asOf","source"],"additionalProperties":false},"locationRegistryVersion":{"type":"number"}},"required":["apiVersion","exchangeRates","locationRegistryVersion"],"additionalProperties":false}},"required":["data","page","meta"],"additionalProperties":false},"ProvidersPage":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":300},"name":{"type":"string"},"websiteUrl":{"type":["string","null"]},"offerCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Collected offers across all observation statuses."}},"required":["id","name","websiteUrl","offerCount"],"additionalProperties":false}},"page":{"type":"object","properties":{"limit":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"nextCursor":{"type":["string","null"]},"hasMore":{"type":"boolean"}},"required":["limit","nextCursor","hasMore"],"additionalProperties":false},"meta":{"type":"object","properties":{"apiVersion":{"type":"string","const":"1.0.0"},"exchangeRates":{"type":"object","properties":{"asOf":{"type":"string"},"source":{"type":"string"}},"required":["asOf","source"],"additionalProperties":false},"locationRegistryVersion":{"type":"number"}},"required":["apiVersion","exchangeRates","locationRegistryVersion"],"additionalProperties":false}},"required":["data","page","meta"],"additionalProperties":false},"LocationsPage":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":300},"type":{"type":"string","enum":["region","country","metro"]},"name":{"type":"string"},"regionId":{"type":["string","null"]},"countryCode":{"type":["string","null"]},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]}},"required":["id","type","name","regionId","countryCode","latitude","longitude"],"additionalProperties":false}},"page":{"type":"object","properties":{"limit":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"nextCursor":{"type":["string","null"]},"hasMore":{"type":"boolean"}},"required":["limit","nextCursor","hasMore"],"additionalProperties":false},"meta":{"type":"object","properties":{"apiVersion":{"type":"string","const":"1.0.0"},"exchangeRates":{"type":"object","properties":{"asOf":{"type":"string"},"source":{"type":"string"}},"required":["asOf","source"],"additionalProperties":false},"locationRegistryVersion":{"type":"number"}},"required":["apiVersion","exchangeRates","locationRegistryVersion"],"additionalProperties":false}},"required":["data","page","meta"],"additionalProperties":false},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"],"additionalProperties":false}}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}