Cast AI PR Costs API

Stores client-observed PR assignments. Monetary totals are verified from billing records.

Operations 2

POST /ai-optimizer/v1beta/organizations/{organizationId}/pr-cost-snapshots Report pull request cost assignments #
GET /ai-optimizer/v1beta/organizations/{organizationId}/pr-costs Query pull request costs #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/kimchi:kimchi-prcostsapi-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

kimchi-prcostsapi-api-openapi.yml Raw ↑
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