{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/aicomputeradar-dev/json-schema/aicomputeradar-dev-price-band-schema.json",
  "title": "PriceBand",
  "x-generated": "2026-11-01",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/_original/aicomputeradar-dev-v1-openapi.json#/components/schemas/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": "#/$defs/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": "#/$defs/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": "#/$defs/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": "#/$defs/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": "#/$defs/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": "#/$defs/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": "#/$defs/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": "#/$defs/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": "#/$defs/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": "#/$defs/CloudListPrice"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "$defs": {
    "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": "#/$defs/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": "#/$defs/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": "#/$defs/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"
        }
      }
    }
  }
}