Cast AI PR Costs API
Stores client-observed PR assignments. Monetary totals are verified from billing records.
Stores client-observed PR assignments. Monetary totals are verified from billing records.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/kimchi:kimchi-prcostsapi-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: AI Enabler PR Costs API
version: 0.0.1
description: Stores client-observed PR assignments. Monetary totals are verified from billing records.
servers:
- url: https://api.cast.ai/
description: US endpoint
- url: https://api.eu.cast.ai/
description: EU endpoint
security:
- BearerAuth: []
- ApiKeyAuth: []
tags:
- name: PRCostsAPI
description: Stores client-observed PR assignments. Monetary totals are verified from billing records.
paths:
/ai-optimizer/v1beta/organizations/{organizationId}/pr-cost-snapshots:
post:
tags:
- PRCostsAPI
summary: Report pull request cost assignments
description: 'Replaces one producer''s repository snapshot, optionally retaining named finished PRs.
Named window omissions preserve finished PRs; other omissions withdraw claims.
Frozen ownership changes only through explicit correction receipts until day 90.
A snapshot over a reporting cap returns RESOURCE_EXHAUSTED (HTTP 429) with a google.rpc.ErrorInfo
detail: reason PR_COST_LIMIT, domain ai-optimizer, and scope, limit, current and maximum metadata.
The previous accepted snapshot and other contributors'' data stay unchanged. Retrying the same
snapshot cannot succeed. Transient overload returns UNAVAILABLE (HTTP 503) with RetryInfo and
a Retry-After header.'
operationId: PRCostsAPI_ReportPRCosts
parameters:
- name: organizationId
in: path
description: Organization selected by the authenticated request.
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PRCostSnapshot'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ReportPRCostsResponse'
default:
description: Default error response
content:
application/json:
schema:
$ref: '#/components/schemas/Status'
/ai-optimizer/v1beta/organizations/{organizationId}/pr-costs:
get:
tags:
- PRCostsAPI
summary: Query pull request costs
description: 'Pages through the organization''s latest stored calculation, which resolves all active organization
claims before the optional filters apply. A request without a page token recalculates first when an
upload changed the inventory or the stored calculation is over a minute old. If that does not finish
in time, the stored calculation answers while the recalculation continues in the background; without
one, the request returns UNAVAILABLE (HTTP 503) with RetryInfo and a Retry-After header.
When a calculation budget is exceeded, the response holds the data that fits, sets partial and
lists the limits instead of failing.'
operationId: PRCostsAPI_QueryPRCosts
parameters:
- name: organizationId
in: path
description: Organization selected by the authenticated request.
required: true
schema:
type: string
- name: provider
in: query
description: Optional repository filter's Git provider.
schema:
type: string
- name: host
in: query
description: Optional repository filter's provider hostname.
schema:
type: string
- name: repositoryId
in: query
description: Optional repository filter's stable provider ID.
schema:
type: string
- name: pullRequestId
in: query
description: Optional stable PR ID; requires a complete repository filter.
schema:
type: string
- name: pageSize
in: query
description: Maximum PRs per page; 0 means 100.
schema:
type: integer
format: int32
- name: pageToken
in: query
description: next_page_token of the previous page, sent with the same filters and order.
schema:
type: string
- name: orderBy
in: query
description: "Empty for open PRs first, then the newest merged or closed. Otherwise pull_request (repository name,\n then PR number), cost, request_count or contributor_count, ascending or followed by \" desc\".\n PRs without the value, such as a cost that is not fully priced, sort last in both directions."
schema:
type: string
- name: mergeStartTime
in: query
description: Only merged PRs whose merge time is at or after this time, for merge trends.
schema:
type: string
format: date-time
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/QueryPRCostsResponse'
default:
description: Default error response
content:
application/json:
schema:
$ref: '#/components/schemas/Status'
components:
schemas:
PRModelCost:
type: object
properties:
model:
type: string
description: Model that served the requests, e.g. glm-5.3.
auto:
type: boolean
description: Whether the requests named a virtual auto model and the router chose this model.
costUsd:
type: string
description: Priced cost in USD as an exact decimal string.
requestCount:
type: integer
description: Requests with a priced bill from this model.
format: int32
description: The priced part of a PR's cost that one model served.
Status:
type: object
properties:
code:
type: integer
description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
format: int32
message:
type: string
description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
details:
type: array
items:
$ref: '#/components/schemas/GoogleProtobufAny'
description: A list of messages that carry the error details. There is a common set of message types for APIs to use.
description: 'The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).'
PRRepository:
type: object
properties:
provider:
type: string
description: 'Git provider: github or gitlab.'
host:
type: string
description: Provider hostname, without a scheme or path.
id:
type: string
description: Stable repository ID from the provider, not its mutable name.
name:
type: string
description: Optional client-observed display name, such as owner/repository.
description: ID is assigned by the Git provider and survives repository renames.
GoogleProtobufAny:
type: object
properties:
'@type':
type: string
description: The type of the serialized message.
additionalProperties: true
description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
PRCostAmount:
type: object
properties:
knownCostUsd:
type: string
description: Sum of verified unique billing rows as an exact decimal USD string.
totalCostUsd:
type: string
description: Complete cost, absent if any contributing attempt has an unknown price.
requestCount:
type: integer
description: Distinct actor-scoped request attempts assigned to this amount.
format: int32
billingRecordCount:
type: integer
description: Distinct verified billing rows counted in known_cost_usd.
format: int32
unpricedRequestCount:
type: integer
description: Distinct attempts with at least one missing or unverifiable billing row.
format: int32
description: "Exact decimal USD. total_cost_usd is absent when any contributing request is unpriced.\n known_cost_usd is only the known subtotal, including a genuine zero price."
PRSnapshotCoverage:
type: object
properties:
observedRequests:
type: integer
description: Number of attempts in requests; must equal the inventory length.
format: int32
unpricedRequests:
type: integer
description: Number the client could not price; the backend recomputes current price coverage.
format: int32
historyComplete:
type: boolean
description: Whether the client has a complete request history for this repository.
lastCostRefreshAt:
type: string
description: "Last client billing refresh, if one completed.\n (-- api-linter: core::0142::time-field-names=disabled\n aip.dev/not-precedent: Preserve the versioned snapshot JSON contract's At names. --)"
format: date-time
trimmedRequests:
type: string
description: "Attempts the client left out of requests to stay within the snapshot caps.\n A positive count requires history_complete to be false."
description: These are client coverage observations, not billing verification.
PRCostCorrection:
type: object
properties:
id:
type: string
description: UUID of the local work-link record.
revision:
type: integer
description: Increasing revision of that decision; unlink advances the same record.
format: int32
recordedAt:
type: string
description: "Time the explicit decision was recorded; a newer upload is not a new decision.\n (-- api-linter: core::0142::time-field-names=disabled\n aip.dev/not-precedent: Preserve the versioned snapshot JSON contract's At names. --)"
format: date-time
source:
type: string
description: The authenticated producer confirms that native local proof passed validation.
description: A stable local decision, independent of the upload revision and producer.
PRCostLimit:
type: object
properties:
scope:
type: string
description: One of snapshot, producer, contributor, organization or frozen.
limit:
type: string
description: "One of bytes, requests, pullRequests, snapshots, repositories, billingIds, reports, reportBytes or\n billingLinkBytes. With scope it identifies the cap; organization billingIds also reports the billing\n row budget, whose maximum is twice the lookup budget."
current:
type: string
description: Usage that reached the cap.
maximum:
type: string
description: Cap in force for this scope.
description: One exceeded cap or budget. It never names a contributor.
QueryPRCostsResponse:
type: object
properties:
pullRequests:
type: array
items:
$ref: '#/components/schemas/PullRequestCosts'
description: "One page of matching PRs in order_by order; filters do not change organization buckets. Across\n pages, every PR the organization reported is included, final frozen totals too."
buckets:
type: object
additionalProperties:
$ref: '#/components/schemas/PRCostAmount'
description: Organization-wide explicit, inferred, shared, unlinked, unmerged, post-merge, unknown and unresolved totals.
observedRequests:
type: integer
description: Distinct actor-scoped attempts in all active organization snapshots.
format: int32
unpricedRequests:
type: integer
description: Distinct attempts without complete server-verified prices.
format: int32
historyComplete:
type: boolean
description: "True only if every active snapshot declares complete history and every frozen PR still\n inside its 90-day detail window froze with complete history."
trimmedRequests:
type: string
description: "Sum of trimmed_requests across the current snapshots: attempts clients left out to stay within the\n snapshot caps. Their cost is not in this response."
snapshotCount:
type: integer
description: Number of current snapshots, excluding withdrawal tombstones.
format: int32
lastReportAt:
type: string
description: "Latest server receipt time among current snapshots.\n (-- api-linter: core::0142::time-field-names=disabled\n aip.dev/not-precedent: Preserve the versioned snapshot JSON contract's At names. --)"
format: date-time
billingCheckedAt:
type: string
description: "Time the stored calculation finished checking exact billing records.\n (-- api-linter: core::0142::time-field-names=disabled\n aip.dev/not-precedent: Preserve the versioned snapshot JSON contract's At names. --)"
format: date-time
metadataProvenance:
type: string
description: Always client-observed; the backend does not independently query the Git provider.
limits:
type: array
items:
$ref: '#/components/schemas/PRCostLimit'
description: Budgets this response exceeded. Totals that depend on the omitted work stay incomplete.
partial:
type: boolean
description: True when a budget left some billing or saved history out of this response.
nextPageToken:
type: string
description: Token for the next page; empty on the last page.
openPullRequestCount:
type: integer
description: Open PRs matching the repository and PR filters, across all pages and whatever merge_start_time is.
format: int32
repositories:
type: array
items:
$ref: '#/components/schemas/PRRepository'
description: Every repository with a reported PR, whatever the filters, for choosing a repository filter.
description: "Buckets are organization-wide, even when the PR list is filtered. Shared and\n unresolved money is counted once here and is never added to each candidate PR.\n A query-time budget never fails the query: the response holds what fits and marks itself partial."
PRAllocation:
type: object
properties:
kind:
type: string
description: Assignment category; unknown preserves attempts without a safe PR assignment.
pullRequestIds:
type: array
items:
type: string
description: "IDs from this snapshot's PR inventory: one for exclusive kinds, at least two for shared,\n candidate PRs for unknown, and none for unlinked."
method:
type: string
description: 'Matching evidence: model and session remain inferred even when a bill is verified.'
description: Inferred methods never contribute to explicit spend.
PRCostRequest:
type: object
properties:
requestId:
type: string
description: UUID of one dispatched request attempt, including a separate UUID for each retry.
billingRecordIds:
type: array
items:
type: string
description: Exact billing row UUIDs; the backend verifies their organization, owner and price.
startedAt:
type: string
description: "Client-observed dispatch time used to separate pre-merge and post-merge work.\n (-- api-linter: core::0142::time-field-names=disabled\n aip.dev/not-precedent: Preserve the versioned snapshot JSON contract's At names. --)"
format: date-time
allocation:
allOf:
- $ref: '#/components/schemas/PRAllocation'
description: Client's proposed assignment; it does not establish billing ownership.
correction:
allOf:
- $ref: '#/components/schemas/PRCostCorrection'
description: "An explicit work link/unlink or verified producer confirmation. Reusing a\n receipt cannot undo a later correction, even from another installation."
description: One attempt may have multiple billing rows or no bill yet.
ReportPRCostsResponse:
type: object
properties:
status:
type: string
description: One of accepted, unchanged or stale.
revision:
type: string
description: Current revision as a positive signed 64-bit decimal string.
receivedAt:
type: string
description: "Server receipt time of the current accepted revision.\n (-- api-linter: core::0142::time-field-names=disabled\n aip.dev/not-precedent: Preserve the versioned snapshot JSON contract's At names. --)"
format: date-time
description: The acknowledged revision is the current accepted revision, including stale responses.
PRMetadata:
type: object
properties:
id:
type: string
description: Stable PR or merge request ID from the provider.
number:
type: integer
description: Repository-local PR number or merge request IID for display.
format: int32
url:
type: string
description: "Client-observed HTTP link on the repository's provider host.\n (-- api-linter: core::0140::uri=disabled\n aip.dev/not-precedent: Preserve the versioned snapshot JSON contract's url name. --)"
state:
type: string
description: 'Client-observed state: open, closed or merged.'
mergedAt:
type: string
description: "Client-observed merge time, present only for a merged PR.\n (-- api-linter: core::0142::time-field-names=disabled\n aip.dev/not-precedent: Preserve the versioned snapshot JSON contract's At names. --)"
format: date-time
closedAt:
type: string
description: "Client-observed close time, present only for a closed, unmerged PR.\n (-- api-linter: core::0142::time-field-names=disabled\n aip.dev/not-precedent: Preserve the versioned snapshot JSON contract's At names. --)"
format: date-time
title:
type: string
description: Client-observed title of the PR or merge request. Empty when the client did not send it.
author:
type: string
description: Client-observed login of the PR author on the provider. Empty when the client did not send it.
description: All metadata is client-observed, not independently verified with the Git provider.
PullRequestCosts:
type: object
properties:
repository:
allOf:
- $ref: '#/components/schemas/PRRepository'
description: Stable repository identity and latest client-observed display name.
pullRequest:
allOf:
- $ref: '#/components/schemas/PRMetadata'
description: Latest client-observed PR metadata.
metadataConflicted:
type: boolean
description: Active clients disagree about the PR's display or merge metadata.
explicit:
allOf:
- $ref: '#/components/schemas/PRCostAmount'
description: Spend assigned through native evidence or an explicit user decision.
inferred:
allOf:
- $ref: '#/components/schemas/PRCostAmount'
description: Spend assigned only through model or session evidence.
matchingMethods:
type: array
items:
type: string
description: Distinct observed assignment methods, sorted; includes uncertain/shared claims.
frozenAt:
readOnly: true
type: string
description: "End of the PR's upload window, set only when the PR's total is saved; a PR refused by a\n frozen cap has none. The saved total is kept indefinitely and is final 90 days after the\n PR finishes. This date never changes.\n (-- api-linter: core::0142::time-field-names=disabled\n aip.dev/not-precedent: Preserve the versioned snapshot JSON contract's At names. --)"
format: date-time
correctedAt:
readOnly: true
type: string
description: "Last accepted explicit correction to this frozen total. Its original freeze\n date does not change.\n (-- api-linter: core::0142::time-field-names=disabled\n aip.dev/not-precedent: Preserve the versioned snapshot JSON contract's At names. --)"
format: date-time
unmerged:
allOf:
- $ref: '#/components/schemas/PRCostAmount'
description: "Spend so far on this PR while it is not merged (open or closed): requests assigned to this PR\n alone. It is counted in the organization's unmerged bucket and never in explicit or inferred;\n once the PR merges, the next upload moves it there."
contributorCount:
type: integer
description: "Distinct contributors (API key owners) with a request in this PR's explicit, inferred or unmerged\n amount. Shared, unknown, unresolved, post-merge and unlinked work stays in organization buckets and\n adds no contributor. Absent only for a PR total frozen before contributor counts were saved."
format: int32
models:
readOnly: true
type: array
items:
$ref: '#/components/schemas/PRModelCost'
description: "This PR's priced cost split by the model that served it, highest cost first. Auto requests count\n under the model the router chose, as their own entry next to that model's direct requests.\n Unpriced requests have no model yet. Empty for a PR total frozen before the split was saved."
description: One PR's explicit, inferred and unmerged amounts; shared spend remains in organization buckets.
PRCostSnapshot:
type: object
properties:
schemaVersion:
type: integer
description: Snapshot format version; currently 1.
format: int32
producerId:
type: string
description: Stable UUID for one reporting installation.
revision:
type: string
description: Increasing revision for this producer and repository, encoded as a decimal string.
generatedAt:
type: string
description: "Time the client assembled this snapshot, not server receipt time.\n (-- api-linter: core::0142::time-field-names=disabled\n aip.dev/not-precedent: Preserve the versioned snapshot JSON contract's At names. --)"
format: date-time
repository:
allOf:
- $ref: '#/components/schemas/PRRepository'
description: Provider identity and optional display name of the reported repository.
pullRequests:
type: array
items:
$ref: '#/components/schemas/PRMetadata'
description: PR metadata referenced by this snapshot's assignments.
requests:
type: array
items:
$ref: '#/components/schemas/PRCostRequest'
description: Replacement inventory of observed attempts, including unpriced attempts.
coverage:
allOf:
- $ref: '#/components/schemas/PRSnapshotCoverage'
description: Client coverage observations for the supplied request inventory.
retainedPullRequestIds:
type: array
items:
type: string
description: "Previously accepted closed or merged PRs to keep when omitted from this upload.\n Must not also appear in pull_requests. Supplied attempts override retained copies."
windowedPullRequestIds:
type: array
items:
type: string
description: "Exact finished PR IDs omitted by the upload window. The server preserves the\n already accepted PRs in this list, including during client clock skew and PRs\n it last saw open. IDs must be distinct from pull_requests and retained_pull_request_ids."
description: "Version 1 accepts only identifiers, assignment methods, coverage and PR display metadata.\n It does not accept prices, prompts, source, paths or session/conversation contents."
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
x-provenance:
method: searched
source: https://docs.cast.ai/reference
harvested: '2026-10-20'
tool: harvest-readme-openapi.py
note: Assembled verbatim from the OpenAPI definition ReadMe embeds in each operation page of the provider's developer portal; paths and components merged by API title, nothing authored.
assembled_from:
- https://docs.cast.ai/reference/analyticsapi_generateanalytics.md
- https://docs.cast.ai/reference/analyticsapi_generatebillingmodelusagereport.md
- https://docs.cast.ai/reference/analyticsapi_generatebreakdown.md
- https://docs.cast.ai/reference/analyticsapi_generatelatestchatcompletionsummary.md
- https://docs.cast.ai/reference/analyticsapi_generatelatestevaluationsummary.md
- https://docs.cast.ai/reference/analyticsapi_generatelatestinferencesummaries.md
- https://docs.cast.ai/reference/analyticsapi_generaterouterreport.md
- https://docs.cast.ai/reference/analyticsapi_queryanalytics.md
- https://docs.cast.ai/reference/apikeysapi_createapikey.md
- https://docs.cast.ai/reference/apikeysapi_deleteapikeybudget.md
- https://docs.cast.ai/reference/apikeysapi_deleteorganizationbudget.md
- https://docs.cast.ai/reference/apikeysapi_deleteteambudget.md
- https://docs.cast.ai/reference/apikeysapi_deleteuserbudget.md
- https://docs.cast.ai/reference/apikeysapi_getapikeybudget.md
- https://docs.cast.ai/reference/apikeysapi_getbudgetoverview.md
- https://docs.cast.ai/reference/apikeysapi_getorganizationbudget.md
- https://docs.cast.ai/reference/apikeysapi_getteambudget.md
- https://docs.cast.ai/reference/apikeysapi_getuserbudget.md
- https://docs.cast.ai/reference/apikeysapi_getuserbudgetstatus.md
- https://docs.cast.ai/reference/apikeysapi_listapikeybudgets.md
- https://docs.cast.ai/reference/apikeysapi_listorganizationbudgets.md
- https://docs.cast.ai/reference/apikeysapi_listteambudgets.md
- https://docs.cast.ai/reference/apikeysapi_listuserbudgets.md
- https://docs.cast.ai/reference/apikeysapi_updateapikeybudget.md
- https://docs.cast.ai/reference/apikeysapi_updateorganizationbudget.md
- https://docs.cast.ai/reference/apikeysapi_updateteambudget.md
- https://docs.cast.ai/reference/apikeysapi_updateuserbudget.md
- https://docs.cast.ai/reference/apikeysapi_verifyapikey.md
- https://docs.cast.ai/reference/apikeysapi_verifyinference.md
- https://docs.cast.ai/reference/authorizeapi_authorizeaction.md
- https://docs.cast.ai/reference/batchapi_cancelbatch.md
- https://docs.cast.ai/reference/batchapi_createbatch.md
- https://docs.cast.ai/reference/batchapi_getbatch.md
- https://docs.cast.ai/reference/batchapi_listbatches.md
- https://docs.cast.ai/reference/batchapi_reportbatcherror.md
- https://docs.cast.ai/reference/batchapi_updatebatch.md
- https://docs.cast.ai/reference/componentsapi_listcomponents.md
- https://docs.cast.ai/reference/couponsapi_listredeemedcoupons.md
- https://docs.cast.ai/reference/couponsapi_redeemcoupon.md
- https://docs.cast.ai/reference/couponsapi_validatecoupon.md
- https://docs.cast.ai/reference/embeddingsapi_createclusterembedding.md
- https://docs.cast.ai/reference/embeddingsapi_createembedding.md
- https://docs.cast.ai/reference/evaluationsapi_createclusterevaluation.md
- https://docs.cast.ai/reference/evaluationsapi_createevaluation.md
- https://docs.cast.ai/reference/hostedmodeleventsapi_listhostedmodelevents.md
- https://docs.cast.ai/reference/hostedmodelsapi_createhostedmodel.md
- https://docs.cast.ai/reference/hostedmodelsapi_deletehostedmodel.md
- https://docs.cast.ai/reference/hostedmodelsapi_gethostedmodelpods.md
- https://docs.cast.ai/reference/hostedmodelsapi_listhostedmodels.md
- https://docs.cast.ai/reference/hostedmodelsapi_scalehostedmodel.md
- https://docs.cast.ai/reference/hostedmodelsapi_updatehostedmodel.md
- https://docs.cast.ai/reference/llmrequestsapi_listllmrequests.md
- https://docs.cast.ai/reference/marketingapi_handlehubspotwebhook.md
- https://docs.cast.ai/reference/mcpgatewayadminapi_createmcpconnection.md
- https://docs.cast.ai/reference/mcpgatewayadminapi_deletemcpconnection.md
- https://docs.cast.ai/reference/mcpgatewayadminapi_getmcpconnection.md
- https://docs.cast.ai/reference/mcpgatewayadminapi_listmcpconnections.md
- https://docs.cast.ai/reference/mcpgatewayadminapi_updatemcpconnection.md
- https://docs.cast.ai/reference/modelaccessapi_getmodelaccesscatalog.md
- https://docs.cast.ai/reference/modelaccessapi_getorganizationmodelaccess.md
- https://docs.cast.ai/reference/modelaccessapi_getteammodelaccess.md
- https://docs.cast.ai/reference/modelaccessapi_listteammodelaccess.md
- https://docs.cast.ai/reference/modelaccessapi_updateorganizationmodelaccess.md
- https://docs.cast.ai/reference/modelaccessapi_updateteammodelaccess.md
- https://docs.cast.ai/reference/modelregistriesapi_createmodelregistry.md
- https://docs.cast.ai/reference/modelregistriesapi_deletemodelregistry.md
- https://docs.cast.ai/reference/modelregistriesapi_getmodelregistry.md
- https://docs.cast.ai/reference/modelregistriesapi_getonboardingcommand.md
- https://docs.cast.ai/reference/modelregistriesapi_getonboardingscript.md
- https://docs.cast.ai/reference/modelregistriesapi_listmodelregistries.md
- https://docs.cast.ai/reference/modelregistriesapi_listmodelregistrydirectories.md
- https://docs.cast.ai/reference/modelspecsapi_createmodelspecs.md
- https://docs.cast.ai/reference/modelspecsapi_deletemodelspecs.md
- https://docs.cast.ai/reference/modelspecsapi_getmodelspecs.md
- https://docs.cast.ai/reference/modelspecsapi_listmodelspecs.md
- https://docs.cast.ai/reference/oauthappsapi_completeoauthlogin.md
- https://docs.cast.ai/reference/oauthappsapi_createoauthapp.md
- https://docs.cast.ai/reference/oauthappsapi_deleteoauthapp.md
- https://docs.cast.ai/reference/oauthappsapi_disconnectoauthapp.md
- https://docs.cast.ai/reference/oauthappsapi_getoauthapp.md
- https://docs.cast.ai/reference/oauthappsapi_listoauthapps.md
- https://docs.cast.ai/reference/oauthappsapi_registerdiscoveredoauthapp.md
- https://docs.cast.ai/reference/oauthappsapi_startoauthlogin.md
- https://docs.cast.ai/reference/oauthappsapi_updateoauthapp.md
- https://docs.cast.ai/reference/onboardingapi_checkmodelscache.md
- https://docs.cast.ai/reference/onboardingapi_getmodelscachescript.md
- https://docs.cast.ai/reference/onboardingapi_getonboardingcommand.md
- https://docs.cast.ai/reference/onboardingapi_getonboardingscript.md
- https://docs.cast.ai/reference/onboardingapi_getonboardingstatus.md
- https://docs.cast.ai/reference/onboardingapi_getsetupscript.md
- https://docs.cast.ai/reference/onboardingapi_registermodelscache.md
- https://docs.cast.ai/reference/otelapi_generateproductivitymetricstimeseries.md
- https://docs.cast.ai/reference/otelapi_getproductivitymetrics.md
- https://docs.cast.ai/reference/otelapi_ingestlogs.md
- https://docs.cast.ai/reference/otelapi_ingestmetrics.md
- https://docs.cast.ai/reference/playgroundchatcompletionsapi_streamplaygroundchatcompletion.md
- https://docs.cast.ai/reference/policiesapi_createpolicy.md
- https://docs.cast.ai/reference/policiesapi_deletepolicy.md
- https://docs.cast.ai/reference/policiesapi_getpolicy.md
- https://docs.cast.ai/reference/policiesapi_listpolicies.md
- https://docs.cast.ai/reference/policiesapi_listpolicyversions.md
# --- truncated at 32 KB (37 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kimchi/refs/heads/main/openapi/kimchi-prcostsapi-api-openapi.yml