{"openapi":"3.1.0","info":{"title":"AI Compute Radar API","version":"v1","summary":"Measured AI-model signals, GPU rental prices and hardware-fit verdicts.","description":"Read-only JSON API of aicomputeradar.dev. Every response carries provenance (meta.source, meta.collectedAt). Data compilation is licensed CC BY 4.0 — attribute 'AI Compute Radar (https://aicomputeradar.dev)'. Rate limit: 60 requests per minute per client (best-effort), responses are CDN-cached for 5 minutes.","license":{"name":"CC BY 4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"contact":{"url":"https://aicomputeradar.dev/legal/imprint#contact"}},"servers":[{"url":"https://aicomputeradar.dev/api/v1"}],"paths":{"/":{"get":{"operationId":"index","summary":"Endpoint index, license terms and the MCP server URL.","responses":{"200":{"description":"Index document."}}}},"/models":{"get":{"operationId":"listModels","summary":"Tracked models ranked by Heat Score, with the measured signals behind it.","parameters":[{"name":"slug","in":"query","schema":{"type":"string"},"description":"Return a single model by slug."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"description":"Return only the top N models."}],"responses":{"200":{"description":"Models ordered by rank.","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","description":"Provenance and terms that travel with every response. source=live means measured data from our database; fallback means demo fixtures (a data source was unreachable).","properties":{"apiVersion":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["live","fallback"]},"collectedAt":{"type":["string","null"],"format":"date-time","description":"Oldest contributing reading; null for curated or fixture data."},"docs":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"license":{"type":"object"},"citeAs":{"type":"string","description":"A ready citation line for the response: who, what, where, retrieved when, under which licence."}},"required":["apiVersion","generatedAt","source","collectedAt","license"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Model"}}}}}}},"429":{"description":"Rate limited.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]},"docs":{"type":"string","format":"uri"}}}}}}}}},"/prices":{"get":{"operationId":"listGpuPrices","parameters":[{"name":"window","in":"query","required":false,"schema":{"type":"integer","enum":[7,14,30,90],"default":7},"description":"Length of the Rent Index comparison window in days: the current window against the previous one of the same length. Each needs twice its length on record; until then the index fields are null."}],"summary":"Median verified on-demand rental price per GPU class (Vast.ai), USD per hour, Clore.ai's median for the same class beside it, with the Rent Index: this week's median against last week and against the first week collected, trend words and excluded glitch days. Plus RunPod's lowest posted on-demand price per class (a list price, labelled as such).","responses":{"200":{"description":"One band per tracked GPU class.","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","description":"Provenance and terms that travel with every response. source=live means measured data from our database; fallback means demo fixtures (a data source was unreachable).","properties":{"apiVersion":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["live","fallback"]},"collectedAt":{"type":["string","null"],"format":"date-time","description":"Oldest contributing reading; null for curated or fixture data."},"docs":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"license":{"type":"object"},"citeAs":{"type":"string","description":"A ready citation line for the response: who, what, where, retrieved when, under which licence."}},"required":["apiVersion","generatedAt","source","collectedAt","license"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/PriceBand"}}}}}}}}}},"/history":{"get":{"operationId":"listPriceHistory","parameters":[{"name":"gpu","in":"query","required":false,"schema":{"type":"string"},"description":"One class by page slug or name (rtx-3090, rtx-4090, rtx-5090, l40s, a100, h100, h200, b200). Every class without it."},{"name":"source","in":"query","required":false,"schema":{"type":"string"},"description":"One source by key or page slug (vast, clore, runpod, aws, azure, oracle, lambda, nebius, coreweave, hyperstack). Every published source without it."},{"name":"days","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":365,"default":30},"description":"How many UTC days back from today."},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","csv"],"default":"json"},"description":"csv returns the same rows as text/csv with a header line, for a spreadsheet or a notebook."}],"summary":"Daily price history per GPU class and source: the rows the Rent Index and the 30-day range are computed from. Marketplace days are medians over the day's counted hourly medians with min, p75 and offer count; list-price days carry the posted price. Up to 365 days; the series starts 26 August 2026. Described, never forecast.","responses":{"200":{"description":"One row per UTC day, class and source, oldest first.","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","description":"Provenance and terms that travel with every response. source=live means measured data from our database; fallback means demo fixtures (a data source was unreachable).","properties":{"apiVersion":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["live","fallback"]},"collectedAt":{"type":["string","null"],"format":"date-time","description":"Oldest contributing reading; null for curated or fixture data."},"docs":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"license":{"type":"object"},"citeAs":{"type":"string","description":"A ready citation line for the response: who, what, where, retrieved when, under which licence."}},"required":["apiVersion","generatedAt","source","collectedAt","license"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/HistoryPoint"}}}}},"text/csv":{"schema":{"type":"string"}}}}}}},"/pick":{"get":{"operationId":"getPick","summary":"Pick of the week: one tracked model chosen by a published rule, with the numbers frozen at selection time, the device fit ladder and the written report.","description":"Without parameters returns the current issue plus the archive; pass week for a past issue. Only published issues exist here — before the first one, data.issue is null and the archive is empty. The rule and its version are documented at /methodology#pick.","parameters":[{"name":"week","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{4}-w\\d{2}$"},"description":"ISO week label of a past issue, e.g. 2026-w37."}],"responses":{"200":{"description":"The issue, or null before the first publication.","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","description":"Provenance and terms that travel with every response. source=live means measured data from our database; fallback means demo fixtures (a data source was unreachable).","properties":{"apiVersion":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["live","fallback"]},"collectedAt":{"type":["string","null"],"format":"date-time","description":"Oldest contributing reading; null for curated or fixture data."},"docs":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"license":{"type":"object"},"citeAs":{"type":"string","description":"A ready citation line for the response: who, what, where, retrieved when, under which licence."}},"required":["apiVersion","generatedAt","source","collectedAt","license"]},"data":{"type":"object","properties":{"issue":{"oneOf":[{"$ref":"#/components/schemas/Pick"},{"type":"null"}]},"archive":{"type":"array","items":{"type":"object","properties":{"week":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"publishedAt":{"type":["string","null"],"format":"date-time"}}}}}}}}}}},"400":{"description":"Malformed week label.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]},"docs":{"type":"string","format":"uri"}}}}}},"404":{"description":"No published issue for that week.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]},"docs":{"type":"string","format":"uri"}}}}}}}}},"/hardware":{"get":{"operationId":"listHardware","summary":"Curated hardware profiles the fit engine knows — use their ids with /fit.","responses":{"200":{"description":"Selectable hardware profiles.","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","description":"Provenance and terms that travel with every response. source=live means measured data from our database; fallback means demo fixtures (a data source was unreachable).","properties":{"apiVersion":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["live","fallback"]},"collectedAt":{"type":["string","null"],"format":"date-time","description":"Oldest contributing reading; null for curated or fixture data."},"docs":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"license":{"type":"object"},"citeAs":{"type":"string","description":"A ready citation line for the response: who, what, where, retrieved when, under which licence."}},"required":["apiVersion","generatedAt","source","collectedAt","license"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Hardware"}}}}}}}}}},"/fit":{"get":{"operationId":"fitModels","summary":"Which tracked models fit a given machine — measured weights + computed context cache + overhead vs usable memory.","parameters":[{"name":"hardware","in":"query","required":true,"schema":{"type":"string"},"description":"Hardware id or page slug from /hardware (e.g. rtx-4090)."},{"name":"model","in":"query","schema":{"type":"string"},"description":"Restrict to one model slug."},{"name":"context","in":"query","schema":{"type":"integer","minimum":512,"maximum":1048576,"default":8192},"description":"Context length in tokens the estimate is computed at."},{"name":"kv","in":"query","schema":{"type":"string","enum":["f16","q8_0","q4_0"],"default":"f16"},"description":"KV-cache quantization assumed by the runtime."}],"responses":{"200":{"description":"Fit verdicts, best recommendation first.","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","description":"Provenance and terms that travel with every response. source=live means measured data from our database; fallback means demo fixtures (a data source was unreachable).","properties":{"apiVersion":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["live","fallback"]},"collectedAt":{"type":["string","null"],"format":"date-time","description":"Oldest contributing reading; null for curated or fixture data."},"docs":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"license":{"type":"object"},"citeAs":{"type":"string","description":"A ready citation line for the response: who, what, where, retrieved when, under which licence."}},"required":["apiVersion","generatedAt","source","collectedAt","license"]},"data":{"$ref":"#/components/schemas/FitResponse"}}}}}},"400":{"description":"Invalid parameter.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]},"docs":{"type":"string","format":"uri"}}}}}},"404":{"description":"Unknown hardware or model.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]},"docs":{"type":"string","format":"uri"}}}}}}}}}},"components":{"schemas":{"HistoryPoint":{"type":"object","description":"One UTC day of one class at one source. kind says whether medianUsd is a marketplace median or a posted list price; the two are never blended.","properties":{"source":{"type":"string","description":"Source key: vast, clore, runpod, aws, azure, oracle, lambda, nebius, coreweave, hyperstack."},"kind":{"type":"string","enum":["median","list"]},"gpu":{"type":"string"},"day":{"type":"string","format":"date"},"capturedAt":{"type":["string","null"],"format":"date-time","description":"The day's newest hourly reading."},"medianUsd":{"type":["number","null"],"description":"Median of the day's counted hourly medians (marketplaces) or the posted price (list sources), USD per GPU-hour."},"minUsd":{"type":["number","null"],"description":"Lowest hourly minimum of the day; null for list prices."},"p75Usd":{"type":["number","null"],"description":"Upper quartile of the day; null for list prices."},"offers":{"type":["number","null"],"description":"Median verified offer count across the day's readings; null for list prices."},"readings":{"type":"integer","description":"Hourly readings taken that day."},"counted":{"type":"integer","description":"Readings with enough offers to count toward the median."}}},"Model":{"type":"object","properties":{"rank":{"type":"integer"},"slug":{"type":"string"},"name":{"type":"string"},"creator":{"type":"string"},"openWeights":{"type":"boolean"},"tasks":{"type":"array","items":{"type":"string"}},"releaseDate":{"type":["string","null"],"format":"date","description":"Hugging Face repository creation date — the release date as the Hub reports it; null without a dated open-weights repo."},"heat":{"type":["object","null"],"description":"Heat Score 0–100: weighted percentiles of measured components; null while a model's history is still collecting (<7 days).","properties":{"score":{"type":"integer","minimum":0,"maximum":100},"confidence":{"type":"number","minimum":0,"maximum":1},"direction":{"type":"string","enum":["up","flat","down"]},"flag":{"type":["string","null"],"enum":["breakout","cooling",null]},"components":{"type":"array","items":{"type":"object"}}}},"signals":{"type":"object","properties":{"trendingScore":{"type":["number","null"],"description":"Hugging Face trending score."},"downloads30d":{"type":["integer","null"],"description":"Hugging Face rolling 30-day downloads — not unique users."},"likes":{"type":["integer","null"]},"downloadsChange7dPercent":{"type":["number","null"]},"priceInputPerMillionUsd":{"type":["number","null"],"description":"OpenRouter list price."},"priceOutputPerMillionUsd":{"type":["number","null"]},"capturedAt":{"type":["string","null"],"format":"date-time"}}},"local":{"type":["object","null"],"description":"Present for models with a measured GGUF file.","properties":{"parameterLabel":{"type":"string"},"quantization":{"type":"string"},"weightGb":{"type":"number","description":"Byte size of the measured GGUF, GB."},"architectureKnown":{"type":"boolean"},"maxContextTokens":{"type":["integer","null"]}}},"links":{"type":"object","properties":{"huggingface":{"type":["string","null"],"format":"uri"},"gguf":{"type":["string","null"],"format":"uri"},"ollama":{"type":["string","null"],"format":"uri"}}}}},"PriceBand":{"type":"object","properties":{"gpu":{"type":"string"},"memoryGb":{"type":"number"},"pricePerHourUsd":{"type":"object","properties":{"median":{"type":"number"},"min":{"type":["number","null"]},"p75":{"type":["number","null"]}}},"offers":{"type":["integer","null"]},"trend":{"type":["string","null"],"enum":["up","flat","down",null]},"capturedAt":{"type":["string","null"],"format":"date-time"},"index":{"description":"The Rent Index for this class, computed from robust daily medians (median of hourly medians, hours with fewer than five verified offers dropped, glitch days excluded). Null without measured daily history.","oneOf":[{"$ref":"#/components/schemas/RentIndex"},{"type":"null"}]},"runpod":{"description":"RunPod's lowest posted on-demand price for the class at the newest hourly snapshot — a list price, not a market median. Null when no reading exists.","oneOf":[{"$ref":"#/components/schemas/ListPrice"},{"type":"null"}]},"clore":{"description":"Clore.ai's band for the class at the newest hourly snapshot — a second marketplace (hosts free to rent, the whole-host daily price divided by cards and by 24), shown next to Vast.ai and never blended. Null when no reading exists.","oneOf":[{"$ref":"#/components/schemas/MarketBand"},{"type":"null"}]},"aws":{"description":"AWS's lowest Linux on-demand list price per GPU for the class: an instance's hourly price divided by its GPU count from AWS's accelerator documentation, lowest across documented instance types and public regions, read four times a day from the price files behind AWS's on-demand pricing page. A list price, not a market median, and no statement about capacity. Null where AWS lists no documented instance type of the class.","oneOf":[{"$ref":"#/components/schemas/CloudListPrice"},{"type":"null"}]},"azure":{"description":"Azure's lowest Linux pay-as-you-go list price per GPU for the class: a VM's hourly price divided by its GPU count from Microsoft's size documentation, lowest across documented sizes and public regions, read four times a day. A list price, not a market median, and no statement about capacity. Null where Azure lists no documented size of the class.","oneOf":[{"$ref":"#/components/schemas/CloudListPrice"},{"type":"null"}]},"oracle":{"description":"Oracle Cloud's lowest pay-as-you-go list price per GPU-hour among the class's bare-metal shapes on its public price list (one list, no regions), read four times a day. A list price, not a market median. Null where Oracle lists no shape of the class.","oneOf":[{"$ref":"#/components/schemas/CloudListPrice"},{"type":"null"}]},"lambda":{"description":"Lambda's lowest on-demand list price per GPU-hour for the class across its plans and cluster sizes (8x, 4x, 2x, 1x GPUs), read four times a day from its public pricing page (one page, no regions). A list price, not a market median, and no statement about capacity. Null where Lambda lists no plan of the class.","oneOf":[{"$ref":"#/components/schemas/CloudListPrice"},{"type":"null"}]},"nebius":{"description":"Nebius's lowest on-demand list price per GPU-hour for the class from the 'NVIDIA GPU Instances' table of its public price page (one GPU per instance; spot prices left out), read four times a day. A list price, not a market median, and no statement about capacity. Null where Nebius lists no item of the class.","oneOf":[{"$ref":"#/components/schemas/CloudListPrice"},{"type":"null"}]},"coreweave":{"description":"CoreWeave's lowest on-demand list price per GPU-hour for the class: an instance's hourly price divided by its GPU count, lowest across the region tables of its public pricing page (spot prices left out), read four times a day. A list price, not a market median, and no statement about free capacity. Null where CoreWeave lists no instance of the class.","oneOf":[{"$ref":"#/components/schemas/CloudListPrice"},{"type":"null"}]},"hyperstack":{"description":"Hyperstack's lowest on-demand list price per GPU-hour for the class from the 'On-Demand GPU Pricing' card of its public pricing page (priced per card, one GPU per instance; reservation and spot prices left out), read four times a day. A list price, not a market median, and no statement about free capacity. Null where Hyperstack lists no model of the class.","oneOf":[{"$ref":"#/components/schemas/CloudListPrice"},{"type":"null"}]}}},"CloudListPrice":{"type":"object","description":"A big cloud's list price: stated per GPU-hour but sold as a whole instance, so the instance travels with the number.","properties":{"fromUsd":{"type":"number","description":"Lowest list price per GPU-hour in USD."},"instanceType":{"type":["string","null"],"description":"The VM size or bare-metal shape behind the price, e.g. NC40ads H100 v5 or BM.GPU.H100.8."},"gpusPerInstance":{"type":["integer","null"],"description":"GPUs in that instance; the smallest unit a renter can take."},"instanceUsd":{"type":["number","null"],"description":"What the whole instance costs per hour in USD."},"memoryGb":{"type":["number","null"],"description":"Memory per GPU in GB."},"region":{"type":["string","null"],"description":"A region listing the price; null where the price list has no regions."},"capturedAt":{"type":"string","format":"date-time"},"index":{"description":"The Rent Index rule applied to the list price; null until two weeks of readings exist.","oneOf":[{"$ref":"#/components/schemas/RentIndex"},{"type":"null"}]}}},"MarketBand":{"type":"object","properties":{"pricePerHourUsd":{"type":"object","properties":{"median":{"type":"number"},"min":{"type":["number","null"]},"p75":{"type":["number","null"]}}},"offers":{"type":["integer","null"],"description":"Hosts free to rent behind the median."},"trend":{"type":["string","null"],"enum":["up","flat","down",null]},"capturedAt":{"type":["string","null"],"format":"date-time"},"index":{"description":"The Rent Index rule applied to this marketplace's own daily series; null without measured days.","oneOf":[{"$ref":"#/components/schemas/RentIndex"},{"type":"null"}]}}},"ListPrice":{"type":"object","properties":{"fromUsd":{"type":"number"},"cheapestType":{"type":["string","null"],"description":"The provider type behind the price, e.g. H100 PCIe."},"stock":{"type":["string","null"]},"capturedAt":{"type":"string","format":"date-time"},"index":{"description":"The Rent Index rule applied to the list price; null until two weeks of readings exist.","oneOf":[{"$ref":"#/components/schemas/RentIndex"},{"type":"null"}]}}},"RentIndex":{"type":"object","description":"Describes what the price did; never a forecast. Changes are fractions (0.29 = +29 %) and null while a window lacks days — null is not flat.","properties":{"day":{"type":["string","null"],"format":"date","description":"Latest counted UTC day."},"weekMedianUsd":{"type":["number","null"],"description":"Median $/h of the last seven days (at least four counted)."},"previousWeekMedianUsd":{"type":["number","null"]},"change7d":{"type":["number","null"],"description":"This week against the seven days before it."},"change30d":{"type":["number","null"],"description":"Null until thirty days are on record."},"sinceStart":{"oneOf":[{"type":"object","properties":{"change":{"type":"number"},"from":{"type":"string","format":"date"},"days":{"type":"integer","description":"Days on record."}}},{"type":"null"}]},"trend":{"type":"string","enum":["up-sharply","up","flat","down","down-sharply","collecting"],"description":"Up or down from ±8 %, sharply from ±20 %."},"supply":{"type":"object","properties":{"offers":{"type":["number","null"],"description":"Median verified offer count of the latest day."},"change":{"type":["number","null"],"description":"This week's offer median against last week's."},"word":{"type":"string","enum":["up","down","steady","unknown"],"description":"Up or down from ±15 %."}}},"dayBandUsd":{"oneOf":[{"type":"object","properties":{"min":{"type":["number","null"]},"p75":{"type":["number","null"]}}},{"type":"null"}]},"excludedDays":{"type":"array","items":{"type":"string","format":"date"}},"coverageDays":{"type":"integer"}}},"Hardware":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"memoryGb":{"type":"number"},"memoryArchitecture":{"type":"string","enum":["discrete","unified"]},"category":{"type":"string"},"usableMemoryGb":{"type":"number"},"usableMemoryNote":{"type":["string","null"]},"memoryBandwidthGbps":{"type":["number","null"]},"page":{"type":["string","null"],"format":"uri"}}},"Fit":{"type":"object","properties":{"model":{"type":"object"},"quantization":{"type":"string"},"label":{"type":"string","enum":["EXCELLENT","GOOD","TIGHT","OFFLOAD_REQUIRED","NOT_RECOMMENDED","UNKNOWN"]},"score":{"type":["integer","null"]},"confidence":{"type":"string","enum":["high","medium","low"]},"estimateGb":{"type":"object","description":"Memory in GB: weights, contextCache, overhead, total, usableMemory, offload. Null where the attention shape is unpublished."},"basis":{"type":"object","description":"Where each part of estimateGb comes from: weights are measured from the GGUF file listing, contextCache is computed from the model's config, overhead is a declared assumption, usableMemory is the profile's memory after declared margins. No part is a speed figure or a forecast.","properties":{"weights":{"type":"string","enum":["measured"]},"contextCache":{"type":"string","enum":["computed"]},"overhead":{"type":"string","enum":["assumed"]},"usableMemory":{"type":"string","enum":["computed"]}}},"utilization":{"type":["number","null"]},"explanation":{"type":"array","items":{"type":"string"}},"links":{"type":"object"}}},"FitResponse":{"type":"object","properties":{"hardware":{"$ref":"#/components/schemas/Hardware"},"assumptions":{"type":"object"},"best":{"oneOf":[{"$ref":"#/components/schemas/Fit"},{"type":"null"}]},"fits":{"type":"array","items":{"$ref":"#/components/schemas/Fit"}}}},"Pick":{"type":"object","description":"One published pick-of-the-week issue. Numbers are the snapshot frozen when the rule selected the model (see signals.collectedAt), not live readings.","properties":{"week":{"type":"string","description":"ISO week label, e.g. 2026-w37."},"url":{"type":"string","format":"uri","description":"Permanent page of the issue."},"publishedAt":{"type":["string","null"],"format":"date-time"},"selectedAt":{"type":"string","format":"date-time"},"rule":{"type":"object","properties":{"version":{"type":"string"},"basis":{"type":"string","enum":["rise","heat"],"description":"rise = chosen on the counted Heat Score rise; heat = no rise counted, fallback to the highest Heat Score."},"window":{"type":"object"},"candidatesConsidered":{"type":"integer"},"docs":{"type":"string","format":"uri"}}},"selection":{"type":["object","null"],"description":"The winning row of the rule: heat now, heat at the start of the window, the rise and whether it counted."},"model":{"type":"object"},"heat":{"type":["object","null"]},"signals":{"type":"object","properties":{"trendingScore":{"type":["number","null"]},"downloads30d":{"type":["integer","null"],"description":"Hugging Face's rolling 30-day download counter at selection time."},"likes":{"type":["integer","null"]},"downloadsChange7dPercent":{"type":["number","null"]},"collectedAt":{"type":["string","null"],"format":"date-time"}}},"fits":{"type":"array","description":"Fit verdicts per tracked device at 8K and 32K context, from the same engine as /fit.","items":{"type":"object"}},"rent":{"type":["object","null"]},"report":{"type":"object","properties":{"title":{"type":"string"},"lede":{"type":"string"},"body":{"type":"array","items":{"type":"string"}},"caveats":{"type":"array","items":{"type":"string"}}}}}}}}}