{"openapi":"3.0.0","paths":{"/v1/oracle/scu":{"get":{"operationId":"OraclePublicController_getScu","summary":"Current SCU value with methodology-versioned breakdown","description":"Returns the live SCU index, reference workload, methodology version, and the per-family breakdown as a discriminated union keyed by methodologyVersion. Empty basket returns 204.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScuResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"204":{"description":"No confirmed revision exists yet","headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/models":{"get":{"operationId":"OraclePublicController_getModels","summary":"List catalog models: current basket members plus retired ex-members","description":"Current basket members carry inBasket=true with manifest-attested prices. Models that were representatives in a past confirmed revision but left the basket stay listed with inBasket=false and retiredAtRevision set; their prices come from the live catalog (ModelPrice). Soft-deleted models and retired models without any catalog price are not listed. Prices here are what providers charge: usdPricePerMillion and the cache and reasoning blocks carry no routing markup, and markedUpUsdPricePerMillion carries it. For prices as billed, use /v1/oracle/pricing. Only the cache and reasoning components carry a provenance mark here, because only they are read from the live catalog. The input/output pair is the manifest-attested figure for a basket member (inBasket=true) and the live-catalog figure for a retired ex-member, and this endpoint publishes it unmarked in both cases. For the catalog's own mark on a model's input and output, use /v1/oracle/catalog or /v1/oracle/resolve. Models are identified by the canonical vendor-prefixed id (openai/gpt-5.5).","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelsResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/models/{key}":{"get":{"operationId":"OraclePublicController_getModel","summary":"Get single catalog model (basket member or retired) by key","description":"Only the cache and reasoning components carry a provenance mark here, because only they are read from the live catalog. The input/output pair is the manifest-attested figure for a basket member (inBasket=true) and the live-catalog figure for a retired ex-member, and this endpoint publishes it unmarked in both cases. For the catalog's own mark on a model's input and output, use /v1/oracle/catalog or /v1/oracle/resolve. Models are identified by the canonical vendor-prefixed id (openai/gpt-5.5). The key segment also accepts the bare model name; both name the same model, and the prefixed form needs the separator percent-encoded (openai%2Fgpt-5.5). An unknown vendor is a 422.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"404":{"description":"`not_found` — The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"not_found":{"summary":"not_found","value":{"error":{"message":"The requested resource does not exist.","type":"not_found","code":"not_found"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"422":{"description":"`validation_failed` — The request body failed validation. Per-field details are in `error.issues[]`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"validation_failed":{"summary":"validation_failed","value":{"error":{"message":"The request body failed validation. Per-field details are in `error.issues[]`.","type":"invalid_request_error","code":"validation_failed"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/models/{key}/price-history":{"get":{"operationId":"OraclePublicController_getModelPriceHistory","summary":"Per-model input/output price history (JSON or CSV via Accept header)","description":"Returns one time series of input/output USD prices for any tracked model; every point is resolved with the same rule as price-at and carries its own source, so a single series mixes provenance. Instants where the confirmed revision in force attests the model are manifest-sourced (source=manifest, cross-linking revisionVersion, methodologyVersion and metadataHash); every other instant falls back to the live catalog's temporal history (source=catalog). Consecutive points repeating the same source and prices are collapsed; granularity defaults to per-revision, daily and weekly carry forward the last observed price, and catchup revisions whose manifest is unavailable are surfaced via unavailableRevisions. Models with neither an attested appearance nor a catalog price return 404. Models are identified by the canonical vendor-prefixed id (openai/gpt-5.5). The key segment also accepts the bare model name; both name the same model, and the prefixed form needs the separator percent-encoded (openai%2Fgpt-5.5). An unknown vendor is a 422.","parameters":[],"responses":{"200":{"description":"Per-model price history series.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelPriceHistoryResponseDto"}},"text/csv":{"schema":{"type":"string","description":"RFC 4180 CSV with header: date,inputPriceUsdPerMillion,outputPriceUsdPerMillion,source,revisionVersion,methodologyVersion,metadataHash. The three provenance columns are empty on catalog-sourced rows."}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"404":{"description":"`not_found` — The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"not_found":{"summary":"not_found","value":{"error":{"message":"The requested resource does not exist.","type":"not_found","code":"not_found"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"422":{"description":"`validation_failed` — The request body failed validation. Per-field details are in `error.issues[]`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"validation_failed":{"summary":"validation_failed","value":{"error":{"message":"The request body failed validation. Per-field details are in `error.issues[]`.","type":"invalid_request_error","code":"validation_failed"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/models/{key}/price-at":{"get":{"operationId":"OraclePublicController_getModelPriceAt","summary":"Per-model input/output USD price effective at a given ISO-8601 date","description":"Resolves from the confirmed revision in force at the requested date when that revision attests the model (source=manifest, cross-linking revisionVersion, methodologyVersion, metadataHash and family; observedAt is that revision's publishedAt). Otherwise the live catalog's temporal history answers (source=catalog, observedAt is the price row's own observedAt, family may be null). Returns 404 only when the model is untracked, or when neither the attested manifest nor the catalog holds a price at that date. Models are identified by the canonical vendor-prefixed id (openai/gpt-5.5). The key segment also accepts the bare model name; both name the same model, and the prefixed form needs the separator percent-encoded (openai%2Fgpt-5.5). An unknown vendor is a 422.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelPriceAtResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"404":{"description":"`not_found` — The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"not_found":{"summary":"not_found","value":{"error":{"message":"The requested resource does not exist.","type":"not_found","code":"not_found"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"422":{"description":"`validation_failed` — The request body failed validation. Per-field details are in `error.issues[]`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"validation_failed":{"summary":"validation_failed","value":{"error":{"message":"The request body failed validation. Per-field details are in `error.issues[]`.","type":"invalid_request_error","code":"validation_failed"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/basket":{"get":{"operationId":"OraclePublicController_getBasket","summary":"Get full basket composition","description":"Prices follow the /v1/oracle/models convention: unmarked figures are provider list prices, markedUp* figures carry the routing markup. Only the cache and reasoning components carry a provenance mark here, because only they are read from the live catalog. The input/output pair is the manifest-attested figure for a basket member (inBasket=true) and the live-catalog figure for a retired ex-member, and this endpoint publishes it unmarked in both cases. For the catalog's own mark on a model's input and output, use /v1/oracle/catalog or /v1/oracle/resolve. ","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BasketResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/baseline":{"get":{"operationId":"OraclePublicController_getBaseline","summary":"Inception SCU snapshot for Efficiency Index denominator","parameters":[],"responses":{"200":{"description":"Inception SCU snapshot","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaselineResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"204":{"description":"No confirmed revision exists yet","headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/scu-at":{"get":{"operationId":"OraclePublicController_getScuAt","summary":"SCU value active at a given timestamp (step function, no interpolation)","description":"Resolves the latest confirmed revision with publishedAt <= date and returns its SCU, methodologyVersion, revisionVersion, publishedAt and metadataHash. On equal publishedAt the highest revisionVersion wins. Returns 204 when the requested timestamp precedes the genesis revision; 422 if date is in the future or malformed.","parameters":[],"responses":{"200":{"description":"SCU at the requested timestamp","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScuAtResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"204":{"description":"Requested timestamp precedes the genesis revision","headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"422":{"description":"`validation_failed` — The request body failed validation. Per-field details are in `error.issues[]`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"validation_failed":{"summary":"validation_failed","value":{"error":{"message":"The request body failed validation. Per-field details are in `error.issues[]`.","type":"invalid_request_error","code":"validation_failed"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/history":{"get":{"operationId":"OraclePublicController_getHistory","summary":"SCU time series with granularity bucketing (JSON or CSV via Accept header)","description":"Returns the SCU index time series for the requested range. Granularity defaults to per-revision; daily and weekly buckets carry forward the last revision's value. Set Accept: text/csv to download a spreadsheet-friendly CSV instead of JSON.","parameters":[],"responses":{"200":{"description":"Index history series.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OracleHistoryResponseDto"}},"text/csv":{"schema":{"type":"string","description":"RFC 4180 CSV with header: date,scuUsd,computeIndex,revisionVersion,methodologyVersion,metadataHash"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"422":{"description":"`validation_failed` — The request body failed validation. Per-field details are in `error.issues[]`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"validation_failed":{"summary":"validation_failed","value":{"error":{"message":"The request body failed validation. Per-field details are in `error.issues[]`.","type":"invalid_request_error","code":"validation_failed"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/reconstitutions":{"get":{"operationId":"OraclePublicController_getReconstitutions","summary":"Get reconstitution event log","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReconstitutionsResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"422":{"description":"`validation_failed` — The request body failed validation. Per-field details are in `error.issues[]`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"validation_failed":{"summary":"validation_failed","value":{"error":{"message":"The request body failed validation. Per-field details are in `error.issues[]`.","type":"invalid_request_error","code":"validation_failed"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/reconstitutions/export":{"get":{"operationId":"OraclePublicController_exportReconstitutions","summary":"Export reconstitution history as markdown","parameters":[],"responses":{"200":{"description":"Reconstitution log rendered as a downloadable markdown attachment","content":{"text/markdown":{"schema":{"type":"string"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/revisions/{revision}":{"get":{"operationId":"OraclePublicController_getRevision","summary":"Get a single confirmed revision by version number","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OracleRevisionResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"404":{"description":"`not_found` — The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"not_found":{"summary":"not_found","value":{"error":{"message":"The requested resource does not exist.","type":"not_found","code":"not_found"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"422":{"description":"`validation_failed` — The request body failed validation. Per-field details are in `error.issues[]`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"validation_failed":{"summary":"validation_failed","value":{"error":{"message":"The request body failed validation. Per-field details are in `error.issues[]`.","type":"invalid_request_error","code":"validation_failed"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/latest":{"get":{"operationId":"OraclePublicController_getLatest","summary":"Latest confirmed revision summary","description":"Lightweight endpoint returning the latest CONFIRMED revision's version, publish timestamp, tx hash, confirmation time, SCU in USD, and basket size. No full basket payload.","parameters":[],"responses":{"200":{"description":"Latest revision summary","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestRevisionSummaryResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"204":{"description":"No confirmed revision exists yet","headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/health":{"get":{"operationId":"OraclePublicController_getHealth","summary":"Oracle health probe","description":"Latest confirmed revision version and timestamp. Returns nulls when no revisions have been confirmed yet.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OracleHealthResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/contract-metadata":{"get":{"operationId":"OraclePublicController_getContractMetadata","summary":"Live OracleRegistry contract identity and role membership","description":"Returns the chainId, proxy address, and on-chain version() of the OracleRegistry, plus the declared DEFAULT_ADMIN_ROLE and MAINTAINER_ROLE holders with their live hasRole verdict from the RPC. verifiedOnChain is null when the RPC call fails. Cached for five minutes on the backend.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractMetadataResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/stats":{"get":{"operationId":"OraclePublicController_getStats","summary":"Public aggregate protocol stats","parameters":[],"responses":{"200":{"description":"Aggregate protocol metrics","headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/activity":{"get":{"operationId":"OraclePublicController_getActivityFeed","summary":"Live activity feed","parameters":[],"responses":{"200":{"description":"Paginated activity events","headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"422":{"description":"`validation_failed` — The request body failed validation. Per-field details are in `error.issues[]`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"validation_failed":{"summary":"validation_failed","value":{"error":{"message":"The request body failed validation. Per-field details are in `error.issues[]`.","type":"invalid_request_error","code":"validation_failed"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/manifest/{metadataHash}":{"get":{"operationId":"OraclePublicController_getManifest","summary":"Fetch published revision manifest by metadataHash","description":"Returns the off-chain content-addressed manifest for a confirmed revision. Verify: keccak256(JCS(manifest)) == metadataHash == on-chain metadataHash. contentHash covers a projection instead — methodology plus modelKey, family and the two prices per entry — so a display-metadata correction moves metadataHash without invalidating prices.","parameters":[],"responses":{"200":{"description":"Revision manifest JSON document","headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"404":{"description":"`not_found` — The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"not_found":{"summary":"not_found","value":{"error":{"message":"The requested resource does not exist.","type":"not_found","code":"not_found"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"422":{"description":"`validation_failed` — The request body failed validation. Per-field details are in `error.issues[]`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"validation_failed":{"summary":"validation_failed","value":{"error":{"message":"The request body failed validation. Per-field details are in `error.issues[]`.","type":"invalid_request_error","code":"validation_failed"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/pricing":{"get":{"operationId":"OraclePublicController_getPricing","summary":"Per-model pricing in token and USD, as billed","description":"Every figure carries the routing markup, cache and reasoning included, so it matches what a request is charged, plus the provenance mark of the catalogue price behind it. For provider list prices without markup, use /v1/oracle/models.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/catalog":{"get":{"operationId":"OraclePublicController_getCatalog","summary":"Full catalog of tracked models with current prices and index-member flag","description":"Returns every tracked model, including non-latest family versions. Sourced from Model rows + the live catalog (ModelPrice); the indexMember flag is set when the model is the current family representative in the latest CONFIRMED revision's manifest. Models without a catalog price row are excluded. currentPrice is the flat rate; a model priced in context tiers also carries contextTiers — ascending input-token thresholds, each with its own input and output price — and a request above a threshold is billed at that tier rather than at currentPrice. A model that declares the context window its vendor serves carries maxInputTokens; absent means only the request-body ceiling bounds it. Every number carries its own provenance mark — currentPrice marks input and output separately, each context tier and each cache/reasoning component carries one of its own — so one model can be promotional at its flat rate and verified above a threshold. The mark weighs a number, it never changes it, and it never enters the SCU manifest. Models are identified by the canonical vendor-prefixed id (openai/gpt-5.5).","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/resolve":{"get":{"operationId":"OraclePublicController_resolveBatch","summary":"Resolve a batch of model names to canonical prices and priceSource","description":"Matches each comma-separated key the way /resolve/:key does, preserving input order. Every key is isolated: anything unresolvable — an unknown model or an unknown vendor — returns priceSource='off-basket' with null prices rather than failing the batch. Batch size capped at 100; URL-length safe in practice.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveBatchResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"422":{"description":"`validation_failed` — The request body failed validation. Per-field details are in `error.issues[]`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"validation_failed":{"summary":"validation_failed","value":{"error":{"message":"The request body failed validation. Per-field details are in `error.issues[]`.","type":"invalid_request_error","code":"validation_failed"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/resolve/{key}":{"get":{"operationId":"OraclePublicController_resolveModel","summary":"Resolve a single model name to its canonical id, prices, and priceSource","description":"Reads the optional vendor prefix (percent-encode the separator: openai%2Fgpt-5.5), then normalizes the name (dash→dot, strips bracket annotations and trailing date suffixes) and matches against the catalog, narrowed to that vendor when one is named. resolvedKey is the canonical prefixed id. priceSource is one of: oracle-basket (current index member), oracle-catalog (priced but not a current index member), off-basket (not in catalog). Unknown models return 200 + off-basket + null prices, never 404; an unknown vendor is a 422. prices.provenance marks the input and the output separately with the catalogue's own mark for each. Accepts the model key only; never reads token or usage payload.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"422":{"description":"`validation_failed` — The request body failed validation. Per-field details are in `error.issues[]`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"validation_failed":{"summary":"validation_failed","value":{"error":{"message":"The request body failed validation. Per-field details are in `error.issues[]`.","type":"invalid_request_error","code":"validation_failed"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/methodology":{"get":{"operationId":"MethodologyPublicController_getChangelog","summary":"Methodology changelog","description":"Every registered methodology version with its formula summary, family rule, reference workload, and spec reference. activeVersion is the version in force now — the same value served in the X-Methodology-Version response header.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MethodologyChangelogResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}},"/v1/oracle/methodology/{version}":{"get":{"operationId":"MethodologyPublicController_getByVersion","summary":"Single methodology record by version","description":"Returns 404 for versions absent from the catalog. A revision row may reference a version this catalog does not know (legacy data before cutover); the row still serves its numeric version while this lookup stays the authority on definitions.","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MethodologyRecordResponseDto"}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"404":{"description":"`not_found` — The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"not_found":{"summary":"not_found","value":{"error":{"message":"The requested resource does not exist.","type":"not_found","code":"not_found"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"422":{"description":"`validation_failed` — The request body failed validation. Per-field details are in `error.issues[]`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"validation_failed":{"summary":"validation_failed","value":{"error":{"message":"The request body failed validation. Per-field details are in `error.issues[]`.","type":"invalid_request_error","code":"validation_failed"}}}}}},"headers":{"X-Methodology-Version":{"description":"Methodology version in force at response time — the version of the latest synced confirmed revision (catalog max before the first sync). Body fields named methodologyVersion are per-row provenance and may differ on historical reads. Absent on 429 responses, which are emitted before interceptors run.","schema":{"type":"integer","minimum":1}}}},"429":{"description":"`rate_limited` — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"rate_limited":{"summary":"rate_limited","value":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}}}}},"tags":["Oracle Public"]}}},"info":{"title":"Compute Finance Public API","description":"Read-only public endpoints for the Compute Price Index (CPI). No authentication. JSON responses. Stable schemas. Covers the Standard Compute Unit (SCU), basket composition, model prices, historical snapshots, and aggregate protocol statistics. For the full internal spec see /docs/openapi.yaml. MCP server: install via `npx @compute-finance/mcp` (stdio, no API key). GitHub: https://github.com/compute-finance/mcp","version":"1.0","contact":{"name":"Compute Finance","url":"https://compute.finance","email":"info@compute.finance"},"license":{"name":"MIT","url":"https://opensource.org/license/mit"}},"tags":[{"name":"Oracle Public","description":"REST resources for the Compute Price Index. Each endpoint is an idempotent GET on a noun: /v1/oracle/{scu,basket,models,models/{key},revisions,revisions/{r},history,reconstitutions,baseline,latest,health,contract-metadata,pricing,methodology,methodology/{v},manifest/{metadataHash}}. All read paths return CONFIRMED state only; pending revisions are never surfaced. Write paths (publish, approve, refork, discard) are RPC operations served from the admin tag and require maintainer authentication; they are not part of this public spec."},{"name":"Errors","description":"All API error responses share a unified envelope:\n\n```json\n{\n  \"error\": {\n    \"message\": \"...\",\n    \"type\": \"...\",\n    \"code\": \"<canonical code>\"\n  }\n}\n```\n\nOptional fields: `param` (field name), `details` (code-specific payload), `issues[]` (Zod issues for VALIDATION_FAILED).\n\n## Catalog\n\n| Code | Status | Type | Meaning | When |\n|---|---|---|---|---|\n| `unauthorized` | 401 | `invalid_request_error` | Authentication is required to access this endpoint. | The session cookie is missing or invalid, the Bearer token is absent, or the timestamp on a signed request is outside the 5-minute freshness window. |\n| `forbidden` | 403 | `forbidden` | The caller is authenticated but is not allowed to perform this action. | The caller lacks the required role, or a request was signed by an address different from the authenticated wallet. |\n| `invalid_signature` | 401 | `invalid_request_error` | The provided signature could not be verified. | The EIP-191 signature is malformed, truncated, or does not recover to a valid signer. |\n| `signature_reused` | 409 | `invalid_request_error` | This signed request has already been submitted. | The nonce for this signed request was consumed by an earlier submission. |\n| `invalid_api_key` | 401 | `invalid_request_error` | The Bearer API key is missing, malformed, or not recognized. | The token is empty, does not use the `ct_live_` format, or does not match any active key. |\n| `api_key_frozen` | 403 | `forbidden` | The API key is currently frozen and cannot be used for requests. | The key was frozen from the API keys page or by support. Reactivate it from the API keys page, or contact support if it was frozen by an administrator. |\n| `api_key_revoked` | 401 | `invalid_request_error` | The API key has been revoked and can no longer be used. | The key was revoked from the API keys page. Revocation is permanent — issue a new key to continue. |\n| `model_restricted` | 403 | `forbidden` | The requested model is not in this key's allowed-models list. | The key was restricted to a specific set of models; the request referenced a model outside that set. |\n| `bad_request` | 400 | `invalid_request_error` | The request is invalid in a way that does not match a more specific error code. | A generic 400 for request-shape issues that no other code describes more precisely. |\n| `validation_failed` | 422 | `invalid_request_error` | The request body failed validation. Per-field details are in `error.issues[]`. | One or more fields are missing, of the wrong type, or outside their allowed range. |\n| `method_not_allowed` | 405 | `invalid_request_error` | The endpoint exists but does not accept this HTTP method. | A request used a method the route does not support; the `Allow` response header lists the accepted methods. |\n| `payload_too_large` | 413 | `invalid_request_error` | The request body is larger than the exchange accepts. | The body exceeded the fixed body ceiling, which covers the largest context the exchange serves; it is refused before it is parsed, so no field-level detail is available. |\n| `not_found` | 404 | `not_found` | The requested resource does not exist. | The identifier did not match any resource, or the URL does not match any endpoint. |\n| `already_exists` | 409 | `conflict` | A resource with the same unique identity already exists. | A duplicate was detected during pre-check, or a concurrent write violated a unique constraint. |\n| `conflict` | 409 | `conflict` | The resource was modified concurrently; retry with the latest version. | A serializable transaction aborted due to concurrent writes, or an operation found the resource in an inconsistent state. |\n| `insufficient_balance` | 402 | `insufficient_quota` | The account's $COMPUTE balance is below the requested amount. | Triggered when withdrawing more than the balance, or when an inference request would exceed the balance after billing. |\n| `spending_limit_reached` | 429 | `rate_limit_error` | A spending cap has been reached. | This request would exceed a daily or monthly cap on the key, or a daily, weekly or monthly cap on the account; `details.scope` names which carried it. |\n| `all_keys_exhausted` | 502 | `server_error` | No upstream capacity is currently available for the routed model. | All contributor keys serving this model were unavailable, rate-limited, or in a cool-down; retry shortly. |\n| `rate_limited` | 429 | `rate_limit_error` | The caller exceeded a rate-limit window on this endpoint. | Either the per-endpoint request-rate cap or the provider-pool RPM/TPM cap was hit. |\n| `stream_interrupted` | 500 | `server_error` | The SSE stream aborted before completion. | The upstream provider connection dropped mid-stream. This error is delivered inside the SSE body, not as an HTTP status. |\n| `contract_error` | 500 | `server_error` | An on-chain call reverted or could not be confirmed. | The transaction failed to broadcast, timed out waiting for a receipt, or the receipt reported failure. |\n| `internal_error` | 500 | `server_error` | An unexpected server-side failure occurred. | A fallback for exceptions that no other error code describes; the failure is logged for investigation. |\n| `service_unavailable` | 503 | `server_error` | A required upstream dependency is temporarily unavailable. | A dependency needed for this request is unreachable; security-critical paths intentionally reject rather than degrade. |"}],"servers":[{"url":"https://api.compute.finance","description":"Production"}],"components":{"schemas":{"ScuResponseDto":{"type":"object","properties":{"scuUsd":{"type":"number"},"computeIndex":{"type":"number","nullable":true},"referenceWorkload":{"type":"object","properties":{"inputTokens":{"type":"number"},"outputTokens":{"type":"number"}},"selfRequired":true},"methodologyVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true},"breakdown":{"oneOf":[{"type":"object","properties":{"methodologyVersion":{"type":"number","minimum":1,"maximum":1},"familyRepresentatives":{"type":"array","items":{"type":"object","properties":{"family":{"type":"string"},"modelKey":{"type":"string"},"inputPriceUsdPerMillion":{"type":"number"},"outputPriceUsdPerMillion":{"type":"number"},"blendedCostUsd":{"type":"number"}},"required":["family","modelKey","inputPriceUsdPerMillion","outputPriceUsdPerMillion","blendedCostUsd"]}}},"required":["methodologyVersion","familyRepresentatives"]}]},"updatedAt":{"type":"string"}},"required":["scuUsd","computeIndex","referenceWorkload","methodologyVersion","breakdown","updatedAt"]},"ModelsResponseDto":{"type":"object","properties":{"models":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"displayName":{"type":"string"},"provider":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"]},"family":{"description":"Provider product line (e.g. 'openai.gpt'). One family per basket slot; the latest released model in the family is the representative.","type":"string"},"weiPricePerMillion":{"type":"object","properties":{"input":{"type":"number"},"output":{"type":"number"}},"required":["input","output"]},"usdPricePerMillion":{"type":"object","properties":{"input":{"type":"number"},"output":{"type":"number"}},"required":["input","output"]},"markedUpWeiPricePerMillion":{"type":"object","properties":{"input":{"type":"number"},"output":{"type":"number"}},"required":["input","output"]},"markedUpUsdPricePerMillion":{"type":"object","properties":{"input":{"type":"number"},"output":{"type":"number"}},"required":["input","output"]},"releasedAt":{"type":"string","format":"date-time","nullable":true},"cache":{"type":"object","properties":{"cachedInput":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"cacheWrite5m":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"cacheWrite1h":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"read_multiplier":{"type":"number","nullable":true},"write_multiplier_5m":{"type":"number","nullable":true},"write_multiplier_1h":{"type":"number","nullable":true}},"required":["cachedInput","cacheWrite5m","cacheWrite1h","read_multiplier","write_multiplier_5m","write_multiplier_1h"],"nullable":true},"reasoning":{"type":"object","properties":{"reasoningOutput":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true}},"required":["reasoningOutput"],"nullable":true},"inBasket":{"description":"True when the model is a family representative in the latest confirmed revision; false for retired models that stay listed in the catalog.","type":"boolean"},"retiredAtRevision":{"description":"First confirmed revision in which the model no longer appears in the basket; null for current basket members.","type":"integer","minimum":0,"exclusiveMinimum":true,"nullable":true}},"required":["id","displayName","provider","family","weiPricePerMillion","usdPricePerMillion","markedUpWeiPricePerMillion","markedUpUsdPricePerMillion","releasedAt","cache","reasoning","inBasket","retiredAtRevision"]}}},"required":["models"]},"ModelResponseDto":{"type":"object","properties":{"id":{"type":"string"},"displayName":{"type":"string"},"provider":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"selfRequired":true},"family":{"description":"Provider product line (e.g. 'openai.gpt'). One family per basket slot; the latest released model in the family is the representative.","type":"string"},"weiPricePerMillion":{"type":"object","properties":{"input":{"type":"number"},"output":{"type":"number"}},"selfRequired":true},"usdPricePerMillion":{"type":"object","properties":{"input":{"type":"number"},"output":{"type":"number"}},"selfRequired":true},"markedUpWeiPricePerMillion":{"type":"object","properties":{"input":{"type":"number"},"output":{"type":"number"}},"selfRequired":true},"markedUpUsdPricePerMillion":{"type":"object","properties":{"input":{"type":"number"},"output":{"type":"number"}},"selfRequired":true},"cache":{"type":"object","properties":{"cachedInput":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"cacheWrite5m":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"cacheWrite1h":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"read_multiplier":{"type":"number","nullable":true},"write_multiplier_5m":{"type":"number","nullable":true},"write_multiplier_1h":{"type":"number","nullable":true}},"nullable":true,"selfRequired":true},"reasoning":{"type":"object","properties":{"reasoningOutput":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true}},"nullable":true,"selfRequired":true},"inBasket":{"description":"True when the model is a family representative in the latest confirmed revision; false for retired models that stay listed in the catalog.","type":"boolean"},"retiredAtRevision":{"description":"First confirmed revision in which the model no longer appears in the basket; null for current basket members.","type":"integer","minimum":0,"exclusiveMinimum":true,"nullable":true}},"required":["id","displayName","provider","family","weiPricePerMillion","usdPricePerMillion","markedUpWeiPricePerMillion","markedUpUsdPricePerMillion","cache","reasoning","inBasket","retiredAtRevision"]},"ModelPriceHistoryResponseDto":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"granularity":{"type":"string","enum":["per-revision","daily","weekly"]},"count":{"type":"integer","minimum":0,"exclusiveMinimum":false},"truncated":{"type":"boolean"},"modelKey":{"type":"string"},"manifestKey":{"type":"string"},"family":{"type":"string","nullable":true},"unavailableRevisions":{"type":"array","items":{"type":"integer","minimum":0,"exclusiveMinimum":true}},"data":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"inputPriceUsdPerMillion":{"type":"number"},"outputPriceUsdPerMillion":{"type":"number"},"source":{"type":"string","enum":["manifest","catalog"]},"revisionVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true},"methodologyVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true},"metadataHash":{"type":"string","pattern":"^0x[0-9a-f]{64}$"}},"required":["date","inputPriceUsdPerMillion","outputPriceUsdPerMillion","source"]}}},"required":["from","to","granularity","count","truncated","modelKey","family","unavailableRevisions","data"]},"ModelPriceAtResponseDto":{"type":"object","properties":{"modelKey":{"type":"string"},"manifestKey":{"type":"string"},"date":{"type":"string","format":"date-time"},"inputPriceUsdPerMillion":{"type":"number"},"outputPriceUsdPerMillion":{"type":"number"},"observedAt":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["manifest","catalog"]},"revisionVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true},"methodologyVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true},"metadataHash":{"type":"string","pattern":"^0x[0-9a-f]{64}$"},"family":{"type":"string","nullable":true}},"required":["modelKey","date","inputPriceUsdPerMillion","outputPriceUsdPerMillion","observedAt","source","family"]},"BasketResponseDto":{"type":"object","properties":{"models":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"displayName":{"type":"string"},"provider":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"]},"family":{"description":"Provider product line (e.g. 'openai.gpt'). One family per basket slot; the latest released model in the family is the representative.","type":"string"},"weiPricePerMillion":{"type":"object","properties":{"input":{"type":"number"},"output":{"type":"number"}},"required":["input","output"]},"usdPricePerMillion":{"type":"object","properties":{"input":{"type":"number"},"output":{"type":"number"}},"required":["input","output"]},"markedUpWeiPricePerMillion":{"type":"object","properties":{"input":{"type":"number"},"output":{"type":"number"}},"required":["input","output"]},"markedUpUsdPricePerMillion":{"type":"object","properties":{"input":{"type":"number"},"output":{"type":"number"}},"required":["input","output"]},"releasedAt":{"type":"string","format":"date-time","nullable":true},"cache":{"type":"object","properties":{"cachedInput":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"cacheWrite5m":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"cacheWrite1h":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"read_multiplier":{"type":"number","nullable":true},"write_multiplier_5m":{"type":"number","nullable":true},"write_multiplier_1h":{"type":"number","nullable":true}},"required":["cachedInput","cacheWrite5m","cacheWrite1h","read_multiplier","write_multiplier_5m","write_multiplier_1h"],"nullable":true},"reasoning":{"type":"object","properties":{"reasoningOutput":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true}},"required":["reasoningOutput"],"nullable":true}},"required":["id","displayName","provider","family","weiPricePerMillion","usdPricePerMillion","markedUpWeiPricePerMillion","markedUpUsdPricePerMillion","releasedAt","cache","reasoning"]}},"scuUsd":{"type":"number"},"routingFeeRate":{"type":"number"},"revisionVersion":{"type":"number","nullable":true},"methodologyVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"nullable":true},"lastUpdated":{"type":"string"}},"required":["models","scuUsd","routingFeeRate","revisionVersion","methodologyVersion","lastUpdated"]},"BaselineResponseDto":{"type":"object","properties":{"date":{"type":"string"},"scuUsd":{"type":"number"},"methodologyVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true}},"required":["date","scuUsd","methodologyVersion"]},"ScuAtResponseDto":{"type":"object","properties":{"at":{"type":"string","format":"date-time"},"scuUsd":{"type":"number"},"scuUsd18":{"type":"string"},"computeIndex":{"type":"number","nullable":true},"revisionVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true},"methodologyVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true},"publishedAt":{"type":"string","format":"date-time"},"metadataHash":{"type":"string","pattern":"^0x[0-9a-f]{64}$"}},"required":["at","scuUsd","scuUsd18","computeIndex","revisionVersion","methodologyVersion","publishedAt","metadataHash"]},"OracleHistoryResponseDto":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"granularity":{"type":"string","enum":["per-revision","daily","weekly"]},"count":{"type":"integer","minimum":0,"exclusiveMinimum":false},"truncated":{"type":"boolean"},"data":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"scuUsd":{"type":"number"},"computeIndex":{"type":"number","nullable":true},"revisionVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true},"methodologyVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true},"metadataHash":{"type":"string","pattern":"^0x[0-9a-f]{64}$"}},"required":["date","scuUsd","computeIndex","revisionVersion","methodologyVersion","metadataHash"]}}},"required":["from","to","granularity","count","truncated","data"]},"ReconstitutionsResponseDto":{"type":"object","properties":{"entries":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"revisionVersion":{"type":"integer"},"methodologyVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true},"previousVersion":{"type":"integer","nullable":true},"publishedAt":{"type":"string"},"summary":{"type":"string"},"scuBefore":{"type":"number","nullable":true},"scuAfter":{"type":"number"},"changes":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"modelKey":{"type":"string"},"description":{"type":"string"},"before":{"type":"object","additionalProperties":{}},"after":{"type":"object","additionalProperties":{}}},"required":["type","description"]}},"txHash":{"type":"string","nullable":true}},"required":["id","revisionVersion","methodologyVersion","previousVersion","publishedAt","summary","scuBefore","scuAfter","changes","txHash"]}}},"required":["entries"]},"OracleRevisionResponseDto":{"type":"object","properties":{"revisionVersion":{"type":"integer","minimum":0,"exclusiveMinimum":false},"methodologyVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true},"publishedAt":{"type":"string"},"publishedBlock":{"type":"integer"},"txHash":{"type":"string"},"scuUsd":{"type":"number"},"scuUsd18":{"type":"string"},"basketSize":{"type":"integer","minimum":0,"exclusiveMinimum":false},"basket":{"type":"object","properties":{"schemaVersion":{"type":"number","minimum":1,"maximum":1},"models":{"type":"array","items":{"type":"object","properties":{"modelKey":{"type":"string"},"family":{"type":"string"},"inputPrice":{"type":"string"},"outputPrice":{"type":"string"},"displayName":{"type":"string"},"providerKey":{"type":"string"},"sdkId":{"type":"string","nullable":true}},"required":["modelKey","family","inputPrice","outputPrice","displayName","providerKey","sdkId"]}}},"selfRequired":true},"status":{"type":"string"},"confirmedAt":{"type":"string","nullable":true},"manifestUrl":{"type":"string","nullable":true}},"required":["revisionVersion","methodologyVersion","publishedAt","publishedBlock","txHash","scuUsd","scuUsd18","basketSize","basket","status","confirmedAt","manifestUrl"]},"LatestRevisionSummaryResponseDto":{"type":"object","properties":{"revisionVersion":{"type":"integer","minimum":0,"exclusiveMinimum":false},"methodologyVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true},"publishedAt":{"type":"string"},"confirmedAt":{"type":"string","nullable":true},"scuUsd":{"type":"number"},"computeIndex":{"type":"number","nullable":true},"basketSize":{"type":"integer","minimum":0,"exclusiveMinimum":false},"workload":{"type":"object","properties":{"inputTokens":{"type":"integer","minimum":0,"exclusiveMinimum":false},"outputTokens":{"type":"integer","minimum":0,"exclusiveMinimum":false}},"selfRequired":true},"metadataHash":{"type":"string","pattern":"^0x[0-9a-f]{64}$"}},"required":["revisionVersion","methodologyVersion","publishedAt","confirmedAt","scuUsd","computeIndex","basketSize","workload","metadataHash"]},"OracleHealthResponseDto":{"type":"object","properties":{"latestRevisionVersion":{"type":"integer","nullable":true},"methodologyVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true,"nullable":true},"latestRevisionConfirmedAt":{"type":"string","format":"date-time","nullable":true},"lastSyncAt":{"type":"string","format":"date-time","nullable":true},"stale":{"type":"boolean"},"liveModelCount":{"type":"integer","minimum":0,"exclusiveMinimum":false,"nullable":true},"emptyBasket":{"type":"boolean"},"basketRevisionVersion":{"type":"integer","nullable":true},"pendingRevision":{"type":"object","properties":{"ageMs":{"type":"integer","minimum":0,"exclusiveMinimum":false}},"nullable":true,"selfRequired":true}},"required":["latestRevisionVersion","methodologyVersion","latestRevisionConfirmedAt","lastSyncAt","stale","liveModelCount","emptyBasket","basketRevisionVersion","pendingRevision"]},"ContractMetadataResponseDto":{"type":"object","properties":{"chainId":{"type":"integer","minimum":0,"exclusiveMinimum":true},"address":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"version":{"type":"integer","nullable":true},"bytecodeHash":{"type":"string","pattern":"^0x[0-9a-f]{64}$","nullable":true},"checkedAt":{"type":"string","format":"date-time"}},"required":["chainId","address","version","bytecodeHash","checkedAt"]},"PricingResponseDto":{"type":"object","properties":{"object":{"type":"string","enum":["pricing"]},"pegUsd":{"type":"number"},"models":{"type":"object","additionalProperties":{"type":"object","properties":{"input":{"type":"object","properties":{"weiPerMillion":{"type":"number"},"usdPerMillion":{"type":"number"},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]}},"required":["weiPerMillion","usdPerMillion","provenance"]},"output":{"type":"object","properties":{"weiPerMillion":{"type":"number"},"usdPerMillion":{"type":"number"},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]}},"required":["weiPerMillion","usdPerMillion","provenance"]},"cache":{"type":"object","properties":{"cachedInput":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"cacheWrite5m":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"cacheWrite1h":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"read_multiplier":{"type":"number","nullable":true},"write_multiplier_5m":{"type":"number","nullable":true},"write_multiplier_1h":{"type":"number","nullable":true}},"required":["cachedInput","cacheWrite5m","cacheWrite1h","read_multiplier","write_multiplier_5m","write_multiplier_1h"],"nullable":true},"reasoning":{"type":"object","properties":{"reasoningOutput":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true}},"required":["reasoningOutput"],"nullable":true}},"required":["input","output","cache","reasoning"]},"selfRequired":true},"updatedAt":{"type":"string"}},"required":["object","pegUsd","models","updatedAt"]},"CatalogResponseDto":{"type":"object","properties":{"models":{"type":"array","items":{"type":"object","properties":{"modelKey":{"type":"string"},"displayName":{"type":"string"},"provider":{"type":"object","properties":{"key":{"type":"string","enum":["openai","anthropic","google","xai","moonshot","alibaba","deepseek","minimax","xiaomi"],"x-enumNames":["OpenAI","Anthropic","Google","XAI","Moonshot","Alibaba","DeepSeek","MiniMax","Xiaomi"]},"name":{"type":"string"}},"required":["key","name"]},"family":{"type":"string","nullable":true},"indexMember":{"description":"Whether this model is the current family representative in the latest confirmed SCU revision.","type":"boolean"},"releasedAt":{"type":"string","format":"date-time","nullable":true},"maxInputTokens":{"description":"Largest input, in tokens, this model accepts. A request estimated above it is refused with 422 before it reaches the provider. Absent means the model declares no window of its own and only the request-body ceiling applies.","type":"integer","minimum":0,"exclusiveMinimum":true},"currentPrice":{"type":"object","properties":{"inputPriceUsdPerMillion":{"type":"number"},"outputPriceUsdPerMillion":{"type":"number"},"provenance":{"type":"object","properties":{"input":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"output":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]}},"required":["input","output"]},"observedAt":{"type":"string","format":"date-time"}},"required":["inputPriceUsdPerMillion","outputPriceUsdPerMillion","provenance","observedAt"]},"contextTiers":{"description":"Long-context price ladder, ascending by fromInputTokens, present only on models that carry one. currentPrice is the flat rate below the first threshold and is the only price the SCU manifest attests; a request above a threshold is billed at that tier instead. Absent means the model costs the same at every input size.","type":"array","items":{"type":"object","properties":{"fromInputTokens":{"description":"Lowest input size, in tokens, priced at this tier. The tier is selected from the whole input side of a request — prompt plus cache reads plus cache writes — and the range is half-open, so an input landing exactly here takes this tier rather than the one below.","type":"integer","minimum":0,"exclusiveMinimum":true},"inputPriceUsdPerMillion":{"type":"number"},"outputPriceUsdPerMillion":{"type":"number"},"provenance":{"description":"One mark for the band: a tier is quoted by the vendor as a single line, so its input and output share it. A band may be marked differently from the model's flat price.","type":"string","enum":["verified","inferred","promotional"]}},"required":["fromInputTokens","inputPriceUsdPerMillion","outputPriceUsdPerMillion","provenance"]}},"cache":{"type":"object","properties":{"cachedInput":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"cacheWrite5m":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"cacheWrite1h":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"read_multiplier":{"type":"number","nullable":true},"write_multiplier_5m":{"type":"number","nullable":true},"write_multiplier_1h":{"type":"number","nullable":true}},"required":["cachedInput","cacheWrite5m","cacheWrite1h","read_multiplier","write_multiplier_5m","write_multiplier_1h"],"nullable":true},"reasoning":{"type":"object","properties":{"reasoningOutput":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true}},"required":["reasoningOutput"],"nullable":true}},"required":["modelKey","displayName","provider","family","indexMember","releasedAt","currentPrice","cache","reasoning"]}},"truncated":{"type":"boolean"},"generatedAt":{"type":"string","format":"date-time"}},"required":["models","truncated","generatedAt"]},"ResolveBatchResponseDto":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"inputKey":{"type":"string"},"resolvedKey":{"type":"string"},"family":{"type":"string","nullable":true},"provider":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"nullable":true},"prices":{"type":"object","properties":{"inputUsdPerMillion":{"type":"number"},"outputUsdPerMillion":{"type":"number"},"provenance":{"type":"object","properties":{"input":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"output":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]}},"required":["input","output"]}},"required":["inputUsdPerMillion","outputUsdPerMillion","provenance"],"nullable":true},"cache":{"type":"object","properties":{"cachedInput":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"cacheWrite5m":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"cacheWrite1h":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"read_multiplier":{"type":"number","nullable":true},"write_multiplier_5m":{"type":"number","nullable":true},"write_multiplier_1h":{"type":"number","nullable":true}},"required":["cachedInput","cacheWrite5m","cacheWrite1h","read_multiplier","write_multiplier_5m","write_multiplier_1h"],"nullable":true},"reasoning":{"type":"object","properties":{"reasoningOutput":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true}},"required":["reasoningOutput"],"nullable":true},"inBasket":{"type":"boolean"},"priceSource":{"type":"string","enum":["oracle-basket","oracle-catalog","off-basket"]}},"required":["inputKey","resolvedKey","family","provider","prices","cache","reasoning","inBasket","priceSource"]}}},"required":["results"]},"ResolveResponseDto":{"type":"object","properties":{"inputKey":{"type":"string"},"resolvedKey":{"type":"string"},"family":{"type":"string","nullable":true},"provider":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"nullable":true,"selfRequired":true},"prices":{"type":"object","properties":{"inputUsdPerMillion":{"type":"number"},"outputUsdPerMillion":{"type":"number"},"provenance":{"type":"object","properties":{"input":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"output":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]}},"required":["input","output"]}},"nullable":true,"selfRequired":true},"cache":{"type":"object","properties":{"cachedInput":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"cacheWrite5m":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"cacheWrite1h":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true},"read_multiplier":{"type":"number","nullable":true},"write_multiplier_5m":{"type":"number","nullable":true},"write_multiplier_1h":{"type":"number","nullable":true}},"nullable":true,"selfRequired":true},"reasoning":{"type":"object","properties":{"reasoningOutput":{"type":"object","properties":{"usdPerMillion":{"type":"number","nullable":true},"ratioOfInput":{"type":"number","nullable":true},"source":{"type":"string"},"sourceUrl":{"type":"string","nullable":true},"provenance":{"description":"How far this number has been checked. 'verified' — an operator recorded a vendor source for this number; 'inferred' — derived from a sibling number or a vendor default, with no source recorded; 'promotional' — a discounted list price that bills exactly as shown and is expected to end. Every value bills as shown; the mark says how much to trust it, not what it costs. Marks are set by hand and hold as of the operator's last pass, not as a live check against the vendor: a number that went on promotion and has not been re-marked still reads as it was.","type":"string","enum":["verified","inferred","promotional"]},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","provenance","createdAt"],"nullable":true}},"nullable":true,"selfRequired":true},"inBasket":{"type":"boolean"},"priceSource":{"type":"string","enum":["oracle-basket","oracle-catalog","off-basket"]}},"required":["inputKey","resolvedKey","family","provider","prices","cache","reasoning","inBasket","priceSource"]},"MethodologyChangelogResponseDto":{"type":"object","properties":{"activeVersion":{"type":"integer","minimum":0,"exclusiveMinimum":true},"entries":{"type":"array","items":{"type":"object","properties":{"version":{"type":"integer","minimum":0,"exclusiveMinimum":true},"title":{"type":"string"},"meanType":{"type":"string"},"weighting":{"type":"string"},"familyRule":{"type":"object","properties":{"oneFamilyOneSlot":{"type":"boolean"},"familyKeyScheme":{"type":"string"},"representativeSelection":{"type":"string"}},"required":["oneFamilyOneSlot","familyKeyScheme","representativeSelection"]},"referenceWorkload":{"type":"object","properties":{"inputTokens":{"type":"integer","minimum":0,"exclusiveMinimum":true},"outputTokens":{"type":"integer","minimum":0,"exclusiveMinimum":true}},"required":["inputTokens","outputTokens"]},"cacheReasoningInIndex":{"type":"boolean"},"formulaSummary":{"type":"string"},"rationale":{"type":"string"},"specUrl":{"type":"string","nullable":true}},"required":["version","title","meanType","weighting","familyRule","referenceWorkload","cacheReasoningInIndex","formulaSummary","rationale","specUrl"]}}},"required":["activeVersion","entries"]},"MethodologyRecordResponseDto":{"type":"object","properties":{"version":{"type":"integer","minimum":0,"exclusiveMinimum":true},"title":{"type":"string"},"meanType":{"type":"string"},"weighting":{"type":"string"},"familyRule":{"type":"object","properties":{"oneFamilyOneSlot":{"type":"boolean"},"familyKeyScheme":{"type":"string"},"representativeSelection":{"type":"string"}},"selfRequired":true},"referenceWorkload":{"type":"object","properties":{"inputTokens":{"type":"integer","minimum":0,"exclusiveMinimum":true},"outputTokens":{"type":"integer","minimum":0,"exclusiveMinimum":true}},"selfRequired":true},"cacheReasoningInIndex":{"type":"boolean"},"formulaSummary":{"type":"string"},"rationale":{"type":"string"},"specUrl":{"type":"string","nullable":true}},"required":["version","title","meanType","weighting","familyRule","referenceWorkload","cacheReasoningInIndex","formulaSummary","rationale","specUrl"]},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","code"],"properties":{"message":{"type":"string","description":"Human-readable summary."},"type":{"type":"string","description":"OpenAI-compatible coarse category derived from the canonical code."},"code":{"$ref":"#/components/schemas/ErrorCode"},"param":{"type":"string","nullable":true,"description":"Field name when the error is bound to a specific input."},"details":{"type":"object","additionalProperties":true,"nullable":true,"description":"Code-specific structured payload."},"issues":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Zod issues for VALIDATION_FAILED responses."}}}}},"ErrorCode":{"type":"string","description":"Canonical taxonomy code. Full descriptions live under the `Errors` tag.","enum":["unauthorized","forbidden","invalid_signature","signature_reused","invalid_api_key","api_key_frozen","api_key_revoked","model_restricted","bad_request","validation_failed","method_not_allowed","payload_too_large","not_found","already_exists","conflict","insufficient_balance","spending_limit_reached","all_keys_exhausted","rate_limited","stream_interrupted","contract_error","internal_error","service_unavailable"]}},"responses":{"Error_unauthorized":{"description":"401 unauthorized — Authentication is required to access this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"Authentication is required to access this endpoint.","type":"invalid_request_error","code":"unauthorized"}}}}},"Error_forbidden":{"description":"403 forbidden — The caller is authenticated but is not allowed to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"The caller is authenticated but is not allowed to perform this action.","type":"forbidden","code":"forbidden"}}}}},"Error_invalid_signature":{"description":"401 invalid_signature — The provided signature could not be verified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"The provided signature could not be verified.","type":"invalid_request_error","code":"invalid_signature"}}}}},"Error_signature_reused":{"description":"409 signature_reused — This signed request has already been submitted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"This signed request has already been submitted.","type":"invalid_request_error","code":"signature_reused"}}}}},"Error_invalid_api_key":{"description":"401 invalid_api_key — The Bearer API key is missing, malformed, or not recognized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"The Bearer API key is missing, malformed, or not recognized.","type":"invalid_request_error","code":"invalid_api_key"}}}}},"Error_api_key_frozen":{"description":"403 api_key_frozen — The API key is currently frozen and cannot be used for requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"The API key is currently frozen and cannot be used for requests.","type":"forbidden","code":"api_key_frozen"}}}}},"Error_api_key_revoked":{"description":"401 api_key_revoked — The API key has been revoked and can no longer be used.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"The API key has been revoked and can no longer be used.","type":"invalid_request_error","code":"api_key_revoked"}}}}},"Error_model_restricted":{"description":"403 model_restricted — The requested model is not in this key's allowed-models list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"The requested model is not in this key's allowed-models list.","type":"forbidden","code":"model_restricted"}}}}},"Error_bad_request":{"description":"400 bad_request — The request is invalid in a way that does not match a more specific error code.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"The request is invalid in a way that does not match a more specific error code.","type":"invalid_request_error","code":"bad_request"}}}}},"Error_validation_failed":{"description":"422 validation_failed — The request body failed validation. Per-field details are in `error.issues[]`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"The request body failed validation. Per-field details are in `error.issues[]`.","type":"invalid_request_error","code":"validation_failed"}}}}},"Error_method_not_allowed":{"description":"405 method_not_allowed — The endpoint exists but does not accept this HTTP method.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"The endpoint exists but does not accept this HTTP method.","type":"invalid_request_error","code":"method_not_allowed"}}}}},"Error_payload_too_large":{"description":"413 payload_too_large — The request body is larger than the exchange accepts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"The request body is larger than the exchange accepts.","type":"invalid_request_error","code":"payload_too_large"}}}}},"Error_not_found":{"description":"404 not_found — The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"The requested resource does not exist.","type":"not_found","code":"not_found"}}}}},"Error_already_exists":{"description":"409 already_exists — A resource with the same unique identity already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"A resource with the same unique identity already exists.","type":"conflict","code":"already_exists"}}}}},"Error_conflict":{"description":"409 conflict — The resource was modified concurrently; retry with the latest version.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"The resource was modified concurrently; retry with the latest version.","type":"conflict","code":"conflict"}}}}},"Error_insufficient_balance":{"description":"402 insufficient_balance — The account's $COMPUTE balance is below the requested amount.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"The account's $COMPUTE balance is below the requested amount.","type":"insufficient_quota","code":"insufficient_balance"}}}}},"Error_spending_limit_reached":{"description":"429 spending_limit_reached — A spending cap has been reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"A spending cap has been reached.","type":"rate_limit_error","code":"spending_limit_reached"}}}}},"Error_all_keys_exhausted":{"description":"502 all_keys_exhausted — No upstream capacity is currently available for the routed model.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"No upstream capacity is currently available for the routed model.","type":"server_error","code":"all_keys_exhausted"}}}}},"Error_rate_limited":{"description":"429 rate_limited — The caller exceeded a rate-limit window on this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"The caller exceeded a rate-limit window on this endpoint.","type":"rate_limit_error","code":"rate_limited"}}}}},"Error_stream_interrupted":{"description":"500 stream_interrupted — The SSE stream aborted before completion.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"The SSE stream aborted before completion.","type":"server_error","code":"stream_interrupted"}}}}},"Error_contract_error":{"description":"500 contract_error — An on-chain call reverted or could not be confirmed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"An on-chain call reverted or could not be confirmed.","type":"server_error","code":"contract_error"}}}}},"Error_internal_error":{"description":"500 internal_error — An unexpected server-side failure occurred.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"An unexpected server-side failure occurred.","type":"server_error","code":"internal_error"}}}}},"Error_service_unavailable":{"description":"503 service_unavailable — A required upstream dependency is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"A required upstream dependency is temporarily unavailable.","type":"server_error","code":"service_unavailable"}}}}}}},"externalDocs":{"description":"Methodology and guides","url":"https://docs.compute.finance"},"x-mcp-server":{"package":"@compute-finance/mcp","version":"0.3.0","transport":"stdio","install":{"command":"npx","args":["@compute-finance/mcp"]},"setupCommand":"npx @compute-finance/mcp setup","serverCard":"https://compute.finance/.well-known/mcp/server-card.json","repository":"https://github.com/compute-finance/mcp","npm":"https://www.npmjs.com/package/@compute-finance/mcp","registry":"https://registry.modelcontextprotocol.io/v0/servers?search=io.github.compute-finance/mcp"}}