> ## Documentation Index
> Fetch the complete documentation index at: https://developers.askparable.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Read which AI processors may use Workspace data

> Returns the selected Workspace’s AI model policy: the processors Parable allows for it, the processors the Workspace switched off, its default model per capability, and the effective policy every AI call applies. Requires permission to manage the Workspace’s AI processors.

## Access

An MCP token or a Parable token can call this operation. See [Authentication](/getting-started/authentication.md) for the kinds of token.

Your roles must grant `tenant.ai.manage`.

## Errors

* `WA-TN-001`: The request has no Workspace context. Select a Workspace before reading its model policy.


## OpenAPI

````yaml /api-reference/openapi.json get /api/model-policy
openapi: 3.0.3
info:
  description: >-
    Use the Workspace API to work with artifacts, connectors, Parables, and
    account resources.
  title: Workspace API
  version: v2026.10.22.1
servers: []
security: []
paths:
  /api/model-policy:
    get:
      tags:
        - Model policy
      summary: Read which AI processors may use Workspace data
      description: >-
        Returns the selected Workspace’s AI model policy: the processors Parable
        allows for it, the processors the Workspace switched off, its default
        model per capability, and the effective policy every AI call applies.
        Requires permission to manage the Workspace’s AI processors.
      operationId: ModelPolicyGetModelPolicyHandler
      parameters:
        - description: >-
            Workspace slug. Overrides subdomain-based workspace resolution when
            provided.
          in: header
          name: X-Tenant
          required: false
          schema:
            example: acme
            type: string
        - description: Optional request correlation ID echoed back in the response.
          in: header
          name: X-Request-ID
          required: false
          schema:
            example: 550e8400-e29b-41d4-a716-446655440000
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: '#/components/schemas/WorkspaceModelPolicy'
                  links:
                    $ref: '#/components/schemas/ResponseLinks'
                  meta:
                    $ref: '#/components/schemas/ResponseMeta'
                required:
                  - data
                  - meta
                type: object
          description: Successful response
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: The request is not valid. `detail` says why.
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: The token is missing, malformed, revoked, or expired.
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: >-
            The token cannot make this request. For example, the roles of its
            owner do not allow the operation.
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '429':
          content:
            text/plain:
              schema:
                example: Too Many Requests
                type: string
          description: >-
            More than 120 requests a minute came from your address. Wait for the
            number of seconds in `Retry-After`, then try again.
          headers:
            Retry-After:
              description: The number of seconds to wait before you try again.
              schema:
                type: integer
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: The request failed on the server.
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
      security:
        - bearerAuth: []
      x-codeSamples:
        - label: TypeScript SDK
          lang: typescript
          source: |-
            import { WebApiSDK } from "@parable-platform/web-api-sdk";

            const sdk = new WebApiSDK({
              baseUrl: process.env.PARABLE_API_URL!,
              auth: { token: process.env.PARABLE_API_TOKEN! },
              requestInterceptor: (config) => ({
                ...config,
                headers: { ...config.headers, "X-Tenant": process.env.PARABLE_WORKSPACE! },
              }),
            });

            const result = await sdk.modelPolicy.getModelPolicy();
        - label: Python SDK
          lang: python
          source: |-
            import os

            from parable_web_api_sdk import ClientConfig, WebApiSDK

            sdk = WebApiSDK(
                ClientConfig(
                    base_url=os.environ["PARABLE_API_URL"],
                    auth_token=os.environ["PARABLE_API_TOKEN"],
                    default_headers={"X-Tenant": os.environ["PARABLE_WORKSPACE"]},
                )
            )

            result = sdk.model_policy.get_model_policy()
        - label: Rust SDK
          lang: rust
          source: >-
            use parable_web_api_sdk::{ClientConfig, RequestOptions, WebApiSdk};


            let sdk = WebApiSdk::new(ClientConfig::with_base_url(
                std::env::var("PARABLE_API_URL")?,
                Some(std::env::var("PARABLE_API_TOKEN")?),
                None,
            ))?;

            let options = RequestOptions::with_header("X-Tenant",
            std::env::var("PARABLE_WORKSPACE")?, None, None);


            let result = sdk.model_policy.get_model_policy(
                Some(&options)
            ).await?;
        - label: Go SDK
          lang: go
          source: "sdk, err := webapisdk.New(webapisdk.SDKConfig{\n\tBaseURL: os.Getenv(\"PARABLE_API_URL\"),\n\tAuth:    &webapisdk.AuthConfig{Token: os.Getenv(\"PARABLE_API_TOKEN\")},\n\tRequestInterceptor: func(ctx context.Context, req *http.Request) error {\n\t\treq.Header.Set(\"X-Tenant\", os.Getenv(\"PARABLE_WORKSPACE\"))\n\t\treturn nil\n\t},\n})\nif err != nil {\n\treturn err\n}\n\nresult, err := sdk.ModelPolicyNamespace.GetModelPolicy(ctx)"
components:
  schemas:
    WorkspaceModelPolicy:
      description: >-
        A Workspace's AI model policy as its administrators see it: the stored

        choices and the effective policy Parable computes from them. Parable
        sets

        the processors the Workspace may use and its Vertex AI project. The

        Workspace switches processors off and sets the defaults.
      properties:
        capabilityDefaults:
          description: The Workspace's default model per capability.
          items:
            $ref: '#/components/schemas/ModelCapabilityDefault'
          type: array
        disabledProcessors:
          description: Processors the Workspace switched off.
          items:
            $ref: '#/components/schemas/ModelProcessor'
          type: array
        effective:
          $ref: '#/components/schemas/EffectiveModelPolicy'
          description: What every AI call over the Workspace's data applies.
        eligibleProcessors:
          description: >-
            The processors Parable allows for the Workspace. Null means Parable
            set

            no limit. An empty list means no processor may receive the
            Workspace's

            data.
          items:
            $ref: '#/components/schemas/ModelProcessor'
          nullable: true
          type: array
        features:
          description: >-
            The product feature each capability serves, from the environment
            policy.
          items:
            $ref: '#/components/schemas/ModelCapabilityFeature'
          type: array
        processors:
          description: >-
            Every processor the environment lists for any capability, in
            processor

            order, with its terms and what it serves for the Workspace.
          items:
            $ref: '#/components/schemas/WorkspaceModelProcessor'
          type: array
        settableDefaults:
          description: >-
            The capabilities the Workspace may set a default for, in capability

            order, with the kind of choice each takes. setModelPreferences
            refuses a

            default for any other capability.
          items:
            $ref: '#/components/schemas/WorkspaceSettableDefault'
          type: array
        vertexProject:
          description: >-
            The Workspace's own Vertex AI project, which Parable owns and sets.
            Null

            means the environment's shared project.
          nullable: true
          type: string
      required:
        - disabledProcessors
        - capabilityDefaults
        - effective
        - processors
        - features
        - settableDefaults
      type: object
    ResponseLinks:
      properties:
        first:
          nullable: true
          type: string
        last:
          nullable: true
          type: string
        next:
          nullable: true
          type: string
        prev:
          nullable: true
          type: string
      type: object
    ResponseMeta:
      properties:
        requestId:
          description: Unique identifier for the request
          type: string
        totalCount:
          description: Total count of items for paginated responses
          nullable: true
          type: integer
      required:
        - requestId
      type: object
    ProblemDetails:
      description: An error response in the Problem Details format (RFC 9457).
      properties:
        code:
          description: The stable error code, when the problem has one.
          example: WA-VL-001
          type: string
        detail:
          description: What went wrong with this request.
          type: string
        details:
          description: >-
            Structured facts about the refusal, such as the entity or the path
            it concerns. Only some refusals have it.
        errors:
          description: >-
            The fields or filters that failed validation. Only a validation or
            filter error has it.
        requestId:
          description: >-
            The ID of the request, when the problem has one. The `X-Request-ID`
            response header always has it.
          type: string
        status:
          description: The HTTP status code.
          example: 400
          type: integer
        title:
          description: A short summary, usually the text of the HTTP status.
          example: Bad Request
          type: string
        type:
          description: >-
            The problem type. It is `about:blank`: the status and `code`
            identify the problem.
          example: about:blank
          type: string
      required:
        - type
        - title
        - status
        - detail
      type: object
    ModelCapabilityDefault:
      additionalProperties: false
      description: A Workspace's default model for one capability.
      properties:
        capability:
          $ref: '#/components/schemas/ModelCapability'
        choice:
          $ref: '#/components/schemas/ModelChoice'
      required:
        - capability
        - choice
      type: object
    ModelProcessor:
      description: >-
        An AI processor that may receive a Workspace's data when Parable runs a

        model over it. The Workspace model policy is a set of these: Parable
        sets

        the processors a Workspace may use, the Workspace may switch some of
        them

        off, and the environment policy caps both.
      enum:
        - VERTEX
        - OPENROUTER_ZDR
        - ANTHROPIC
        - TYPESAFE
      type: string
    EffectiveModelPolicy:
      additionalProperties: false
      description: >-
        A Workspace's effective model policy: what Parable computes from the

        environment policy, the Workspace's stored model policy and the global

        model catalog. Every AI call over the Workspace's data applies one rule
        to

        it.
      properties:
        capabilities:
          items:
            $ref: '#/components/schemas/EffectiveModelCapability'
          type: array
        digest:
          description: |-
            SHA-256 of everything else in this policy. It changes whenever the
            environment policy, the stored policy or a catalog route it names
            changes, so consumers cache by it.
          maxLength: 64
          minLength: 64
          pattern: ^[0-9a-f]{64}$
          type: string
        policyVersion:
          description: >-
            The stored policy's version (tenant_model_policy._version). 0 when
            the

            Workspace has no stored policy.
          format: int64
          maximum: 9007199254740991
          minimum: 0
          type: integer
        tenantId:
          description: UUID v4 with automatic base62 encoding for client-facing APIs
          pattern: >-
            ^([0-9A-Za-z]{1,22}|[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
          type: string
        vertexProject:
          description: >-
            The Workspace's own Vertex AI project, which Parable owns, once
            Parable

            has set it up. Null means the environment's shared project: none is
            set,

            or the one set is not ready yet. Vertex calls for the Workspace run
            in

            this project. It is routing only and never part of a model identity.
          nullable: true
          type: string
      required:
        - tenantId
        - policyVersion
        - digest
        - capabilities
      type: object
    ModelCapabilityFeature:
      additionalProperties: false
      description: |-
        The product feature one capability serves, and what a Workspace loses
        when no processor may serve it. The Workspace AI processors
        page shows it before a narrowing or a default is saved.
      properties:
        capability:
          $ref: '#/components/schemas/ModelCapability'
        name:
          description: The feature's name, as a Workspace administrator reads it.
          type: string
        whenDefaultChanges:
          description: |-
            What a change to the Workspace's default model does to work already
            scheduled. Null when a change reaches only later calls.
          nullable: true
          type: string
        whenUnavailable:
          description: What stops working when no processor may serve the capability.
          type: string
      required:
        - capability
        - name
        - whenUnavailable
      type: object
    WorkspaceModelProcessor:
      description: >-
        One AI processor as a Workspace's administrators see it: what it is, its

        terms, and what it serves for the Workspace. Parable computes every
        field.
      properties:
        capabilities:
          description: >-
            The capabilities this environment lets the processor serve, when
            Parable

            allows the processor for the Workspace, whether or not the Workspace

            switched it off. Empty when Parable does not allow it.
          items:
            $ref: '#/components/schemas/ModelCapability'
          type: array
        eligibleCapabilities:
          description: >-
            The capabilities it serves for the Workspace now: the ones above,
            unless

            the Workspace switched it off.
          items:
            $ref: '#/components/schemas/ModelCapability'
          type: array
        ponderServer:
          description: |-
            The ponder() server that sends a call to this processor, for a
            SQL_MODEL default. Null when ponder() cannot reach it.
          nullable: true
          type: string
        processor:
          $ref: '#/components/schemas/ModelProcessor'
        switchedOff:
          description: Whether the Workspace switched it off.
          type: boolean
        terms:
          description: |-
            What the processor is and its retention terms, from the environment
            policy. Null when the environment records none for it.
          oneOf:
            - $ref: '#/components/schemas/ModelProcessorTerms'
            - enum:
                - null
              nullable: true
              type: object
        withinCeiling:
          description: >-
            Whether Parable allows the processor for the Workspace. The
            Workspace can

            switch only an allowed processor off, and back on.
          type: boolean
      required:
        - processor
        - capabilities
        - eligibleCapabilities
        - withinCeiling
        - switchedOff
      type: object
    WorkspaceSettableDefault:
      description: |-
        A capability a Workspace may set its own default model for, and the one
        kind of choice that default takes. Embedding models are
        platform-only, so they never appear Decision 6).
      properties:
        capability:
          $ref: '#/components/schemas/ModelCapability'
        choiceKind:
          $ref: '#/components/schemas/ModelChoiceKind'
      required:
        - capability
        - choiceKind
      type: object
    ModelCapability:
      description: |-
        A kind of model call that runs over a Workspace's data. The environment
        policy lists the processors each one may use, and a Workspace sets a
        default model for the ones it may choose. Parable chooses the models of
        the embedding capabilities: a Workspace sets no default for them.
      enum:
        - PONDER_CHAT
        - SQL_EMBED
        - SQL_MODEL
        - SQL_JEV
        - POOL_SEARCH_EMBEDDING
        - SCHEMA_INFERENCE
        - PONDER_CLEANUP
        - PONDER_NAMING
        - PONDER_JUDGMENT
        - ROW_SEARCH_EMBEDDING
        - PONDER_LANGUAGE
      type: string
    ModelChoice:
      description: >-
        The model one capability uses, either a catalog Model Release, an
        embedding model identity, a Jev model version, a processor's own model
        id, or ponder() model coordinates.
      discriminator:
        mapping:
          EMBED_MODEL: '#/components/schemas/EmbedModelChoice'
          JEV_MODEL: '#/components/schemas/JevModelChoice'
          MODEL_RELEASE: '#/components/schemas/ModelReleaseChoice'
          PONDER_MODEL: '#/components/schemas/PonderModelChoice'
          PROCESSOR_MODEL: '#/components/schemas/ProcessorModelChoice'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/ModelReleaseChoice'
        - $ref: '#/components/schemas/EmbedModelChoice'
        - $ref: '#/components/schemas/JevModelChoice'
        - $ref: '#/components/schemas/ProcessorModelChoice'
        - $ref: '#/components/schemas/PonderModelChoice'
    EffectiveModelCapability:
      additionalProperties: false
      description: One capability of a Workspace's effective model policy.
      properties:
        capability:
          $ref: '#/components/schemas/ModelCapability'
        eligibleProcessors:
          description: >-
            The environment's processors for the capability that Parable allows
            for

            the Workspace, minus the ones the Workspace switched off, in
            environment

            order.
          items:
            $ref: '#/components/schemas/ModelProcessor'
          type: array
        refusal:
          description: >-
            Set when a call that names no model must refuse. Null when resolved
            is set.
          oneOf:
            - $ref: '#/components/schemas/ModelPolicyRefusal'
            - enum:
                - null
              nullable: true
              type: string
        resolved:
          description: >-
            The model a call that names none uses: the Workspace default when it
            is

            set and eligible, else the first platform default candidate whose

            processor is eligible.
          oneOf:
            - $ref: '#/components/schemas/ResolvedModelChoice'
            - enum:
                - null
              nullable: true
              type: object
      required:
        - capability
        - eligibleProcessors
      type: object
    ModelProcessorTerms:
      additionalProperties: false
      description: |-
        What one AI processor is and the terms under which it receives a
        Workspace's data. The Workspace AI processors page shows it,
        and it is the one source for the AI entries of the sub-processor list.
      properties:
        description:
          description: What the processor is and how Parable reaches it.
          type: string
        name:
          description: The processor's name, as a Workspace administrator reads it.
          type: string
        processor:
          $ref: '#/components/schemas/ModelProcessor'
        retention:
          description: The retention terms that apply to the Workspace data it receives.
          type: string
        retentionBasis:
          $ref: '#/components/schemas/ModelProcessorRetentionBasis'
      required:
        - processor
        - name
        - description
        - retention
        - retentionBasis
      type: object
    ModelChoiceKind:
      description: Which member of ModelChoice a value is.
      enum:
        - MODEL_RELEASE
        - EMBED_MODEL
        - JEV_MODEL
        - PROCESSOR_MODEL
        - PONDER_MODEL
      type: string
    EmbedModelChoice:
      additionalProperties: false
      description: |-
        An embedding model. Parable chooses the embedding models: a Workspace
        cannot. As a capability's defaultChoice or a Workspace default the
        processor is VERTEX;
        a platform candidate (PlatformModelCandidate) names its own processor.
      properties:
        identity:
          $ref: '#/components/schemas/EmbedModelIdentity'
        kind:
          $ref: '#/components/schemas/ModelChoiceKind'
      required:
        - kind
        - identity
      type: object
    JevModelChoice:
      additionalProperties: false
      description: >-
        A Jev model version, such as `jev-1.13.0`. TypeSafe serves Jev, so the
        processor is TYPESAFE.
      properties:
        kind:
          $ref: '#/components/schemas/ModelChoiceKind'
        version:
          maxLength: 64
          minLength: 1
          type: string
      required:
        - kind
        - version
      type: object
    ModelReleaseChoice:
      additionalProperties: false
      description: A Model Release from the global catalog, for chat.
      properties:
        kind:
          $ref: '#/components/schemas/ModelChoiceKind'
        modelReleaseId:
          description: UUID v4 with automatic base62 encoding for client-facing APIs
          pattern: >-
            ^([0-9A-Za-z]{1,22}|[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
          type: string
      required:
        - kind
        - modelReleaseId
      type: object
    PonderModelChoice:
      additionalProperties: false
      description: >-
        The coordinates of a ponder() or model() call, for SQL_MODEL. The
        processor

        is the one the coordinates' server names: `vertex` is VERTEX,
        `anthropic` is

        ANTHROPIC, and `openrouter` is OPENROUTER_ZDR.
      properties:
        kind:
          $ref: '#/components/schemas/ModelChoiceKind'
        model:
          $ref: '#/components/schemas/PonderModelConfig'
        processor:
          $ref: '#/components/schemas/ModelProcessor'
      required:
        - kind
        - model
        - processor
      type: object
    ProcessorModelChoice:
      additionalProperties: false
      description: >-
        A model named by the processor that serves it, in that processor's own

        model id: `anthropic/claude-haiku-5-5` on OPENROUTER_ZDR, or
        `gemini-3.5-flash-lite` on

        VERTEX. The platform defaults use it because a catalog Model Release id

        differs between environments.
      properties:
        kind:
          $ref: '#/components/schemas/ModelChoiceKind'
        modelId:
          maxLength: 200
          minLength: 1
          type: string
        processor:
          $ref: '#/components/schemas/ModelProcessor'
      required:
        - kind
        - processor
        - modelId
      type: object
    ModelPolicyRefusal:
      description: >-
        Why a model call fails closed. A call never falls back to another
        processor.
      enum:
        - ENVIRONMENT_POLICY_MISSING
        - NO_ELIGIBLE_PROCESSOR
        - NO_MODEL
        - PROCESSOR_NOT_ELIGIBLE
        - MODEL_NOT_ROUTABLE
      type: string
    ResolvedModelChoice:
      additionalProperties: false
      description: >-
        A model a call resolved to, the processor that serves it, and where it
        came from.
      properties:
        choice:
          $ref: '#/components/schemas/ModelChoice'
        inputTokenLimit:
          description: >-
            The model's input limit in tokens, from the platform candidate that

            resolved (PlatformModelCandidate.inputTokenLimit). Null for any
            other

            choice.
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          nullable: true
          type: integer
        modelReleaseId:
          description: >-
            The catalog Model Release, for a chat choice: the release itself, or
            the

            release the catalog routes a processor model id to.
          nullable: true
          pattern: >-
            ^([0-9A-Za-z]{1,22}|[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
          type: string
        processor:
          $ref: '#/components/schemas/ModelProcessor'
        routeModelId:
          description: >-
            The processor's model id for a catalog Model Release, from its
            route.
          nullable: true
          type: string
        source:
          $ref: '#/components/schemas/ModelChoiceSource'
      required:
        - source
        - choice
        - processor
      type: object
    ModelProcessorRetentionBasis:
      description: >-
        On what basis a processor keeps, or does not keep, the Workspace data it
        receives.
      enum:
        - ZERO_DATA_RETENTION_REQUIRED
        - SERVICE_TERMS
        - NO_ZERO_DATA_RETENTION_AGREEMENT
      type: string
    EmbedModelIdentity:
      additionalProperties: false
      description: >-
        The identity that makes stored vectors comparable: two vectors

        compare only when every field matches. The server that computes a vector
        is

        routing, never identity, so it is absent.
      properties:
        dimensions:
          description: >-
            Signed 64-bit integer; range bounded by JavaScript's safe-integer
            ceiling.
          format: int64
          maximum: 9007199254740991
          minimum: 1
          type: integer
        name:
          minLength: 1
          type: string
        normalization:
          minLength: 1
          type: string
        provider:
          minLength: 1
          type: string
        variant:
          minLength: 1
          type: string
        version:
          minLength: 1
          type: string
      required:
        - provider
        - name
        - variant
        - version
        - dimensions
        - normalization
      type: object
    PonderModelConfig:
      description: |-
        Model coordinates and per-call inference settings packed by the ponder()
        and model() SQL functions. The model policy's SQL_MODEL choice
        (PonderModelChoice) carries the same coordinates.
      properties:
        date:
          type: string
        effort:
          type: string
        name:
          type: string
        provider:
          type: string
        request_timeout_secs:
          description: >-
            Signed integer count of seconds: an amount of elapsed time, never a
            point in time. An epoch timestamp is Temporal.DateTime with
            x-temporal-format: unix.
          format: int64
          maximum: 9007199254740991
          minimum: 0
          nullable: true
          type: integer
        server:
          type: string
        tokens:
          description: >-
            Signed 64-bit integer; range bounded by JavaScript's safe-integer
            ceiling.
          format: int64
          maximum: 9007199254740991
          minimum: -9007199254740991
          nullable: true
          type: integer
        variant:
          type: string
        version:
          type: string
      required:
        - provider
        - name
        - variant
        - version
        - date
        - effort
        - server
      type: object
    ModelChoiceSource:
      description: Where a resolved model came from. The members are in precedence order.
      enum:
        - EXPLICIT
        - REQUEST_OPTION
        - WORKSPACE_DEFAULT
        - PLATFORM_DEFAULT
      type: string
  headers:
    X-Request-ID:
      description: >-
        The ID of the request. It is the `X-Request-ID` value that you sent, or
        an ID that the server made. Give it when you report a problem.
      schema:
        type: string
  securitySchemes:
    bearerAuth:
      description: >-
        A personal access token, which starts with `pat_`. A Parable token can
        call each operation that the roles of its owner allow. An MCP token can
        call only the read operations that are open to agents. A SQL token does
        not work on this API.
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.