{
  "openapi": "3.1.0",
  "info": {
    "title": "Computable GPU Index API",
    "version": "1",
    "summary": "Hourly GPU compute price index in USD per GPU-hour.",
    "description": "Anonymous, read-only. No API key and no registration.\n\nEvery success is a `{data, meta, license}` envelope and every refusal is a typed `{error, meta, license}` envelope. Both are strict: no response object carries a field this document does not list, so a client may treat an unexpected field as a fault rather than a forward-compatible addition.\n\nHistory is bounded to the rolling 90-day window ending at the current UTC hour. Older aggregate values stay public in the CDN corpus observation-day files, which bulk consumers should read directly rather than paging this API.\n\nThis document is generated from the Zod schemas the service validates every response against. Do not edit it by hand.",
    "license": { "name": "CC BY-NC 4.0", "identifier": "CC-BY-NC-4.0" }
  },
  "servers": [{ "url": "https://api.getcomputable.com", "description": "Public REST host." }],
  "security": [],
  "tags": [
    { "name": "Index", "description": "Observations, history, settlement and per-provider coverage." },
    { "name": "Methodology", "description": "Index identity, methodology versions and history policy." }
  ],
  "paths": {
    "/v1/index/{sku}/coverage/{observed_at}": {
      "get": {
        "operationId": "getIndexCoverage",
        "tags": ["Index"],
        "summary": "Provider coverage",
        "description": "The per-provider receipt set for one observation, without the index value.\n\nOne explicit receipt per configured provider. A provider that produced nothing is an explicit `status: \"missing\"` receipt, never an absent array member.\n\nObservation hours are limited to the rolling 90-day window ending at the current UTC hour. A request that reaches before it is refused with `history_window_exceeded` and never clamped.\n\nAccepts no query parameters; any query key is an `invalid_request` refusal.",
        "parameters": [
          {
            "name": "sku",
            "in": "path",
            "required": true,
            "description": "The SKU lane, exactly as `GET /v1/methodology` reports it in `data.skus`. The published set is index configuration rather than part of this contract, so it is not enumerated here; an unpublished SKU is an `unknown_sku` refusal.",
            "schema": { "$ref": "#/components/schemas/Identifier" },
            "examples": {
              "B300": { "value": "B300" },
              "B200": { "value": "B200" },
              "H100": { "value": "H100" },
              "H200": { "value": "H200" }
            }
          },
          {
            "name": "observed_at",
            "in": "path",
            "required": true,
            "description": "The exact UTC hour the observation is labelled with. Percent-encode the colons when sending it in a path segment.",
            "schema": { "$ref": "#/components/schemas/HourlyDateTimeString" },
            "examples": { "hour": { "value": "2026-08-27T06:00:00.000Z" } }
          }
        ],
        "responses": {
          "200": {
            "description": "The receipt set for the hour.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlWindowed" },
              "ETag": { "$ref": "#/components/headers/ETag" },
              "x-index-artifact": { "$ref": "#/components/headers/IndexArtifact" },
              "x-index-artifact-sha256": { "$ref": "#/components/headers/IndexArtifactSha256" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/SourcesStatusDataResponse" },
                "examples": {
                  "coverage": {
                    "summary": "Two priced providers and one excluded",
                    "value": {
                      "data": {
                        "sku": "H100",
                        "observed_at": "2026-08-27T06:00:00.000Z",
                        "receipts": [
                          {
                            "source_id": "civo",
                            "liveness_score": null,
                            "price": 2.99,
                            "sd": 0.05,
                            "weight": 0.51,
                            "source_url": "https://www.civo.com/pricing",
                            "status": "ok",
                            "filter_verdict": "accepted",
                            "last_seen": "2026-08-27T06:00:00.000Z"
                          },
                          {
                            "source_id": "lambda",
                            "liveness_score": null,
                            "price": 3.99,
                            "sd": 0.05,
                            "weight": 0.49,
                            "source_url": "https://lambda.ai/pricing",
                            "status": "ok",
                            "filter_verdict": "accepted",
                            "last_seen": "2026-08-27T06:00:00.000Z"
                          },
                          {
                            "source_id": "vast",
                            "liveness_score": null,
                            "price": null,
                            "sd": null,
                            "weight": null,
                            "source_url": "https://console.vast.ai/api/v0/bundles/",
                            "status": "excluded",
                            "filter_verdict": "not_evaluated",
                            "last_seen": null
                          }
                        ]
                      },
                      "meta": {
                        "scope": "observation",
                        "index_name": "Computable GPU Index",
                        "methodology_id": "h100_sxm_v1_calc_v1",
                        "input_snapshot_sha256": "8e1df331554b6b256ba89297a541ccdd3b7e75b88f9fdf3f4db98f275cdd3c2a",
                        "as_of_observed_at": "2026-08-27T06:00:00.000Z",
                        "generated_at": "2026-08-27T06:04:24.000Z",
                        "coverage": { "n_sources": 3, "n_passing": 2, "frozen": [], "excluded": ["vast"] },
                        "status": "ok",
                        "reason": null,
                        "freshness": "fresh"
                      },
                      "license": {
                        "spdx": "CC-BY-NC-4.0",
                        "url": "https://creativecommons.org/licenses/by-nc/4.0/",
                        "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
                      }
                    }
                  }
                }
              }
            }
          },
          "304": {
            "description": "The entity tag sent in `If-None-Match` still matches, so no body is returned. Every success carries an `ETag`, and a `304` keeps the cache and provenance headers.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlWindowed" },
              "ETag": { "$ref": "#/components/headers/ETag" },
              "x-index-artifact": { "$ref": "#/components/headers/IndexArtifact" },
              "x-index-artifact-sha256": { "$ref": "#/components/headers/IndexArtifactSha256" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            }
          },
          "400": {
            "description": "Typed refusal. Codes that reach this status: `history_window_exceeded`, `invalid_request`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "history_window_exceeded": { "$ref": "#/components/examples/history_window_exceeded" },
                  "invalid_request": { "$ref": "#/components/examples/invalid_request" }
                }
              }
            }
          },
          "403": {
            "description": "The `Host` or `Origin` header is not on the service allowlist. The body is an `invalid_request` envelope, the one place this code does not arrive as a `400`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "invalid_request": { "$ref": "#/components/examples/invalid_request" } }
              }
            }
          },
          "404": {
            "description": "Typed refusal. Codes that reach this status: `artifact_missing`, `unknown_sku`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "artifact_missing": { "$ref": "#/components/examples/artifact_missing" },
                  "unknown_sku": { "$ref": "#/components/examples/unknown_sku" }
                }
              }
            }
          },
          "429": {
            "description": "Typed refusal. Codes that reach this status: `rate_limited`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" },
              "Retry-After": { "$ref": "#/components/headers/RetryAfter" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "rate_limited": { "$ref": "#/components/examples/rate_limited" } }
              }
            }
          },
          "500": {
            "description": "Typed refusal. Codes that reach this status: `internal_error`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "internal_error": { "$ref": "#/components/examples/internal_error" } }
              }
            }
          },
          "502": {
            "description": "Typed refusal. Codes that reach this status: `artifact_digest_mismatch`, `artifact_path_violation`, `invalid_artifact`, `unknown_methodology`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "artifact_digest_mismatch": { "$ref": "#/components/examples/artifact_digest_mismatch" },
                  "artifact_path_violation": { "$ref": "#/components/examples/artifact_path_violation" },
                  "invalid_artifact": { "$ref": "#/components/examples/invalid_artifact" },
                  "unknown_methodology": { "$ref": "#/components/examples/unknown_methodology" }
                }
              }
            }
          },
          "503": {
            "description": "Typed refusal. Codes that reach this status: `upstream_unavailable`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "upstream_unavailable": { "$ref": "#/components/examples/upstream_unavailable" } }
              }
            }
          }
        }
      }
    },
    "/v1/index/{sku}/history": {
      "get": {
        "operationId": "getIndexHistory",
        "tags": ["Index"],
        "summary": "Price history",
        "description": "Newest-first hourly rows without receipts.\n\nPages hold at least one and at most 744 rows, and default to 168. A page is never empty: a request that matches no published row is a `no_data` refusal instead.\n\nObservation hours are limited to the rolling 90-day window ending at the current UTC hour. A request that reaches before it is refused with `history_window_exceeded` and never clamped.",
        "parameters": [
          {
            "name": "sku",
            "in": "path",
            "required": true,
            "description": "The SKU lane, exactly as `GET /v1/methodology` reports it in `data.skus`. The published set is index configuration rather than part of this contract, so it is not enumerated here; an unpublished SKU is an `unknown_sku` refusal.",
            "schema": { "$ref": "#/components/schemas/Identifier" },
            "examples": {
              "B300": { "value": "B300" },
              "B200": { "value": "B200" },
              "H100": { "value": "H100" },
              "H200": { "value": "H200" }
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "description": "Inclusive lower bound, an exact UTC hour.",
            "schema": { "$ref": "#/components/schemas/HourlyDateTimeString" }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "description": "Inclusive upper bound, an exact UTC hour.",
            "schema": { "$ref": "#/components/schemas/HourlyDateTimeString" }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Rows per page. Sent as decimal digits with no sign, exponent or leading zero. Values outside 1..744 are refused rather than clamped.",
            "schema": { "type": "integer", "minimum": 1, "maximum": 744, "default": 168 }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque `data.next_cursor` from a previous page. Never construct one; it carries the verified bounds of the page it came from, and `from`/`to` sent alongside it must match those bounds.",
            "schema": { "$ref": "#/components/schemas/Cursor" }
          }
        ],
        "responses": {
          "200": {
            "description": "One page of rows, plus the cursor for the next page or null on the last.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlWindowed" },
              "ETag": { "$ref": "#/components/headers/ETag" },
              "x-index-artifact": { "$ref": "#/components/headers/IndexArtifact" },
              "x-index-artifact-sha256": { "$ref": "#/components/headers/IndexArtifactSha256" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/PriceHistoryDataResponse" },
                "examples": {
                  "firstPage": {
                    "summary": "A one-row page",
                    "value": {
                      "data": {
                        "sku": "H100",
                        "values": [
                          {
                            "observed_at": "2026-08-27T06:00:00.000Z",
                            "generated_at": "2026-08-27T06:04:24.000Z",
                            "unit": "USD/GPU/hour",
                            "methodology_id": "h100_sxm_v1_calc_v1",
                            "input_snapshot_sha256": "8e1df331554b6b256ba89297a541ccdd3b7e75b88f9fdf3f4db98f275cdd3c2a",
                            "coverage": { "n_sources": 3, "n_passing": 2, "frozen": [], "excluded": ["vast"] },
                            "value_usd_gpu_hr": 3.645759,
                            "stability_band_usd_gpu_hr": 0.555759,
                            "status": "ok",
                            "reason": null,
                            "freshness": "fresh"
                          }
                        ],
                        "next_cursor": "b3BhcXVlLWN1cnNvci1kby1ub3QtY29uc3RydWN0"
                      },
                      "meta": {
                        "scope": "history_high_water",
                        "index_name": "Computable GPU Index",
                        "methodology_id": "h100_sxm_v1_calc_v1",
                        "input_snapshot_sha256": "8e1df331554b6b256ba89297a541ccdd3b7e75b88f9fdf3f4db98f275cdd3c2a",
                        "as_of_observed_at": "2026-08-27T06:00:00.000Z",
                        "generated_at": "2026-08-27T06:04:24.000Z",
                        "coverage": { "n_sources": 3, "n_passing": 2, "frozen": [], "excluded": ["vast"] },
                        "status": "ok",
                        "reason": null,
                        "freshness": "fresh"
                      },
                      "license": {
                        "spdx": "CC-BY-NC-4.0",
                        "url": "https://creativecommons.org/licenses/by-nc/4.0/",
                        "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
                      }
                    }
                  }
                }
              }
            }
          },
          "304": {
            "description": "The entity tag sent in `If-None-Match` still matches, so no body is returned. Every success carries an `ETag`, and a `304` keeps the cache and provenance headers.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlWindowed" },
              "ETag": { "$ref": "#/components/headers/ETag" },
              "x-index-artifact": { "$ref": "#/components/headers/IndexArtifact" },
              "x-index-artifact-sha256": { "$ref": "#/components/headers/IndexArtifactSha256" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            }
          },
          "400": {
            "description": "Typed refusal. Codes that reach this status: `history_window_exceeded`, `invalid_request`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "history_window_exceeded": { "$ref": "#/components/examples/history_window_exceeded" },
                  "invalid_request": { "$ref": "#/components/examples/invalid_request" }
                }
              }
            }
          },
          "403": {
            "description": "The `Host` or `Origin` header is not on the service allowlist. The body is an `invalid_request` envelope, the one place this code does not arrive as a `400`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "invalid_request": { "$ref": "#/components/examples/invalid_request" } }
              }
            }
          },
          "404": {
            "description": "Typed refusal. Codes that reach this status: `artifact_missing`, `no_data`, `unknown_sku`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "artifact_missing": { "$ref": "#/components/examples/artifact_missing" },
                  "no_data": { "$ref": "#/components/examples/no_data" },
                  "unknown_sku": { "$ref": "#/components/examples/unknown_sku" }
                }
              }
            }
          },
          "429": {
            "description": "Typed refusal. Codes that reach this status: `rate_limited`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" },
              "Retry-After": { "$ref": "#/components/headers/RetryAfter" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "rate_limited": { "$ref": "#/components/examples/rate_limited" } }
              }
            }
          },
          "500": {
            "description": "Typed refusal. Codes that reach this status: `internal_error`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "internal_error": { "$ref": "#/components/examples/internal_error" } }
              }
            }
          },
          "502": {
            "description": "Typed refusal. Codes that reach this status: `artifact_digest_mismatch`, `artifact_path_violation`, `invalid_artifact`, `unknown_methodology`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "artifact_digest_mismatch": { "$ref": "#/components/examples/artifact_digest_mismatch" },
                  "artifact_path_violation": { "$ref": "#/components/examples/artifact_path_violation" },
                  "invalid_artifact": { "$ref": "#/components/examples/invalid_artifact" },
                  "unknown_methodology": { "$ref": "#/components/examples/unknown_methodology" }
                }
              }
            }
          },
          "503": {
            "description": "Typed refusal. Codes that reach this status: `upstream_unavailable`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "upstream_unavailable": { "$ref": "#/components/examples/upstream_unavailable" } }
              }
            }
          }
        }
      }
    },
    "/v1/index/{sku}/latest": {
      "get": {
        "operationId": "getLatestIndexValue",
        "tags": ["Index"],
        "summary": "Latest observation",
        "description": "The newest published observation for a SKU.\n\nLean by default: sku, hour, value, stability band and unit, and no receipts. Add `include=receipts` for the per-provider receipt set. The two answers are different strict shapes, not one shape with an optional field: the lean body has no `data.receipts` key at all and the receipt-bearing body always has one.\n\nA latest observation older than 4 hours reports `meta.status: \"stale\"` and `meta.freshness: \"stale\"`; the value itself is unchanged.",
        "parameters": [
          {
            "name": "sku",
            "in": "path",
            "required": true,
            "description": "The SKU lane, exactly as `GET /v1/methodology` reports it in `data.skus`. The published set is index configuration rather than part of this contract, so it is not enumerated here; an unpublished SKU is an `unknown_sku` refusal.",
            "schema": { "$ref": "#/components/schemas/Identifier" },
            "examples": {
              "B300": { "value": "B300" },
              "B200": { "value": "B200" },
              "H100": { "value": "H100" },
              "H200": { "value": "H200" }
            }
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "Set to `receipts` to receive the per-provider receipt set in `data.receipts`. Any other value is refused.",
            "schema": { "type": "string", "enum": ["receipts"] }
          }
        ],
        "responses": {
          "200": {
            "description": "Exactly one of the two shapes, selected by `include`: the lean value row by default, or the receipt-bearing observation with `include=receipts`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlWindowed" },
              "ETag": { "$ref": "#/components/headers/ETag" },
              "x-index-artifact": { "$ref": "#/components/headers/IndexArtifact" },
              "x-index-artifact-sha256": { "$ref": "#/components/headers/IndexArtifactSha256" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    { "$ref": "#/components/schemas/LatestIndexValueDataResponse" },
                    { "$ref": "#/components/schemas/IndexValueDataResponse" }
                  ]
                },
                "examples": {
                  "lean": {
                    "summary": "Lean default, no include parameter",
                    "value": {
                      "data": {
                        "sku": "H100",
                        "observed_at": "2026-08-27T06:00:00.000Z",
                        "value_usd_gpu_hr": 3.645759,
                        "stability_band_usd_gpu_hr": 0.555759,
                        "unit": "USD/GPU/hour"
                      },
                      "meta": {
                        "scope": "observation",
                        "index_name": "Computable GPU Index",
                        "methodology_id": "h100_sxm_v1_calc_v1",
                        "input_snapshot_sha256": "8e1df331554b6b256ba89297a541ccdd3b7e75b88f9fdf3f4db98f275cdd3c2a",
                        "as_of_observed_at": "2026-08-27T06:00:00.000Z",
                        "generated_at": "2026-08-27T06:04:24.000Z",
                        "coverage": { "n_sources": 3, "n_passing": 2, "frozen": [], "excluded": ["vast"] },
                        "status": "ok",
                        "reason": null,
                        "freshness": "fresh"
                      },
                      "license": {
                        "spdx": "CC-BY-NC-4.0",
                        "url": "https://creativecommons.org/licenses/by-nc/4.0/",
                        "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
                      }
                    }
                  },
                  "withReceipts": {
                    "summary": "include=receipts",
                    "value": {
                      "data": {
                        "sku": "H100",
                        "observed_at": "2026-08-27T06:00:00.000Z",
                        "value_usd_gpu_hr": 3.645759,
                        "stability_band_usd_gpu_hr": 0.555759,
                        "unit": "USD/GPU/hour",
                        "receipts": [
                          {
                            "source_id": "civo",
                            "liveness_score": null,
                            "price": 2.99,
                            "sd": 0.05,
                            "weight": 0.51,
                            "source_url": "https://www.civo.com/pricing",
                            "status": "ok",
                            "filter_verdict": "accepted",
                            "last_seen": "2026-08-27T06:00:00.000Z"
                          },
                          {
                            "source_id": "lambda",
                            "liveness_score": null,
                            "price": 3.99,
                            "sd": 0.05,
                            "weight": 0.49,
                            "source_url": "https://lambda.ai/pricing",
                            "status": "ok",
                            "filter_verdict": "accepted",
                            "last_seen": "2026-08-27T06:00:00.000Z"
                          },
                          {
                            "source_id": "vast",
                            "liveness_score": null,
                            "price": null,
                            "sd": null,
                            "weight": null,
                            "source_url": "https://console.vast.ai/api/v0/bundles/",
                            "status": "excluded",
                            "filter_verdict": "not_evaluated",
                            "last_seen": null
                          }
                        ]
                      },
                      "meta": {
                        "scope": "observation",
                        "index_name": "Computable GPU Index",
                        "methodology_id": "h100_sxm_v1_calc_v1",
                        "input_snapshot_sha256": "8e1df331554b6b256ba89297a541ccdd3b7e75b88f9fdf3f4db98f275cdd3c2a",
                        "as_of_observed_at": "2026-08-27T06:00:00.000Z",
                        "generated_at": "2026-08-27T06:04:24.000Z",
                        "coverage": { "n_sources": 3, "n_passing": 2, "frozen": [], "excluded": ["vast"] },
                        "status": "ok",
                        "reason": null,
                        "freshness": "fresh"
                      },
                      "license": {
                        "spdx": "CC-BY-NC-4.0",
                        "url": "https://creativecommons.org/licenses/by-nc/4.0/",
                        "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
                      }
                    }
                  }
                }
              }
            }
          },
          "304": {
            "description": "The entity tag sent in `If-None-Match` still matches, so no body is returned. Every success carries an `ETag`, and a `304` keeps the cache and provenance headers.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlWindowed" },
              "ETag": { "$ref": "#/components/headers/ETag" },
              "x-index-artifact": { "$ref": "#/components/headers/IndexArtifact" },
              "x-index-artifact-sha256": { "$ref": "#/components/headers/IndexArtifactSha256" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            }
          },
          "400": {
            "description": "Typed refusal. Codes that reach this status: `history_window_exceeded`, `invalid_request`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "history_window_exceeded": { "$ref": "#/components/examples/history_window_exceeded" },
                  "invalid_request": { "$ref": "#/components/examples/invalid_request" }
                }
              }
            }
          },
          "403": {
            "description": "The `Host` or `Origin` header is not on the service allowlist. The body is an `invalid_request` envelope, the one place this code does not arrive as a `400`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "invalid_request": { "$ref": "#/components/examples/invalid_request" } }
              }
            }
          },
          "404": {
            "description": "Typed refusal. Codes that reach this status: `artifact_missing`, `unknown_sku`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "artifact_missing": { "$ref": "#/components/examples/artifact_missing" },
                  "unknown_sku": { "$ref": "#/components/examples/unknown_sku" }
                }
              }
            }
          },
          "429": {
            "description": "Typed refusal. Codes that reach this status: `rate_limited`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" },
              "Retry-After": { "$ref": "#/components/headers/RetryAfter" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "rate_limited": { "$ref": "#/components/examples/rate_limited" } }
              }
            }
          },
          "500": {
            "description": "Typed refusal. Codes that reach this status: `internal_error`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "internal_error": { "$ref": "#/components/examples/internal_error" } }
              }
            }
          },
          "502": {
            "description": "Typed refusal. Codes that reach this status: `artifact_digest_mismatch`, `artifact_path_violation`, `invalid_artifact`, `unknown_methodology`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "artifact_digest_mismatch": { "$ref": "#/components/examples/artifact_digest_mismatch" },
                  "artifact_path_violation": { "$ref": "#/components/examples/artifact_path_violation" },
                  "invalid_artifact": { "$ref": "#/components/examples/invalid_artifact" },
                  "unknown_methodology": { "$ref": "#/components/examples/unknown_methodology" }
                }
              }
            }
          },
          "503": {
            "description": "Typed refusal. Codes that reach this status: `upstream_unavailable`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "upstream_unavailable": { "$ref": "#/components/examples/upstream_unavailable" } }
              }
            }
          }
        }
      }
    },
    "/v1/index/{sku}/observations/{observed_at}": {
      "get": {
        "operationId": "getIndexObservation",
        "tags": ["Index"],
        "summary": "One observation",
        "description": "One explicit hourly observation, always with the per-provider receipt set.\n\nObservation hours are limited to the rolling 90-day window ending at the current UTC hour. A request that reaches before it is refused with `history_window_exceeded` and never clamped.\n\nAccepts no query parameters; any query key is an `invalid_request` refusal.",
        "parameters": [
          {
            "name": "sku",
            "in": "path",
            "required": true,
            "description": "The SKU lane, exactly as `GET /v1/methodology` reports it in `data.skus`. The published set is index configuration rather than part of this contract, so it is not enumerated here; an unpublished SKU is an `unknown_sku` refusal.",
            "schema": { "$ref": "#/components/schemas/Identifier" },
            "examples": {
              "B300": { "value": "B300" },
              "B200": { "value": "B200" },
              "H100": { "value": "H100" },
              "H200": { "value": "H200" }
            }
          },
          {
            "name": "observed_at",
            "in": "path",
            "required": true,
            "description": "The exact UTC hour the observation is labelled with. Percent-encode the colons when sending it in a path segment.",
            "schema": { "$ref": "#/components/schemas/HourlyDateTimeString" },
            "examples": { "hour": { "value": "2026-08-27T06:00:00.000Z" } }
          }
        ],
        "responses": {
          "200": {
            "description": "The observation, receipts included.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlWindowed" },
              "ETag": { "$ref": "#/components/headers/ETag" },
              "x-index-artifact": { "$ref": "#/components/headers/IndexArtifact" },
              "x-index-artifact-sha256": { "$ref": "#/components/headers/IndexArtifactSha256" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/IndexValueDataResponse" },
                "examples": {
                  "observation": {
                    "summary": "A published hour",
                    "value": {
                      "data": {
                        "sku": "H100",
                        "observed_at": "2026-08-27T06:00:00.000Z",
                        "value_usd_gpu_hr": 3.645759,
                        "stability_band_usd_gpu_hr": 0.555759,
                        "unit": "USD/GPU/hour",
                        "receipts": [
                          {
                            "source_id": "civo",
                            "liveness_score": null,
                            "price": 2.99,
                            "sd": 0.05,
                            "weight": 0.51,
                            "source_url": "https://www.civo.com/pricing",
                            "status": "ok",
                            "filter_verdict": "accepted",
                            "last_seen": "2026-08-27T06:00:00.000Z"
                          },
                          {
                            "source_id": "lambda",
                            "liveness_score": null,
                            "price": 3.99,
                            "sd": 0.05,
                            "weight": 0.49,
                            "source_url": "https://lambda.ai/pricing",
                            "status": "ok",
                            "filter_verdict": "accepted",
                            "last_seen": "2026-08-27T06:00:00.000Z"
                          },
                          {
                            "source_id": "vast",
                            "liveness_score": null,
                            "price": null,
                            "sd": null,
                            "weight": null,
                            "source_url": "https://console.vast.ai/api/v0/bundles/",
                            "status": "excluded",
                            "filter_verdict": "not_evaluated",
                            "last_seen": null
                          }
                        ]
                      },
                      "meta": {
                        "scope": "observation",
                        "index_name": "Computable GPU Index",
                        "methodology_id": "h100_sxm_v1_calc_v1",
                        "input_snapshot_sha256": "8e1df331554b6b256ba89297a541ccdd3b7e75b88f9fdf3f4db98f275cdd3c2a",
                        "as_of_observed_at": "2026-08-27T06:00:00.000Z",
                        "generated_at": "2026-08-27T06:04:24.000Z",
                        "coverage": { "n_sources": 3, "n_passing": 2, "frozen": [], "excluded": ["vast"] },
                        "status": "ok",
                        "reason": null,
                        "freshness": "fresh"
                      },
                      "license": {
                        "spdx": "CC-BY-NC-4.0",
                        "url": "https://creativecommons.org/licenses/by-nc/4.0/",
                        "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
                      }
                    }
                  }
                }
              }
            }
          },
          "304": {
            "description": "The entity tag sent in `If-None-Match` still matches, so no body is returned. Every success carries an `ETag`, and a `304` keeps the cache and provenance headers.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlWindowed" },
              "ETag": { "$ref": "#/components/headers/ETag" },
              "x-index-artifact": { "$ref": "#/components/headers/IndexArtifact" },
              "x-index-artifact-sha256": { "$ref": "#/components/headers/IndexArtifactSha256" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            }
          },
          "400": {
            "description": "Typed refusal. Codes that reach this status: `history_window_exceeded`, `invalid_request`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "history_window_exceeded": { "$ref": "#/components/examples/history_window_exceeded" },
                  "invalid_request": { "$ref": "#/components/examples/invalid_request" }
                }
              }
            }
          },
          "403": {
            "description": "The `Host` or `Origin` header is not on the service allowlist. The body is an `invalid_request` envelope, the one place this code does not arrive as a `400`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "invalid_request": { "$ref": "#/components/examples/invalid_request" } }
              }
            }
          },
          "404": {
            "description": "Typed refusal. Codes that reach this status: `artifact_missing`, `unknown_sku`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "artifact_missing": { "$ref": "#/components/examples/artifact_missing" },
                  "unknown_sku": { "$ref": "#/components/examples/unknown_sku" }
                }
              }
            }
          },
          "429": {
            "description": "Typed refusal. Codes that reach this status: `rate_limited`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" },
              "Retry-After": { "$ref": "#/components/headers/RetryAfter" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "rate_limited": { "$ref": "#/components/examples/rate_limited" } }
              }
            }
          },
          "500": {
            "description": "Typed refusal. Codes that reach this status: `internal_error`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "internal_error": { "$ref": "#/components/examples/internal_error" } }
              }
            }
          },
          "502": {
            "description": "Typed refusal. Codes that reach this status: `artifact_digest_mismatch`, `artifact_path_violation`, `invalid_artifact`, `unknown_methodology`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "artifact_digest_mismatch": { "$ref": "#/components/examples/artifact_digest_mismatch" },
                  "artifact_path_violation": { "$ref": "#/components/examples/artifact_path_violation" },
                  "invalid_artifact": { "$ref": "#/components/examples/invalid_artifact" },
                  "unknown_methodology": { "$ref": "#/components/examples/unknown_methodology" }
                }
              }
            }
          },
          "503": {
            "description": "Typed refusal. Codes that reach this status: `upstream_unavailable`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "upstream_unavailable": { "$ref": "#/components/examples/upstream_unavailable" } }
              }
            }
          }
        }
      }
    },
    "/v1/index/{sku}/settlement": {
      "get": {
        "operationId": "getIndexSettlement",
        "tags": ["Index"],
        "summary": "Settlement rate",
        "description": "The canonical gap-filled period rate over an inclusive UTC hour range.\n\nA physical gap carries the mean of the preceding published scheduled observations into every stamp in that gap; `data.rate_denominator_count` is the observed-plus-carried denominator, not an observation count. `data.coverage` reports observed and carried hours separately, plus every gap and its causes.\n\nA period with neither an observed nor a derivable carried value is a `no_data` refusal. If any fill window would reach before the public history cutoff the request is refused with `history_window_exceeded` rather than answered from gated values.",
        "parameters": [
          {
            "name": "sku",
            "in": "path",
            "required": true,
            "description": "The SKU lane, exactly as `GET /v1/methodology` reports it in `data.skus`. The published set is index configuration rather than part of this contract, so it is not enumerated here; an unpublished SKU is an `unknown_sku` refusal.",
            "schema": { "$ref": "#/components/schemas/Identifier" },
            "examples": {
              "B300": { "value": "B300" },
              "B200": { "value": "B200" },
              "H100": { "value": "H100" },
              "H200": { "value": "H200" }
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": true,
            "description": "Inclusive first hour of the period.",
            "schema": { "$ref": "#/components/schemas/HourlyDateTimeString" }
          },
          {
            "name": "to",
            "in": "query",
            "required": true,
            "description": "Inclusive last hour of the period. Must not precede `from`.",
            "schema": { "$ref": "#/components/schemas/HourlyDateTimeString" }
          }
        ],
        "responses": {
          "200": {
            "description": "The period rate with its gap-fill accounting.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlWindowed" },
              "ETag": { "$ref": "#/components/headers/ETag" },
              "x-index-artifact": { "$ref": "#/components/headers/IndexArtifact" },
              "x-index-artifact-sha256": { "$ref": "#/components/headers/IndexArtifactSha256" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/SettlementDataResponse" },
                "examples": {
                  "sevenHourPeriod": {
                    "summary": "A fully observed seven-hour period",
                    "value": {
                      "data": {
                        "sku": "H100",
                        "from": "2026-08-27T00:00:00.000Z",
                        "to": "2026-08-27T06:00:00.000Z",
                        "value_usd_gpu_hr": 3.6093,
                        "unit": "USD/GPU/hour",
                        "rate_denominator_count": 7,
                        "coverage": {
                          "scheduled": 7,
                          "observed": 7,
                          "carried": 0,
                          "coverage_ratio": 1,
                          "longest_gap": 0,
                          "longest_gap_share": 0,
                          "gaps": []
                        },
                        "band": "settles"
                      },
                      "meta": {
                        "scope": "settlement",
                        "index_name": "Computable GPU Index",
                        "methodology_id": "h100_sxm_v1_calc_v1",
                        "input_snapshot_sha256": "8e1df331554b6b256ba89297a541ccdd3b7e75b88f9fdf3f4db98f275cdd3c2a",
                        "as_of_observed_at": "2026-08-27T06:00:00.000Z",
                        "generated_at": "2026-08-27T06:04:24.000Z",
                        "coverage": { "n_sources": 3, "n_passing": 2, "frozen": [], "excluded": ["vast"] },
                        "status": "ok",
                        "reason": null,
                        "freshness": "fresh"
                      },
                      "license": {
                        "spdx": "CC-BY-NC-4.0",
                        "url": "https://creativecommons.org/licenses/by-nc/4.0/",
                        "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
                      }
                    }
                  }
                }
              }
            }
          },
          "304": {
            "description": "The entity tag sent in `If-None-Match` still matches, so no body is returned. Every success carries an `ETag`, and a `304` keeps the cache and provenance headers.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlWindowed" },
              "ETag": { "$ref": "#/components/headers/ETag" },
              "x-index-artifact": { "$ref": "#/components/headers/IndexArtifact" },
              "x-index-artifact-sha256": { "$ref": "#/components/headers/IndexArtifactSha256" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            }
          },
          "400": {
            "description": "Typed refusal. Codes that reach this status: `history_window_exceeded`, `invalid_request`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "history_window_exceeded": { "$ref": "#/components/examples/history_window_exceeded" },
                  "invalid_request": { "$ref": "#/components/examples/invalid_request" }
                }
              }
            }
          },
          "403": {
            "description": "The `Host` or `Origin` header is not on the service allowlist. The body is an `invalid_request` envelope, the one place this code does not arrive as a `400`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "invalid_request": { "$ref": "#/components/examples/invalid_request" } }
              }
            }
          },
          "404": {
            "description": "Typed refusal. Codes that reach this status: `artifact_missing`, `no_data`, `unknown_sku`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "artifact_missing": { "$ref": "#/components/examples/artifact_missing" },
                  "no_data": { "$ref": "#/components/examples/no_data" },
                  "unknown_sku": { "$ref": "#/components/examples/unknown_sku" }
                }
              }
            }
          },
          "429": {
            "description": "Typed refusal. Codes that reach this status: `rate_limited`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" },
              "Retry-After": { "$ref": "#/components/headers/RetryAfter" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "rate_limited": { "$ref": "#/components/examples/rate_limited" } }
              }
            }
          },
          "500": {
            "description": "Typed refusal. Codes that reach this status: `internal_error`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "internal_error": { "$ref": "#/components/examples/internal_error" } }
              }
            }
          },
          "502": {
            "description": "Typed refusal. Codes that reach this status: `artifact_digest_mismatch`, `artifact_path_violation`, `invalid_artifact`, `unknown_methodology`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "artifact_digest_mismatch": { "$ref": "#/components/examples/artifact_digest_mismatch" },
                  "artifact_path_violation": { "$ref": "#/components/examples/artifact_path_violation" },
                  "invalid_artifact": { "$ref": "#/components/examples/invalid_artifact" },
                  "unknown_methodology": { "$ref": "#/components/examples/unknown_methodology" }
                }
              }
            }
          },
          "503": {
            "description": "Typed refusal. Codes that reach this status: `upstream_unavailable`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "upstream_unavailable": { "$ref": "#/components/examples/upstream_unavailable" } }
              }
            }
          }
        }
      }
    },
    "/v1/methodology": {
      "get": {
        "operationId": "getIndexMethodology",
        "tags": ["Methodology"],
        "summary": "Index methodology",
        "description": "Index identity, the published SKU lanes and their exact methodology versions, licence terms, and the history policy.\n\nThe lane set is index configuration rather than part of this contract, so `data.skus` is the authoritative list of what is published today.\n\nNot sku-scoped, so it never answers `unknown_sku` or `history_window_exceeded`. Accepts no query parameters; any query key is an `invalid_request` refusal.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Index identity and methodology lanes.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlLatest" },
              "ETag": { "$ref": "#/components/headers/ETag" },
              "x-index-artifact": { "$ref": "#/components/headers/IndexArtifact" },
              "x-index-artifact-sha256": { "$ref": "#/components/headers/IndexArtifactSha256" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/AboutIndexDataResponse" },
                "examples": {
                  "methodology": {
                    "summary": "Four published lanes",
                    "value": {
                      "data": {
                        "index_name": "Computable GPU Index",
                        "index_domain": "mcp.getcomputable.com",
                        "primary_sku": "B300",
                        "unit": "USD/GPU/hour",
                        "skus": ["B300", "B200", "H100", "H200"],
                        "methodologies": [
                          { "sku": "B300", "methodology_id": "annex_a_v0_2_calc_v7", "methodology_version": "0.2" },
                          { "sku": "B200", "methodology_id": "annex_a2_v0_3_calc_v6", "methodology_version": "0.3" },
                          { "sku": "H100", "methodology_id": "h100_sxm_v1_calc_v1", "methodology_version": "1" },
                          { "sku": "H200", "methodology_id": "h200_sxm_v1_calc_v1", "methodology_version": "1" }
                        ],
                        "config_spec_priced": "One B300 SXM accelerator-hour.",
                        "license_terms": "CC-BY-NC-4.0",
                        "changelog_tail": [],
                        "history_policy": {
                          "availability": "trailing_window_only",
                          "resolution": "hourly",
                          "window_days": 90,
                          "default_limit": 168,
                          "max_limit": 744
                        }
                      },
                      "meta": {
                        "scope": "primary_lane",
                        "index_name": "Computable GPU Index",
                        "methodology_id": "annex_a_v0_2_calc_v7",
                        "input_snapshot_sha256": "8e1df331554b6b256ba89297a541ccdd3b7e75b88f9fdf3f4db98f275cdd3c2a",
                        "as_of_observed_at": "2026-08-27T06:00:00.000Z",
                        "generated_at": "2026-08-27T06:04:24.000Z",
                        "coverage": { "n_sources": 8, "n_passing": 8, "frozen": [], "excluded": [] },
                        "status": "ok",
                        "reason": null,
                        "freshness": "fresh"
                      },
                      "license": {
                        "spdx": "CC-BY-NC-4.0",
                        "url": "https://creativecommons.org/licenses/by-nc/4.0/",
                        "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
                      }
                    }
                  }
                }
              }
            }
          },
          "304": {
            "description": "The entity tag sent in `If-None-Match` still matches, so no body is returned. Every success carries an `ETag`, and a `304` keeps the cache and provenance headers.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlLatest" },
              "ETag": { "$ref": "#/components/headers/ETag" },
              "x-index-artifact": { "$ref": "#/components/headers/IndexArtifact" },
              "x-index-artifact-sha256": { "$ref": "#/components/headers/IndexArtifactSha256" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            }
          },
          "400": {
            "description": "Typed refusal. Codes that reach this status: `invalid_request`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "invalid_request": { "$ref": "#/components/examples/invalid_request" } }
              }
            }
          },
          "403": {
            "description": "The `Host` or `Origin` header is not on the service allowlist. The body is an `invalid_request` envelope, the one place this code does not arrive as a `400`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "invalid_request": { "$ref": "#/components/examples/invalid_request" } }
              }
            }
          },
          "404": {
            "description": "Typed refusal. Codes that reach this status: `artifact_missing`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "artifact_missing": { "$ref": "#/components/examples/artifact_missing" } }
              }
            }
          },
          "429": {
            "description": "Typed refusal. Codes that reach this status: `rate_limited`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" },
              "Retry-After": { "$ref": "#/components/headers/RetryAfter" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "rate_limited": { "$ref": "#/components/examples/rate_limited" } }
              }
            }
          },
          "500": {
            "description": "Typed refusal. Codes that reach this status: `internal_error`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "internal_error": { "$ref": "#/components/examples/internal_error" } }
              }
            }
          },
          "502": {
            "description": "Typed refusal. Codes that reach this status: `artifact_digest_mismatch`, `artifact_path_violation`, `invalid_artifact`, `unknown_methodology`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": {
                  "artifact_digest_mismatch": { "$ref": "#/components/examples/artifact_digest_mismatch" },
                  "artifact_path_violation": { "$ref": "#/components/examples/artifact_path_violation" },
                  "invalid_artifact": { "$ref": "#/components/examples/invalid_artifact" },
                  "unknown_methodology": { "$ref": "#/components/examples/unknown_methodology" }
                }
              }
            }
          },
          "503": {
            "description": "Typed refusal. Codes that reach this status: `upstream_unavailable`.",
            "headers": {
              "Cache-Control": { "$ref": "#/components/headers/CacheControlRefusal" },
              "RateLimit-Limit": { "$ref": "#/components/headers/RateLimitLimit" },
              "RateLimit-Policy": { "$ref": "#/components/headers/RateLimitPolicy" },
              "RateLimit-Remaining": { "$ref": "#/components/headers/RateLimitRemaining" },
              "RateLimit-Reset": { "$ref": "#/components/headers/RateLimitReset" }
            },
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/RefusalEnvelope" },
                "examples": { "upstream_unavailable": { "$ref": "#/components/examples/upstream_unavailable" } }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "headers": {
      "CacheControlLatest": {
        "description": "Cache policy for the self-description route: `public, max-age=300`.",
        "schema": { "type": "string", "const": "public, max-age=300" }
      },
      "CacheControlWindowed": {
        "description": "Cache policy for every corpus-backed route: `public, max-age=60, s-maxage=60, must-revalidate`. No `stale-while-revalidate` is offered, so a retracted provider price cannot outlive its retraction in a shared cache.",
        "schema": { "type": "string", "const": "public, max-age=60, s-maxage=60, must-revalidate" }
      },
      "CacheControlRefusal": {
        "description": "Refusals are never cached: `no-store`.",
        "schema": { "type": "string", "const": "no-store" }
      },
      "ETag": {
        "description": "Strong entity tag over the response body. Send it back in `If-None-Match` for a `304`.",
        "schema": { "type": "string" }
      },
      "IndexArtifact": {
        "description": "The corpus object this response was built from. The strict envelope has nowhere to carry it, so it is a header.",
        "schema": { "type": "string" }
      },
      "IndexArtifactSha256": {
        "description": "Verified SHA-256 of that corpus object, recomputed before any schema saw the payload.",
        "schema": { "$ref": "#/components/schemas/Sha256" }
      },
      "RateLimitLimit": {
        "description": "Requests allowed in the current window. Emitted by the Node transport; the fetch-native Worker port does not send it.",
        "schema": { "type": "integer", "minimum": 0 }
      },
      "RateLimitPolicy": {
        "description": "The quota policy in force, as `<limit>;w=<window-seconds>`. Emitted by the Node transport; the fetch-native Worker port does not send it.",
        "schema": { "type": "string" }
      },
      "RateLimitRemaining": {
        "description": "Requests left in the current window. Emitted by the Node transport; the fetch-native Worker port does not send it.",
        "schema": { "type": "integer", "minimum": 0 }
      },
      "RateLimitReset": {
        "description": "Seconds until the current window resets. Emitted by the Node transport; the fetch-native Worker port does not send it.",
        "schema": { "type": "integer", "minimum": 0 }
      },
      "RetryAfter": {
        "description": "Seconds to wait before retrying. Sent on `429` only; back off until it elapses. Emitted by the Node transport; the fetch-native Worker port does not send it.",
        "schema": { "type": "integer", "minimum": 0 }
      }
    },
    "examples": {
      "artifact_digest_mismatch": {
        "summary": "`artifact_digest_mismatch` refusal",
        "value": {
          "error": {
            "code": "artifact_digest_mismatch",
            "message": "The publication artifact did not match its published digest."
          },
          "meta": {
            "scope": "refusal",
            "index_name": "Computable GPU Index",
            "methodology_id": null,
            "input_snapshot_sha256": null,
            "as_of_observed_at": null,
            "generated_at": "2026-08-27T07:52:16.640Z",
            "status": null,
            "reason": null,
            "freshness": null,
            "coverage": null
          },
          "license": {
            "spdx": "CC-BY-NC-4.0",
            "url": "https://creativecommons.org/licenses/by-nc/4.0/",
            "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
          }
        }
      },
      "artifact_missing": {
        "summary": "`artifact_missing` refusal",
        "value": {
          "error": { "code": "artifact_missing", "message": "The requested publication artifact is not available." },
          "meta": {
            "scope": "refusal",
            "index_name": "Computable GPU Index",
            "methodology_id": null,
            "input_snapshot_sha256": null,
            "as_of_observed_at": null,
            "generated_at": "2026-08-27T07:52:16.640Z",
            "status": null,
            "reason": null,
            "freshness": null,
            "coverage": null
          },
          "license": {
            "spdx": "CC-BY-NC-4.0",
            "url": "https://creativecommons.org/licenses/by-nc/4.0/",
            "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
          }
        }
      },
      "artifact_path_violation": {
        "summary": "`artifact_path_violation` refusal",
        "value": {
          "error": { "code": "artifact_path_violation", "message": "The publication artifact path is invalid." },
          "meta": {
            "scope": "refusal",
            "index_name": "Computable GPU Index",
            "methodology_id": null,
            "input_snapshot_sha256": null,
            "as_of_observed_at": null,
            "generated_at": "2026-08-27T07:52:16.640Z",
            "status": null,
            "reason": null,
            "freshness": null,
            "coverage": null
          },
          "license": {
            "spdx": "CC-BY-NC-4.0",
            "url": "https://creativecommons.org/licenses/by-nc/4.0/",
            "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
          }
        }
      },
      "history_window_exceeded": {
        "summary": "`history_window_exceeded` refusal",
        "value": {
          "error": {
            "code": "history_window_exceeded",
            "message": "The requested observation falls outside the public history window.",
            "details": { "history_window_days": 90 }
          },
          "meta": {
            "scope": "refusal",
            "index_name": "Computable GPU Index",
            "methodology_id": null,
            "input_snapshot_sha256": null,
            "as_of_observed_at": null,
            "generated_at": "2026-08-27T07:52:16.640Z",
            "status": null,
            "reason": null,
            "freshness": null,
            "coverage": null
          },
          "license": {
            "spdx": "CC-BY-NC-4.0",
            "url": "https://creativecommons.org/licenses/by-nc/4.0/",
            "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
          }
        }
      },
      "internal_error": {
        "summary": "`internal_error` refusal",
        "value": {
          "error": { "code": "internal_error", "message": "The request could not be completed." },
          "meta": {
            "scope": "refusal",
            "index_name": "Computable GPU Index",
            "methodology_id": null,
            "input_snapshot_sha256": null,
            "as_of_observed_at": null,
            "generated_at": "2026-08-27T07:52:16.640Z",
            "status": null,
            "reason": null,
            "freshness": null,
            "coverage": null
          },
          "license": {
            "spdx": "CC-BY-NC-4.0",
            "url": "https://creativecommons.org/licenses/by-nc/4.0/",
            "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
          }
        }
      },
      "invalid_artifact": {
        "summary": "`invalid_artifact` refusal",
        "value": {
          "error": { "code": "invalid_artifact", "message": "The publication artifact is invalid." },
          "meta": {
            "scope": "refusal",
            "index_name": "Computable GPU Index",
            "methodology_id": null,
            "input_snapshot_sha256": null,
            "as_of_observed_at": null,
            "generated_at": "2026-08-27T07:52:16.640Z",
            "status": null,
            "reason": null,
            "freshness": null,
            "coverage": null
          },
          "license": {
            "spdx": "CC-BY-NC-4.0",
            "url": "https://creativecommons.org/licenses/by-nc/4.0/",
            "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
          }
        }
      },
      "invalid_request": {
        "summary": "`invalid_request` refusal",
        "value": {
          "error": { "code": "invalid_request", "message": "The request arguments are invalid." },
          "meta": {
            "scope": "refusal",
            "index_name": "Computable GPU Index",
            "methodology_id": null,
            "input_snapshot_sha256": null,
            "as_of_observed_at": null,
            "generated_at": "2026-08-27T07:52:16.640Z",
            "status": null,
            "reason": null,
            "freshness": null,
            "coverage": null
          },
          "license": {
            "spdx": "CC-BY-NC-4.0",
            "url": "https://creativecommons.org/licenses/by-nc/4.0/",
            "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
          }
        }
      },
      "no_data": {
        "summary": "`no_data` refusal",
        "value": {
          "error": { "code": "no_data", "message": "No published data matched the request." },
          "meta": {
            "scope": "refusal",
            "index_name": "Computable GPU Index",
            "methodology_id": null,
            "input_snapshot_sha256": null,
            "as_of_observed_at": null,
            "generated_at": "2026-08-27T07:52:16.640Z",
            "status": null,
            "reason": null,
            "freshness": null,
            "coverage": null
          },
          "license": {
            "spdx": "CC-BY-NC-4.0",
            "url": "https://creativecommons.org/licenses/by-nc/4.0/",
            "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
          }
        }
      },
      "rate_limited": {
        "summary": "`rate_limited` refusal",
        "value": {
          "error": { "code": "rate_limited", "message": "The fair-use request limit has been reached." },
          "meta": {
            "scope": "refusal",
            "index_name": "Computable GPU Index",
            "methodology_id": null,
            "input_snapshot_sha256": null,
            "as_of_observed_at": null,
            "generated_at": "2026-08-27T07:52:16.640Z",
            "status": null,
            "reason": null,
            "freshness": null,
            "coverage": null
          },
          "license": {
            "spdx": "CC-BY-NC-4.0",
            "url": "https://creativecommons.org/licenses/by-nc/4.0/",
            "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
          }
        }
      },
      "unknown_methodology": {
        "summary": "`unknown_methodology` refusal",
        "value": {
          "error": {
            "code": "unknown_methodology",
            "message": "The artifact methodology is not configured for this index lane."
          },
          "meta": {
            "scope": "refusal",
            "index_name": "Computable GPU Index",
            "methodology_id": null,
            "input_snapshot_sha256": null,
            "as_of_observed_at": null,
            "generated_at": "2026-08-27T07:52:16.640Z",
            "status": null,
            "reason": null,
            "freshness": null,
            "coverage": null
          },
          "license": {
            "spdx": "CC-BY-NC-4.0",
            "url": "https://creativecommons.org/licenses/by-nc/4.0/",
            "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
          }
        }
      },
      "unknown_sku": {
        "summary": "`unknown_sku` refusal",
        "value": {
          "error": { "code": "unknown_sku", "message": "The requested SKU is not published by this index." },
          "meta": {
            "scope": "refusal",
            "index_name": "Computable GPU Index",
            "methodology_id": null,
            "input_snapshot_sha256": null,
            "as_of_observed_at": null,
            "generated_at": "2026-08-27T07:52:16.640Z",
            "status": null,
            "reason": null,
            "freshness": null,
            "coverage": null
          },
          "license": {
            "spdx": "CC-BY-NC-4.0",
            "url": "https://creativecommons.org/licenses/by-nc/4.0/",
            "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
          }
        }
      },
      "upstream_unavailable": {
        "summary": "`upstream_unavailable` refusal",
        "value": {
          "error": { "code": "upstream_unavailable", "message": "The publication artifact store is unavailable." },
          "meta": {
            "scope": "refusal",
            "index_name": "Computable GPU Index",
            "methodology_id": null,
            "input_snapshot_sha256": null,
            "as_of_observed_at": null,
            "generated_at": "2026-08-27T07:52:16.640Z",
            "status": null,
            "reason": null,
            "freshness": null,
            "coverage": null
          },
          "license": {
            "spdx": "CC-BY-NC-4.0",
            "url": "https://creativecommons.org/licenses/by-nc/4.0/",
            "attribution": "Computable GPU Index by Computable — mcp.getcomputable.com"
          }
        }
      }
    },
    "schemas": {
      "AboutIndexData": {
        "type": "object",
        "properties": {
          "index_name": { "$ref": "#/components/schemas/IndexName" },
          "index_domain": { "$ref": "#/components/schemas/Hostname" },
          "primary_sku": { "$ref": "#/components/schemas/Identifier" },
          "unit": { "$ref": "#/components/schemas/Unit" },
          "skus": { "type": "array", "items": { "$ref": "#/components/schemas/Identifier" } },
          "methodologies": { "type": "array", "items": { "$ref": "#/components/schemas/MethodologyLane" } },
          "config_spec_priced": { "type": "string", "minLength": 1, "pattern": "\\S", "maxLength": 512 },
          "license_terms": { "type": "string", "const": "CC-BY-NC-4.0" },
          "changelog_tail": { "type": "array", "items": { "$ref": "#/components/schemas/ChangelogEntry" } },
          "history_policy": {
            "type": "object",
            "properties": {
              "availability": { "type": "string", "const": "trailing_window_only" },
              "resolution": { "type": "string", "const": "hourly" },
              "window_days": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 },
              "default_limit": { "type": "number", "const": 168 },
              "max_limit": { "type": "number", "const": 744 }
            },
            "required": ["availability", "resolution", "window_days", "default_limit", "max_limit"],
            "additionalProperties": false
          }
        },
        "required": [
          "index_name",
          "index_domain",
          "primary_sku",
          "unit",
          "skus",
          "methodologies",
          "config_spec_priced",
          "license_terms",
          "changelog_tail",
          "history_policy"
        ],
        "additionalProperties": false
      },
      "AboutIndexDataResponse": {
        "type": "object",
        "properties": {
          "data": { "$ref": "#/components/schemas/AboutIndexData" },
          "meta": { "$ref": "#/components/schemas/PrimaryLanePublicationMeta" },
          "license": { "$ref": "#/components/schemas/License" }
        },
        "required": ["data", "meta", "license"],
        "additionalProperties": false
      },
      "AvailableIndexValueData": {
        "type": "object",
        "properties": {
          "sku": { "$ref": "#/components/schemas/Identifier" },
          "observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "value_usd_gpu_hr": { "$ref": "#/components/schemas/Price" },
          "stability_band_usd_gpu_hr": { "$ref": "#/components/schemas/StandardDeviation" },
          "unit": { "$ref": "#/components/schemas/Unit" },
          "receipts": { "$ref": "#/components/schemas/PublicReceipts" }
        },
        "required": ["sku", "observed_at", "value_usd_gpu_hr", "stability_band_usd_gpu_hr", "unit", "receipts"],
        "additionalProperties": false
      },
      "AvailableLatestIndexValueData": {
        "type": "object",
        "properties": {
          "sku": { "$ref": "#/components/schemas/Identifier" },
          "observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "value_usd_gpu_hr": { "$ref": "#/components/schemas/Price" },
          "stability_band_usd_gpu_hr": { "$ref": "#/components/schemas/StandardDeviation" },
          "unit": { "$ref": "#/components/schemas/Unit" }
        },
        "required": ["sku", "observed_at", "value_usd_gpu_hr", "stability_band_usd_gpu_hr", "unit"],
        "additionalProperties": false
      },
      "ChangelogEntry": {
        "type": "object",
        "properties": {
          "methodology_id": { "$ref": "#/components/schemas/Identifier" },
          "methodology_version": { "$ref": "#/components/schemas/DisplayLabel" },
          "date": { "$ref": "#/components/schemas/DateString" },
          "summary": { "type": "string", "minLength": 1, "pattern": "\\S", "maxLength": 512 },
          "url": { "$ref": "#/components/schemas/HttpsUrl" }
        },
        "required": ["methodology_id", "methodology_version", "date", "summary", "url"],
        "additionalProperties": false
      },
      "ContributingReceipt": {
        "type": "object",
        "properties": {
          "source_id": { "$ref": "#/components/schemas/Identifier" },
          "liveness_score": { "$ref": "#/components/schemas/NullableLivenessScore" },
          "price": { "$ref": "#/components/schemas/Price" },
          "sd": { "$ref": "#/components/schemas/StandardDeviation" },
          "weight": { "$ref": "#/components/schemas/Weight" },
          "source_url": { "$ref": "#/components/schemas/HttpsUrl" },
          "status": { "type": "string", "const": "ok" },
          "filter_verdict": { "type": "string", "const": "accepted" },
          "last_seen": { "$ref": "#/components/schemas/HourlyDateTimeString" }
        },
        "required": [
          "source_id",
          "liveness_score",
          "price",
          "sd",
          "weight",
          "source_url",
          "status",
          "filter_verdict",
          "last_seen"
        ],
        "additionalProperties": false
      },
      "Coverage": {
        "type": "object",
        "properties": {
          "n_sources": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "n_passing": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "frozen": { "$ref": "#/components/schemas/IdentifierSet" },
          "excluded": { "$ref": "#/components/schemas/IdentifierSet" }
        },
        "required": ["n_sources", "n_passing", "frozen", "excluded"],
        "additionalProperties": false,
        "description": "Provider participation behind one observation. `n_passing` counts the providers that contributed to the value, so it is at most `n_sources`."
      },
      "Cursor": {
        "type": "string",
        "minLength": 1,
        "maxLength": 2048,
        "pattern": "^[A-Za-z0-9_-]+$",
        "description": "Opaque pagination token. Carries the verified bounds of the page it came from; do not construct one."
      },
      "DateString": {
        "type": "string",
        "format": "date",
        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
      },
      "DateTimeString": {
        "type": "string",
        "format": "date-time",
        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
      },
      "DisplayLabel": { "type": "string", "minLength": 1, "pattern": "\\S", "maxLength": 128 },
      "ExcludedReceipt": {
        "type": "object",
        "properties": {
          "source_id": { "$ref": "#/components/schemas/Identifier" },
          "liveness_score": { "$ref": "#/components/schemas/NullableLivenessScore" },
          "price": { "anyOf": [{ "$ref": "#/components/schemas/Price" }, { "type": "null" }] },
          "sd": { "anyOf": [{ "$ref": "#/components/schemas/StandardDeviation" }, { "type": "null" }] },
          "weight": { "anyOf": [{ "$ref": "#/components/schemas/Weight" }, { "type": "null" }] },
          "source_url": { "anyOf": [{ "$ref": "#/components/schemas/HttpsUrl" }, { "type": "null" }] },
          "status": { "type": "string", "const": "excluded" },
          "filter_verdict": { "$ref": "#/components/schemas/FilterVerdict" },
          "last_seen": { "anyOf": [{ "$ref": "#/components/schemas/HourlyDateTimeString" }, { "type": "null" }] }
        },
        "required": [
          "source_id",
          "liveness_score",
          "price",
          "sd",
          "weight",
          "source_url",
          "status",
          "filter_verdict",
          "last_seen"
        ],
        "additionalProperties": false
      },
      "FilterVerdict": { "type": "string", "enum": ["accepted", "rejected", "not_evaluated"] },
      "FilteredReceipt": {
        "type": "object",
        "properties": {
          "source_id": { "$ref": "#/components/schemas/Identifier" },
          "liveness_score": { "$ref": "#/components/schemas/NullableLivenessScore" },
          "price": { "$ref": "#/components/schemas/Price" },
          "sd": { "anyOf": [{ "$ref": "#/components/schemas/StandardDeviation" }, { "type": "null" }] },
          "weight": { "anyOf": [{ "$ref": "#/components/schemas/Weight" }, { "type": "null" }] },
          "source_url": { "$ref": "#/components/schemas/HttpsUrl" },
          "status": { "type": "string", "const": "ok" },
          "filter_verdict": { "type": "string", "enum": ["rejected", "not_evaluated"] },
          "last_seen": { "$ref": "#/components/schemas/HourlyDateTimeString" }
        },
        "required": [
          "source_id",
          "liveness_score",
          "price",
          "sd",
          "weight",
          "source_url",
          "status",
          "filter_verdict",
          "last_seen"
        ],
        "additionalProperties": false
      },
      "Freshness": {
        "type": "string",
        "enum": ["fresh", "stale"],
        "description": "`stale` when the newest published observation is more than 4 hours old."
      },
      "HistoryHighWaterPublicationMeta": {
        "anyOf": [
          { "$ref": "#/components/schemas/HistoryHighWaterPublicationMetaOk" },
          { "$ref": "#/components/schemas/HistoryHighWaterPublicationMetaStale" },
          { "$ref": "#/components/schemas/HistoryHighWaterPublicationMetaNoPrint" }
        ],
        "description": "Provenance for a history page, describing the newest row in the window rather than any single returned row. `scope` is always `history_high_water` on this route."
      },
      "HistoryHighWaterPublicationMetaNoPrint": {
        "type": "object",
        "properties": {
          "scope": { "$ref": "#/components/schemas/HistoryHighWaterScope" },
          "index_name": { "$ref": "#/components/schemas/IndexName" },
          "methodology_id": { "$ref": "#/components/schemas/Identifier" },
          "input_snapshot_sha256": { "$ref": "#/components/schemas/NullableSha256" },
          "as_of_observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "generated_at": { "$ref": "#/components/schemas/DateTimeString" },
          "coverage": { "$ref": "#/components/schemas/Coverage" },
          "status": { "type": "string", "const": "no_print" },
          "reason": { "$ref": "#/components/schemas/NoPrintReason" },
          "freshness": { "$ref": "#/components/schemas/Freshness" }
        },
        "required": [
          "scope",
          "index_name",
          "methodology_id",
          "input_snapshot_sha256",
          "as_of_observed_at",
          "generated_at",
          "coverage",
          "status",
          "reason",
          "freshness"
        ],
        "additionalProperties": false
      },
      "HistoryHighWaterPublicationMetaOk": {
        "type": "object",
        "properties": {
          "scope": { "$ref": "#/components/schemas/HistoryHighWaterScope" },
          "index_name": { "$ref": "#/components/schemas/IndexName" },
          "methodology_id": { "$ref": "#/components/schemas/Identifier" },
          "input_snapshot_sha256": { "$ref": "#/components/schemas/NullableSha256" },
          "as_of_observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "generated_at": { "$ref": "#/components/schemas/DateTimeString" },
          "coverage": { "$ref": "#/components/schemas/Coverage" },
          "status": { "type": "string", "const": "ok" },
          "reason": { "type": "null" },
          "freshness": { "type": "string", "const": "fresh" }
        },
        "required": [
          "scope",
          "index_name",
          "methodology_id",
          "input_snapshot_sha256",
          "as_of_observed_at",
          "generated_at",
          "coverage",
          "status",
          "reason",
          "freshness"
        ],
        "additionalProperties": false
      },
      "HistoryHighWaterPublicationMetaStale": {
        "type": "object",
        "properties": {
          "scope": { "$ref": "#/components/schemas/HistoryHighWaterScope" },
          "index_name": { "$ref": "#/components/schemas/IndexName" },
          "methodology_id": { "$ref": "#/components/schemas/Identifier" },
          "input_snapshot_sha256": { "$ref": "#/components/schemas/NullableSha256" },
          "as_of_observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "generated_at": { "$ref": "#/components/schemas/DateTimeString" },
          "coverage": { "$ref": "#/components/schemas/Coverage" },
          "status": { "type": "string", "const": "stale" },
          "reason": { "type": "string", "const": "artifact_stale" },
          "freshness": { "type": "string", "const": "stale" }
        },
        "required": [
          "scope",
          "index_name",
          "methodology_id",
          "input_snapshot_sha256",
          "as_of_observed_at",
          "generated_at",
          "coverage",
          "status",
          "reason",
          "freshness"
        ],
        "additionalProperties": false
      },
      "HistoryHighWaterScope": { "type": "string", "const": "history_high_water" },
      "HistoryRow": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
              "generated_at": { "$ref": "#/components/schemas/DateTimeString" },
              "unit": { "$ref": "#/components/schemas/Unit" },
              "methodology_id": { "$ref": "#/components/schemas/Identifier" },
              "input_snapshot_sha256": { "$ref": "#/components/schemas/NullableSha256" },
              "coverage": { "$ref": "#/components/schemas/Coverage" },
              "value_usd_gpu_hr": { "$ref": "#/components/schemas/Price" },
              "stability_band_usd_gpu_hr": { "$ref": "#/components/schemas/StandardDeviation" },
              "status": { "type": "string", "const": "ok" },
              "reason": { "type": "null" },
              "freshness": { "type": "string", "const": "fresh" }
            },
            "required": [
              "observed_at",
              "generated_at",
              "unit",
              "methodology_id",
              "input_snapshot_sha256",
              "coverage",
              "value_usd_gpu_hr",
              "stability_band_usd_gpu_hr",
              "status",
              "reason",
              "freshness"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
              "generated_at": { "$ref": "#/components/schemas/DateTimeString" },
              "unit": { "$ref": "#/components/schemas/Unit" },
              "methodology_id": { "$ref": "#/components/schemas/Identifier" },
              "input_snapshot_sha256": { "$ref": "#/components/schemas/NullableSha256" },
              "coverage": { "$ref": "#/components/schemas/Coverage" },
              "value_usd_gpu_hr": { "type": "null" },
              "stability_band_usd_gpu_hr": { "type": "null" },
              "status": { "type": "string", "const": "no_print" },
              "reason": { "$ref": "#/components/schemas/NoPrintReason" },
              "freshness": { "type": "string", "const": "fresh" }
            },
            "required": [
              "observed_at",
              "generated_at",
              "unit",
              "methodology_id",
              "input_snapshot_sha256",
              "coverage",
              "value_usd_gpu_hr",
              "stability_band_usd_gpu_hr",
              "status",
              "reason",
              "freshness"
            ],
            "additionalProperties": false
          }
        ],
        "description": "One hourly row. On `no_print` the value and band are null and `reason` names why; the hour is never omitted and never interpolated."
      },
      "HistoryRows": {
        "minItems": 1,
        "maxItems": 744,
        "type": "array",
        "items": { "$ref": "#/components/schemas/HistoryRow" }
      },
      "HistoryWindowExceededError": {
        "type": "object",
        "properties": {
          "code": { "type": "string", "const": "history_window_exceeded" },
          "message": { "type": "string", "minLength": 1, "pattern": "\\S", "maxLength": 256 },
          "details": {
            "type": "object",
            "properties": {
              "history_window_days": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }
            },
            "required": ["history_window_days"],
            "additionalProperties": false
          }
        },
        "required": ["code", "message", "details"],
        "additionalProperties": false
      },
      "Hostname": {
        "type": "string",
        "maxLength": 253,
        "pattern": "^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)(?:\\.(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?))*$",
        "description": "A DNS hostname with no scheme, port or path."
      },
      "HourlyDateTimeString": {
        "type": "string",
        "allOf": [
          {
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          { "pattern": "^\\d{4}-\\d{2}-\\d{2}T(?:[01]\\d|2[0-3]):00:00\\.000Z$" }
        ],
        "description": "An exact UTC hour, always `YYYY-MM-DDTHH:00:00.000Z`. There is no designated fixing hour.",
        "format": "date-time"
      },
      "HttpsUrl": {
        "type": "string",
        "maxLength": 2048,
        "pattern": "^https:\\/\\/(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)(?:\\.(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?))*(?:[/?#](?:[A-Za-z0-9\\-._~!$&'()*+,;=:@/?#]|%[A-Fa-f0-9]{2})*)?$",
        "description": "An absolute `https:` URL."
      },
      "Identifier": {
        "type": "string",
        "minLength": 1,
        "maxLength": 128,
        "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$",
        "description": "A stable machine identifier. SKU lanes and provider ids are index configuration, so this contract constrains their spelling and not their membership."
      },
      "IdentifierSet": { "type": "array", "items": { "$ref": "#/components/schemas/Identifier" }, "uniqueItems": true },
      "IndexName": { "type": "string", "minLength": 1, "pattern": "\\S", "maxLength": 256 },
      "IndexValueDataResponse": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "data": { "$ref": "#/components/schemas/AvailableIndexValueData" },
              "meta": {
                "anyOf": [
                  { "$ref": "#/components/schemas/ObservationPublicationMetaOk" },
                  { "$ref": "#/components/schemas/ObservationPublicationMetaStale" }
                ]
              },
              "license": { "$ref": "#/components/schemas/License" }
            },
            "required": ["data", "meta", "license"],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "data": { "$ref": "#/components/schemas/NoPrintIndexValueData" },
              "meta": { "$ref": "#/components/schemas/ObservationPublicationMetaNoPrint" },
              "license": { "$ref": "#/components/schemas/License" }
            },
            "required": ["data", "meta", "license"],
            "additionalProperties": false
          }
        ]
      },
      "LatestIndexValueDataResponse": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "data": { "$ref": "#/components/schemas/AvailableLatestIndexValueData" },
              "meta": {
                "anyOf": [
                  { "$ref": "#/components/schemas/ObservationPublicationMetaOk" },
                  { "$ref": "#/components/schemas/ObservationPublicationMetaStale" }
                ]
              },
              "license": { "$ref": "#/components/schemas/License" }
            },
            "required": ["data", "meta", "license"],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "data": { "$ref": "#/components/schemas/NoPrintLatestIndexValueData" },
              "meta": { "$ref": "#/components/schemas/ObservationPublicationMetaNoPrint" },
              "license": { "$ref": "#/components/schemas/License" }
            },
            "required": ["data", "meta", "license"],
            "additionalProperties": false
          }
        ]
      },
      "License": {
        "type": "object",
        "properties": {
          "spdx": { "type": "string", "const": "CC-BY-NC-4.0" },
          "url": { "type": "string", "const": "https://creativecommons.org/licenses/by-nc/4.0/" },
          "attribution": { "type": "string", "minLength": 1, "pattern": "\\S", "maxLength": 512 }
        },
        "required": ["spdx", "url", "attribution"],
        "additionalProperties": false
      },
      "LivenessScore": {
        "type": "number",
        "minimum": 0,
        "maximum": 1,
        "description": "Canonical `Q_i` in [0, 1] where the lane computes one."
      },
      "MethodologyLane": {
        "type": "object",
        "properties": {
          "sku": { "$ref": "#/components/schemas/Identifier" },
          "methodology_id": { "$ref": "#/components/schemas/Identifier" },
          "methodology_version": { "$ref": "#/components/schemas/DisplayLabel" }
        },
        "required": ["sku", "methodology_id", "methodology_version"],
        "additionalProperties": false
      },
      "NoPrintIndexValueData": {
        "type": "object",
        "properties": {
          "sku": { "$ref": "#/components/schemas/Identifier" },
          "observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "value_usd_gpu_hr": { "type": "null" },
          "stability_band_usd_gpu_hr": { "type": "null" },
          "unit": { "$ref": "#/components/schemas/Unit" },
          "receipts": { "$ref": "#/components/schemas/PublicReceipts" }
        },
        "required": ["sku", "observed_at", "value_usd_gpu_hr", "stability_band_usd_gpu_hr", "unit", "receipts"],
        "additionalProperties": false
      },
      "NoPrintLatestIndexValueData": {
        "type": "object",
        "properties": {
          "sku": { "$ref": "#/components/schemas/Identifier" },
          "observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "value_usd_gpu_hr": { "type": "null" },
          "stability_band_usd_gpu_hr": { "type": "null" },
          "unit": { "$ref": "#/components/schemas/Unit" }
        },
        "required": ["sku", "observed_at", "value_usd_gpu_hr", "stability_band_usd_gpu_hr", "unit"],
        "additionalProperties": false
      },
      "NoPrintReason": {
        "type": "string",
        "enum": [
          "observation_missed",
          "record_quarantined",
          "insufficient_coverage",
          "all_sources_filtered",
          "no_eligible_sources"
        ],
        "description": "Why an observation published no value."
      },
      "NullableLivenessScore": { "anyOf": [{ "$ref": "#/components/schemas/LivenessScore" }, { "type": "null" }] },
      "NullableSha256": { "anyOf": [{ "$ref": "#/components/schemas/Sha256" }, { "type": "null" }] },
      "ObservationPublicationMeta": {
        "anyOf": [
          { "$ref": "#/components/schemas/ObservationPublicationMetaOk" },
          { "$ref": "#/components/schemas/ObservationPublicationMetaStale" },
          { "$ref": "#/components/schemas/ObservationPublicationMetaNoPrint" }
        ],
        "description": "Provenance for one observation. `status`, `reason` and `freshness` are one coupled choice, not three free fields: `ok` pairs with a null reason and `fresh`, `stale` pairs with `artifact_stale` and `stale` and means the newest observation has aged past 4 hours, and `no_print` pairs with a typed no-print reason. `scope` is always `observation` on this route."
      },
      "ObservationPublicationMetaNoPrint": {
        "type": "object",
        "properties": {
          "scope": { "$ref": "#/components/schemas/ObservationScope" },
          "index_name": { "$ref": "#/components/schemas/IndexName" },
          "methodology_id": { "$ref": "#/components/schemas/Identifier" },
          "input_snapshot_sha256": { "$ref": "#/components/schemas/NullableSha256" },
          "as_of_observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "generated_at": { "$ref": "#/components/schemas/DateTimeString" },
          "coverage": { "$ref": "#/components/schemas/Coverage" },
          "status": { "type": "string", "const": "no_print" },
          "reason": { "$ref": "#/components/schemas/NoPrintReason" },
          "freshness": { "$ref": "#/components/schemas/Freshness" }
        },
        "required": [
          "scope",
          "index_name",
          "methodology_id",
          "input_snapshot_sha256",
          "as_of_observed_at",
          "generated_at",
          "coverage",
          "status",
          "reason",
          "freshness"
        ],
        "additionalProperties": false
      },
      "ObservationPublicationMetaOk": {
        "type": "object",
        "properties": {
          "scope": { "$ref": "#/components/schemas/ObservationScope" },
          "index_name": { "$ref": "#/components/schemas/IndexName" },
          "methodology_id": { "$ref": "#/components/schemas/Identifier" },
          "input_snapshot_sha256": { "$ref": "#/components/schemas/NullableSha256" },
          "as_of_observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "generated_at": { "$ref": "#/components/schemas/DateTimeString" },
          "coverage": { "$ref": "#/components/schemas/Coverage" },
          "status": { "type": "string", "const": "ok" },
          "reason": { "type": "null" },
          "freshness": { "type": "string", "const": "fresh" }
        },
        "required": [
          "scope",
          "index_name",
          "methodology_id",
          "input_snapshot_sha256",
          "as_of_observed_at",
          "generated_at",
          "coverage",
          "status",
          "reason",
          "freshness"
        ],
        "additionalProperties": false
      },
      "ObservationPublicationMetaStale": {
        "type": "object",
        "properties": {
          "scope": { "$ref": "#/components/schemas/ObservationScope" },
          "index_name": { "$ref": "#/components/schemas/IndexName" },
          "methodology_id": { "$ref": "#/components/schemas/Identifier" },
          "input_snapshot_sha256": { "$ref": "#/components/schemas/NullableSha256" },
          "as_of_observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "generated_at": { "$ref": "#/components/schemas/DateTimeString" },
          "coverage": { "$ref": "#/components/schemas/Coverage" },
          "status": { "type": "string", "const": "stale" },
          "reason": { "type": "string", "const": "artifact_stale" },
          "freshness": { "type": "string", "const": "stale" }
        },
        "required": [
          "scope",
          "index_name",
          "methodology_id",
          "input_snapshot_sha256",
          "as_of_observed_at",
          "generated_at",
          "coverage",
          "status",
          "reason",
          "freshness"
        ],
        "additionalProperties": false
      },
      "ObservationScope": { "type": "string", "const": "observation" },
      "Price": {
        "type": "number",
        "exclusiveMinimum": 0,
        "description": "A price in USD per GPU-hour. Always positive where present."
      },
      "PriceHistoryData": {
        "type": "object",
        "properties": {
          "sku": { "$ref": "#/components/schemas/Identifier" },
          "values": { "$ref": "#/components/schemas/HistoryRows" },
          "next_cursor": { "anyOf": [{ "$ref": "#/components/schemas/Cursor" }, { "type": "null" }] }
        },
        "required": ["sku", "values", "next_cursor"],
        "additionalProperties": false
      },
      "PriceHistoryDataResponse": {
        "type": "object",
        "properties": {
          "data": { "$ref": "#/components/schemas/PriceHistoryData" },
          "meta": { "$ref": "#/components/schemas/HistoryHighWaterPublicationMeta" },
          "license": { "$ref": "#/components/schemas/License" }
        },
        "required": ["data", "meta", "license"],
        "additionalProperties": false
      },
      "PrimaryLanePublicationMeta": {
        "anyOf": [
          { "$ref": "#/components/schemas/PrimaryLanePublicationMetaOk" },
          { "$ref": "#/components/schemas/PrimaryLanePublicationMetaStale" },
          { "$ref": "#/components/schemas/PrimaryLanePublicationMetaNoPrint" }
        ],
        "description": "Provenance for the index self-description, taken from the primary lane's newest observation. `scope` is always `primary_lane` on this route."
      },
      "PrimaryLanePublicationMetaNoPrint": {
        "type": "object",
        "properties": {
          "scope": { "$ref": "#/components/schemas/PrimaryLaneScope" },
          "index_name": { "$ref": "#/components/schemas/IndexName" },
          "methodology_id": { "$ref": "#/components/schemas/Identifier" },
          "input_snapshot_sha256": { "$ref": "#/components/schemas/NullableSha256" },
          "as_of_observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "generated_at": { "$ref": "#/components/schemas/DateTimeString" },
          "coverage": { "$ref": "#/components/schemas/Coverage" },
          "status": { "type": "string", "const": "no_print" },
          "reason": { "$ref": "#/components/schemas/NoPrintReason" },
          "freshness": { "$ref": "#/components/schemas/Freshness" }
        },
        "required": [
          "scope",
          "index_name",
          "methodology_id",
          "input_snapshot_sha256",
          "as_of_observed_at",
          "generated_at",
          "coverage",
          "status",
          "reason",
          "freshness"
        ],
        "additionalProperties": false
      },
      "PrimaryLanePublicationMetaOk": {
        "type": "object",
        "properties": {
          "scope": { "$ref": "#/components/schemas/PrimaryLaneScope" },
          "index_name": { "$ref": "#/components/schemas/IndexName" },
          "methodology_id": { "$ref": "#/components/schemas/Identifier" },
          "input_snapshot_sha256": { "$ref": "#/components/schemas/NullableSha256" },
          "as_of_observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "generated_at": { "$ref": "#/components/schemas/DateTimeString" },
          "coverage": { "$ref": "#/components/schemas/Coverage" },
          "status": { "type": "string", "const": "ok" },
          "reason": { "type": "null" },
          "freshness": { "type": "string", "const": "fresh" }
        },
        "required": [
          "scope",
          "index_name",
          "methodology_id",
          "input_snapshot_sha256",
          "as_of_observed_at",
          "generated_at",
          "coverage",
          "status",
          "reason",
          "freshness"
        ],
        "additionalProperties": false
      },
      "PrimaryLanePublicationMetaStale": {
        "type": "object",
        "properties": {
          "scope": { "$ref": "#/components/schemas/PrimaryLaneScope" },
          "index_name": { "$ref": "#/components/schemas/IndexName" },
          "methodology_id": { "$ref": "#/components/schemas/Identifier" },
          "input_snapshot_sha256": { "$ref": "#/components/schemas/NullableSha256" },
          "as_of_observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "generated_at": { "$ref": "#/components/schemas/DateTimeString" },
          "coverage": { "$ref": "#/components/schemas/Coverage" },
          "status": { "type": "string", "const": "stale" },
          "reason": { "type": "string", "const": "artifact_stale" },
          "freshness": { "type": "string", "const": "stale" }
        },
        "required": [
          "scope",
          "index_name",
          "methodology_id",
          "input_snapshot_sha256",
          "as_of_observed_at",
          "generated_at",
          "coverage",
          "status",
          "reason",
          "freshness"
        ],
        "additionalProperties": false
      },
      "PrimaryLaneScope": { "type": "string", "const": "primary_lane" },
      "PublicReceipt": {
        "anyOf": [
          { "$ref": "#/components/schemas/ContributingReceipt" },
          { "$ref": "#/components/schemas/FilteredReceipt" },
          { "$ref": "#/components/schemas/ExcludedReceipt" },
          { "$ref": "#/components/schemas/UnavailableReceipt" },
          { "$ref": "#/components/schemas/WithheldReceipt" }
        ],
        "description": "One provider receipt. The variants are mutually exclusive and tightly coupled: a contributing receipt carries a price, a frozen or missing receipt carries none, and a receipt whose price the disclosure clock withheld carries `price_disclosure: \"withheld\"` with `price` and `sd` nulled. A null price without that marker matches nothing."
      },
      "PublicReceipts": {
        "type": "array",
        "items": { "$ref": "#/components/schemas/PublicReceipt" },
        "uniqueItems": true
      },
      "RefusalEnvelope": {
        "type": "object",
        "properties": {
          "error": { "$ref": "#/components/schemas/RefusalError" },
          "meta": { "$ref": "#/components/schemas/RefusalMeta" },
          "license": { "$ref": "#/components/schemas/License" }
        },
        "required": ["error", "meta", "license"],
        "additionalProperties": false,
        "description": "A typed refusal. `meta.scope` is `refusal` with every provenance field nulled, and the licence block is carried exactly as it is on a success."
      },
      "RefusalError": {
        "anyOf": [
          { "$ref": "#/components/schemas/StandardRefusalError" },
          { "$ref": "#/components/schemas/HistoryWindowExceededError" }
        ]
      },
      "RefusalMeta": {
        "type": "object",
        "properties": {
          "scope": { "type": "string", "const": "refusal" },
          "index_name": { "$ref": "#/components/schemas/IndexName" },
          "methodology_id": { "type": "null" },
          "input_snapshot_sha256": { "type": "null" },
          "as_of_observed_at": { "type": "null" },
          "generated_at": { "$ref": "#/components/schemas/DateTimeString" },
          "status": { "type": "null" },
          "reason": { "type": "null" },
          "freshness": { "type": "null" },
          "coverage": { "type": "null" }
        },
        "required": [
          "scope",
          "index_name",
          "methodology_id",
          "input_snapshot_sha256",
          "as_of_observed_at",
          "generated_at",
          "status",
          "reason",
          "freshness",
          "coverage"
        ],
        "additionalProperties": false
      },
      "SettlementBand": {
        "type": "string",
        "enum": ["settles", "review", "determination"],
        "description": "`settles` is clean coverage; `review` and `determination` flag degraded coverage."
      },
      "SettlementCoverage": {
        "type": "object",
        "properties": {
          "scheduled": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 },
          "observed": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "carried": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "coverage_ratio": { "type": "number", "minimum": 0, "maximum": 1 },
          "longest_gap": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "longest_gap_share": { "type": "number", "minimum": 0, "maximum": 1 },
          "gaps": { "type": "array", "items": { "$ref": "#/components/schemas/SettlementGap" } }
        },
        "required": ["scheduled", "observed", "carried", "coverage_ratio", "longest_gap", "longest_gap_share", "gaps"],
        "additionalProperties": false,
        "description": "Gap-fill accounting for the period. `observed` and `carried` are reported separately because carried stamps are derived, not observations."
      },
      "SettlementData": {
        "type": "object",
        "properties": {
          "sku": { "$ref": "#/components/schemas/Identifier" },
          "from": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "to": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "value_usd_gpu_hr": { "$ref": "#/components/schemas/Price" },
          "unit": { "$ref": "#/components/schemas/Unit" },
          "rate_denominator_count": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 },
          "coverage": { "$ref": "#/components/schemas/SettlementCoverage" },
          "band": { "$ref": "#/components/schemas/SettlementBand" }
        },
        "required": ["sku", "from", "to", "value_usd_gpu_hr", "unit", "rate_denominator_count", "coverage", "band"],
        "additionalProperties": false
      },
      "SettlementDataResponse": {
        "type": "object",
        "properties": {
          "data": { "$ref": "#/components/schemas/SettlementData" },
          "meta": { "$ref": "#/components/schemas/SettlementPublicationMeta" },
          "license": { "$ref": "#/components/schemas/License" }
        },
        "required": ["data", "meta", "license"],
        "additionalProperties": false
      },
      "SettlementGap": {
        "type": "object",
        "properties": {
          "start": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "end": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "length": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 },
          "causes": { "$ref": "#/components/schemas/SettlementGapCauses" }
        },
        "required": ["start", "end", "length", "causes"],
        "additionalProperties": false
      },
      "SettlementGapCauses": {
        "type": "object",
        "properties": {
          "missed": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 },
          "dark": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 },
          "quarantined": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 },
          "unpublished": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }
        },
        "additionalProperties": false
      },
      "SettlementPublicationMeta": {
        "anyOf": [
          { "$ref": "#/components/schemas/SettlementPublicationMetaOk" },
          { "$ref": "#/components/schemas/SettlementPublicationMetaStale" }
        ],
        "description": "Provenance for a settlement period. Unlike the observation scopes there is no `no_print` variant: a period with no derivable value is a `no_data` refusal instead of a null-valued success. `scope` is always `settlement` on this route."
      },
      "SettlementPublicationMetaOk": {
        "type": "object",
        "properties": {
          "scope": { "$ref": "#/components/schemas/SettlementScope" },
          "index_name": { "$ref": "#/components/schemas/IndexName" },
          "methodology_id": { "$ref": "#/components/schemas/Identifier" },
          "input_snapshot_sha256": { "$ref": "#/components/schemas/NullableSha256" },
          "as_of_observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "generated_at": { "$ref": "#/components/schemas/DateTimeString" },
          "coverage": { "$ref": "#/components/schemas/Coverage" },
          "status": { "type": "string", "const": "ok" },
          "reason": { "type": "null" },
          "freshness": { "type": "string", "const": "fresh" }
        },
        "required": [
          "scope",
          "index_name",
          "methodology_id",
          "input_snapshot_sha256",
          "as_of_observed_at",
          "generated_at",
          "coverage",
          "status",
          "reason",
          "freshness"
        ],
        "additionalProperties": false
      },
      "SettlementPublicationMetaStale": {
        "type": "object",
        "properties": {
          "scope": { "$ref": "#/components/schemas/SettlementScope" },
          "index_name": { "$ref": "#/components/schemas/IndexName" },
          "methodology_id": { "$ref": "#/components/schemas/Identifier" },
          "input_snapshot_sha256": { "$ref": "#/components/schemas/NullableSha256" },
          "as_of_observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "generated_at": { "$ref": "#/components/schemas/DateTimeString" },
          "coverage": { "$ref": "#/components/schemas/Coverage" },
          "status": { "type": "string", "const": "stale" },
          "reason": { "type": "string", "const": "artifact_stale" },
          "freshness": { "type": "string", "const": "stale" }
        },
        "required": [
          "scope",
          "index_name",
          "methodology_id",
          "input_snapshot_sha256",
          "as_of_observed_at",
          "generated_at",
          "coverage",
          "status",
          "reason",
          "freshness"
        ],
        "additionalProperties": false
      },
      "SettlementScope": { "type": "string", "const": "settlement" },
      "Sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
      "SourcesStatusData": {
        "type": "object",
        "properties": {
          "sku": { "$ref": "#/components/schemas/Identifier" },
          "observed_at": { "$ref": "#/components/schemas/HourlyDateTimeString" },
          "receipts": { "$ref": "#/components/schemas/PublicReceipts" }
        },
        "required": ["sku", "observed_at", "receipts"],
        "additionalProperties": false
      },
      "SourcesStatusDataResponse": {
        "type": "object",
        "properties": {
          "data": { "$ref": "#/components/schemas/SourcesStatusData" },
          "meta": { "$ref": "#/components/schemas/ObservationPublicationMeta" },
          "license": { "$ref": "#/components/schemas/License" }
        },
        "required": ["data", "meta", "license"],
        "additionalProperties": false
      },
      "StandardDeviation": {
        "type": "number",
        "minimum": 0,
        "description": "A dispersion figure in USD per GPU-hour. Never negative."
      },
      "StandardRefusalCode": {
        "type": "string",
        "enum": [
          "artifact_missing",
          "artifact_digest_mismatch",
          "artifact_path_violation",
          "unknown_methodology",
          "invalid_artifact",
          "invalid_request",
          "no_data",
          "unknown_sku",
          "rate_limited",
          "upstream_unavailable",
          "internal_error"
        ]
      },
      "StandardRefusalError": {
        "type": "object",
        "properties": {
          "code": { "$ref": "#/components/schemas/StandardRefusalCode" },
          "message": { "type": "string", "minLength": 1, "pattern": "\\S", "maxLength": 256 }
        },
        "required": ["code", "message"],
        "additionalProperties": false
      },
      "UnavailableReceipt": {
        "type": "object",
        "properties": {
          "source_id": { "$ref": "#/components/schemas/Identifier" },
          "liveness_score": { "$ref": "#/components/schemas/NullableLivenessScore" },
          "price": { "type": "null" },
          "sd": { "type": "null" },
          "weight": { "type": "null" },
          "source_url": { "anyOf": [{ "$ref": "#/components/schemas/HttpsUrl" }, { "type": "null" }] },
          "status": { "type": "string", "enum": ["frozen", "missing"] },
          "filter_verdict": { "$ref": "#/components/schemas/FilterVerdict" },
          "last_seen": { "anyOf": [{ "$ref": "#/components/schemas/HourlyDateTimeString" }, { "type": "null" }] }
        },
        "required": [
          "source_id",
          "liveness_score",
          "price",
          "sd",
          "weight",
          "source_url",
          "status",
          "filter_verdict",
          "last_seen"
        ],
        "additionalProperties": false
      },
      "Unit": { "type": "string", "const": "USD/GPU/hour", "description": "The only unit this index publishes." },
      "Weight": {
        "type": "number",
        "minimum": 0,
        "maximum": 1,
        "description": "The provider's weight in the aggregation, in [0, 1]."
      },
      "WithheldReceipt": {
        "type": "object",
        "properties": {
          "source_id": { "$ref": "#/components/schemas/Identifier" },
          "liveness_score": { "$ref": "#/components/schemas/NullableLivenessScore" },
          "price": { "type": "null" },
          "sd": { "type": "null" },
          "weight": { "anyOf": [{ "$ref": "#/components/schemas/Weight" }, { "type": "null" }] },
          "source_url": { "anyOf": [{ "$ref": "#/components/schemas/HttpsUrl" }, { "type": "null" }] },
          "status": { "type": "string", "enum": ["ok", "excluded"] },
          "filter_verdict": { "$ref": "#/components/schemas/FilterVerdict" },
          "last_seen": { "anyOf": [{ "$ref": "#/components/schemas/HourlyDateTimeString" }, { "type": "null" }] },
          "price_disclosure": { "type": "string", "const": "withheld" }
        },
        "required": [
          "source_id",
          "liveness_score",
          "price",
          "sd",
          "weight",
          "source_url",
          "status",
          "filter_verdict",
          "last_seen",
          "price_disclosure"
        ],
        "additionalProperties": false
      }
    }
  }
}
