{"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.","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","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.","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.","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.","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. 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.","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":"Same logic as /resolve/:key for each comma-separated key in the query. Preserves input order. Unknown models return priceSource='off-basket' with null prices instead of an error. 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 key, prices, and priceSource","description":"Normalizes the input (dash→dot, strips bracket annotations and trailing date suffixes), then matches against the catalog. 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. 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| `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 per-key spending cap has been reached. | The key carries a daily, weekly, or monthly cap, and this request would exceed 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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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"},"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"},"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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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"}},"required":["weiPerMillion","usdPerMillion"]},"output":{"type":"object","properties":{"weiPerMillion":{"type":"number"},"usdPerMillion":{"type":"number"}},"required":["weiPerMillion","usdPerMillion"]},"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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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"},"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},"currentPrice":{"type":"object","properties":{"inputPriceUsdPerMillion":{"type":"number"},"outputPriceUsdPerMillion":{"type":"number"},"observedAt":{"type":"string","format":"date-time"}},"required":["inputPriceUsdPerMillion","outputPriceUsdPerMillion","observedAt"]},"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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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"}},"required":["inputUsdPerMillion","outputUsdPerMillion"],"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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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"}},"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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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},"createdAt":{"type":"string","nullable":true}},"required":["usdPerMillion","ratioOfInput","source","sourceUrl","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","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_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 per-key spending cap has been reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"example":{"error":{"message":"A per-key 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"}}