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

# Evaluate a decision

> Asks a list of questions about some input and returns one typed answer
per question, in order, with per-answer confidence and probabilities.
Served by any decision model: Typesafe's jev models (and Laya, Nimble,
and Clef), or any chat model through structured output.

The map form (a `state` plus questions keyed by name) is deprecated but
still served; a map-form request is answered in the map form.

Images sent by reference to Typesafe can also come as a multipart request:
the JSON in a part named `request`, and each image in its own file part,
named by the image part's `name`.




## OpenAPI

````yaml /openapi/openapi.json post /v1/decisions
openapi: 3.1.0
info:
  title: Bifrost API
  description: >
    Bifrost HTTP Transport API for AI model inference and gateway management.


    This API provides a unified interface for interacting with multiple AI
    providers

    including OpenAI, Anthropic, Bedrock, Gemini, and more through a single API,

    along with comprehensive management APIs for configuring and monitoring the
    gateway.


    ## API Structure


    ### Unified Inference API (`/v1/*`)

    The primary API using Bifrost's unified format. Model parameters use the
    format

    `provider/model` (e.g., `openai/gpt-4`, `anthropic/claude-3-opus`).


    ### Async Inference API (`/v1/async/*`)

    Submit inference requests for asynchronous execution. Returns a job ID
    immediately

    and allows polling for results. Supports all inference types except batches,
    files,

    and containers.


    ### Provider Integration APIs

    Native provider-format APIs for drop-in compatibility:

    - `/openai/*` - OpenAI-compatible API

    - `/anthropic/*` - Anthropic-compatible API

    - `/genai/*` - Google GenAI (Gemini) compatible API

    - `/bedrock/*` - AWS Bedrock compatible API

    - `/cohere/*` - Cohere compatible API


    ### Framework Integration APIs

    Multi-provider proxy endpoints for AI frameworks:

    - `/litellm/*` - LiteLLM proxy with all provider formats

    - `/langchain/*` - LangChain compatible endpoints

    - `/pydanticai/*` - PydanticAI compatible endpoints


    ### Management APIs (`/api/*`)

    APIs for managing and monitoring the Bifrost gateway:

    - `/api/config` - Configuration management

    - `/api/providers` - Provider and API key management

    - `/api/plugins` - Plugin management

    - `/api/governance/*` - Virtual keys, teams, customers, budgets, rate
    limits, routing rules, and pricing overrides

    - `/api/logs` - Log search and analytics

    - `/api/mcp/*` - MCP (Model Context Protocol) client management

    - `/api/session/*` - Authentication and session management

    - `/api/cache/*` - Cache management

    - `/health` - Health check endpoint


    ## Fallbacks

    Requests can include fallback models that will be tried if the primary model
    fails.
  version: 1.0.0
  contact:
    name: Contact Us
    url: https://getmaxim.ai/bifrost
  license:
    name: Apache 2.0
    url: https://opensource.org/licenses/Apache-2.0
servers:
  - url: '{baseUrl}'
    description: Your Bifrost instance
    variables:
      baseUrl:
        default: http://localhost:8080
        description: Base URL of your Bifrost instance (e.g. https://bifrost.mycompany.com)
security:
  - BearerAuth: []
  - BasicAuth: []
  - ApiKeyAuth: []
tags:
  - name: Agent Gateway
    description: >-
      Agent registrations, A2A protocol calls, push callbacks, and operation
      history
  - name: Models
    description: Model listing and information
  - name: Chat Completions
    description: Chat-based text generation
  - name: Text Completions
    description: Text completion generation
  - name: Responses
    description: OpenAI Responses API compatible endpoints
  - name: OCR
    description: Optical character recognition for documents and images
  - name: Rerank
    description: Document reranking by relevance to a query
  - name: Decisions
    description: Structured decisions evaluated against annotated function-tool definitions
  - name: Embeddings
    description: Text embedding generation
  - name: Images
    description: Image generations, editing, and variations
  - name: Videos
    description: Video generation and management
  - name: Audio
    description: Speech synthesis and transcription
  - name: Count Tokens
    description: Token counting utilities
  - name: Batch
    description: Batch processing operations
  - name: Files
    description: File management operations
  - name: Containers
    description: Container management operations
  - name: Async Jobs
    description: Asynchronous job submission and retrieval endpoints
  - name: Realtime
    description: Realtime WebSocket and WebRTC endpoints
  - name: OpenAI Integration
    description: OpenAI-compatible API endpoints (/openai/*)
  - name: Azure Integration
    description: Azure OpenAI integration endpoints
  - name: Anthropic Integration
    description: Anthropic-compatible API endpoints (/anthropic/*)
  - name: GenAI Integration
    description: Google GenAI (Gemini) compatible API endpoints (/genai/*)
  - name: Bedrock Integration
    description: AWS Bedrock compatible API endpoints (/bedrock/*)
  - name: Cohere Integration
    description: Cohere compatible API endpoints (/cohere/*)
  - name: Typesafe Integration
    description: Typesafe compatible API endpoints (/typesafe/*)
  - name: LiteLLM Integration
    description: LiteLLM proxy endpoints with multi-provider support (/litellm/*)
  - name: LangChain Integration
    description: LangChain compatible endpoints with multi-provider support (/langchain/*)
  - name: PydanticAI Integration
    description: >-
      PydanticAI compatible endpoints with multi-provider support
      (/pydanticai/*)
  - name: Health
    description: Health check endpoints
  - name: Configuration
    description: Configuration management endpoints
  - name: Session
    description: Session and authentication endpoints
  - name: Providers
    description: Provider management endpoints
  - name: Plugins
    description: Plugin management endpoints
  - name: MCP
    description: Model Context Protocol endpoints
  - name: Governance
    description: Virtual keys, teams, and customers management
  - name: Routing
    description: Routing rules and complexity analyzer configuration
  - name: Logging
    description: Log search and management endpoints
  - name: Cache
    description: Cache management endpoints
  - name: Vault
    description: Vault secret management endpoints
  - name: Skills
    description: Skills Repository management, marketplace, and download endpoints
  - name: Audit Logs
    description: >-
      CADF-compliant audit log search, export, and signature verification
      endpoints
  - name: Webhooks
    description: Webhook endpoint management and signed async-job delivery history
  - name: Notifications
    description: >-
      Role-targeted dashboard notifications, delivered over the dashboard
      WebSocket
  - name: News Feeds
    description: >-
      RSS and Atom news sources shown in the News tab of the dashboard
      notification tray
  - name: Background Jobs
    description: >-
      Status, progress and cancellation of durable background jobs (cost
      recalculation, Warp log indexing, and others)
  - name: Warp
    description: >-
      Configuration for Warp, the dashboard agent that answers questions about
      the deployment's own telemetry
  - name: Relays
    description: >-
      Relays to non-LLM HTTP APIs - endpoint management, usage preview, Relay
      Logs and the /relay data plane
paths:
  /v1/decisions:
    post:
      tags:
        - Decisions
      summary: Evaluate a decision
      description: >
        Asks a list of questions about some input and returns one typed answer

        per question, in order, with per-answer confidence and probabilities.

        Served by any decision model: Typesafe's jev models (and Laya, Nimble,

        and Clef), or any chat model through structured output.


        The map form (a `state` plus questions keyed by name) is deprecated but

        still served; a map-form request is answered in the map form.


        Images sent by reference to Typesafe can also come as a multipart
        request:

        the JSON in a part named `request`, and each image in its own file part,

        named by the image part's `name`.
      operationId: createDecision
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/DecisionRequest'
                - $ref: '#/components/schemas/DecisionMapFormRequest'
          multipart/form-data:
            schema:
              type: object
              required:
                - request
              properties:
                request:
                  type: string
                  description: >-
                    The JSON request, as for `application/json` (not the map
                    form), with each image part's `name` naming a file part of
                    this request.
              additionalProperties:
                type: string
                format: binary
                description: An image file part, named by exactly one image part's `name`
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/DecisionResponse'
                  - $ref: '#/components/schemas/DecisionMapFormResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BifrostError'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BifrostError'
      security:
        - BearerAuth: []
        - VirtualKeyAuth: []
        - ApiKeyAuth: []
components:
  schemas:
    DecisionRequest:
      type: object
      required:
        - model
        - input
        - questions
      properties:
        model:
          type: string
          description: Model in provider/model format
          example: typesafe/jev-1.13.0
        input:
          description: >
            The evidence. A string of text; a conversation, as an array of
            messages

            (with text, JSON, and image parts; images are read only by providers

            that accept them), function and custom tool calls, and their
            outputs;

            an object of structured data (passed to Typesafe-based models as
            their

            state); or null.
          oneOf:
            - type: string
            - type: array
              items:
                $ref: '#/components/schemas/DecisionInputItem'
            - type: object
              additionalProperties: true
            - type: 'null'
        questions:
          type: array
          minItems: 1
          description: Questions in the order asked. Answers follow the same order.
          items:
            $ref: '#/components/schemas/DecisionQuestion'
        safety_identifier:
          type: string
          description: >-
            Stable end-user identifier, forwarded to providers that accept one
            (OpenAI)
        prompt_cache_key:
          type: string
          description: >-
            Partitions prompt-cache reuse by a caller-chosen key. Forwarded to
            OpenAI; other providers drop it.
        prompt_cache_options:
          $ref: '#/components/schemas/DecisionPromptCacheOptions'
        fallbacks:
          type: array
          items:
            type: string
          description: Fallback models in provider/model format
    DecisionMapFormRequest:
      type: object
      deprecated: true
      description: >-
        Deprecated map form of the request, kept for existing callers. Answered
        with DecisionMapFormResponse.
      required:
        - model
        - state
        - questions
      properties:
        model:
          type: string
          description: Model in provider/model format
          example: typesafe/jev-1.13.0
        state:
          description: >-
            State to evaluate. A plain string, or structured data (object or
            array).
          oneOf:
            - type: string
            - type: object
              additionalProperties: true
            - type: array
              items: {}
        questions:
          type: object
          minProperties: 1
          description: >-
            Map of named questions. Question identifiers become answer field
            names.
          additionalProperties:
            $ref: '#/components/schemas/DecisionMapQuestion'
        fallbacks:
          type: array
          items:
            type: string
          description: Fallback models in provider/model format
    DecisionResponse:
      type: object
      required:
        - model
        - answers
      properties:
        id:
          type: string
          description: Unique identifier for the decision response
        model:
          type: string
          description: Model that performed the decision
        answers:
          type: array
          description: One answer per question, in question order
          items:
            $ref: '#/components/schemas/DecisionAnswer'
        usage:
          $ref: '#/components/schemas/BifrostLLMUsage'
        extra_fields:
          $ref: '#/components/schemas/BifrostResponseExtraFields'
        routing:
          type: object
          description: >-
            Laya only. The checkpoint that answered and why, passed through
            untouched
    DecisionMapFormResponse:
      type: object
      deprecated: true
      description: Response to a map-form request, with answers keyed by question name.
      required:
        - model
        - answers
      properties:
        id:
          type: string
          description: Unique identifier for the decision response
        model:
          type: string
          description: Model that performed the decision
        answers:
          type: object
          description: >-
            Map matching question identifiers to answers. Every requested
            question produces an answer.
          additionalProperties:
            $ref: '#/components/schemas/DecisionMapAnswer'
        usage:
          $ref: '#/components/schemas/BifrostLLMUsage'
        extra_fields:
          $ref: '#/components/schemas/BifrostResponseExtraFields'
        routing:
          type: object
          description: >-
            Laya only. The checkpoint that answered and why, passed through
            untouched
    BifrostError:
      type: object
      description: Error response from Bifrost
      properties:
        event_id:
          type: string
        type:
          type: string
        is_bifrost_error:
          type: boolean
        status_code:
          type: integer
        error:
          $ref: '#/components/schemas/ErrorField'
        extra_fields:
          $ref: '#/components/schemas/BifrostErrorExtraFields'
    DecisionInputItem:
      description: One item of a conversation input
      oneOf:
        - $ref: '#/components/schemas/DecisionInputMessage'
        - $ref: '#/components/schemas/DecisionFunctionCall'
        - $ref: '#/components/schemas/DecisionFunctionCallOutput'
        - $ref: '#/components/schemas/DecisionCustomToolCall'
        - $ref: '#/components/schemas/DecisionCustomToolCallOutput'
    DecisionQuestion:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - predicate
            - choice
            - score
            - box
          description: >-
            How the question is decided. `predicate` yields the probability a
            condition is true (Typesafe's `noul`), `choice` one of the choices,
            `score` a probability-weighted level index that may fall between
            levels, `box` the edges of a box around the instructions' subject in
            an image (Typesafe Jev 1.14).
        name:
          type: string
          description: Optional name; the answer carries it back
        instructions:
          description: >-
            Instructions for this question. A string; a list of `input_text`,
            `input_image`, and `input_json` parts, which give the question its
            own images (OpenAI's decision models read them as parts; other
            providers receive the list as structured data); or other structured
            data preserved losslessly for providers that accept it.
          anyOf:
            - type: string
            - type: array
              items:
                $ref: '#/components/schemas/DecisionInstructionPart'
            - type: object
              additionalProperties: true
            - type: array
              items: {}
        criteria:
          type: object
          description: >-
            Predicate only, read by Typesafe-based models. Optional descriptions
            of the `true` and `false` outcomes. Other providers add them to the
            instructions.
          additionalProperties: false
          properties:
            'true':
              description: A string, or structured data
            'false':
              description: A string, or structured data
        choices:
          type: array
          description: Choice only. The selectable values.
          items:
            type: object
            required:
              - value
            properties:
              value:
                description: A string or a boolean
                oneOf:
                  - type: string
                  - type: boolean
              description:
                description: A string, or structured data
        levels:
          type: array
          description: Score only. The ordered levels.
          items:
            type: object
            required:
              - label
            properties:
              label:
                type: string
              description:
                description: A string, or structured data
    DecisionPromptCacheOptions:
      type: object
      description: Prompt-caching options, forwarded to OpenAI; other providers drop them.
      properties:
        mode:
          type: string
          enum:
            - implicit
            - explicit
          description: >-
            `implicit` (the default) adds a breakpoint at the end of the shared
            input; `explicit` uses only the parts marked with
            `prompt_cache_breakpoint`
        ttl:
          type: string
          enum:
            - 30m
          description: Minimum lifetime of every breakpoint the request writes
    DecisionMapQuestion:
      type: object
      required:
        - kind
        - instructions
      properties:
        kind:
          type: string
          enum:
            - noul
            - choice
            - score
            - box
          description: >-
            How the question is decided. `noul` yields a probability between 0
            and 1, `choice` yields one option from the criteria, `score` yields
            a numeric rubric score including fractions, `box` yields the edges
            of a box around the instructions' subject in an image (Typesafe Jev
            1.14).
        instructions:
          description: >-
            Instructions for this question. A string, or structured data
            preserved losslessly.
          oneOf:
            - type: string
            - type: object
              additionalProperties: true
            - type: array
              items: {}
        criteria:
          description: >
            Applicable criteria. Optional `true`/`false` descriptions for
            `noul`; a

            required map of option to description for `choice` (at most 255
            options);

            a required ordered array of 2-10 level descriptions for `score`;
            none

            for `box`.
          oneOf:
            - type: object
              additionalProperties:
                type: string
            - type: array
              items:
                type: string
    DecisionAnswer:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          description: The question's type, or `refusal` when the model declined to answer
          example: choice
        name:
          type:
            - string
            - 'null'
          description: >-
            The question's name, when it had one. OpenAI sends null for an
            unnamed question
        probability:
          type: number
          description: Predicate answers. Probability in [0,1] that the condition is true
        choice:
          description: Choice answers. The chosen value
          oneOf:
            - type: string
            - type: boolean
        score:
          type: number
          description: Score answers. Probability-weighted level index
        box:
          type: object
          description: >-
            Box answers. Each edge is a fraction from 0 to 1 of the image's
            height (`top`, `bottom`) or width (`left`, `right`), measured from
            its top-left
          required:
            - top
            - bottom
            - left
            - right
          properties:
            top:
              type: number
            bottom:
              type: number
            left:
              type: number
            right:
              type: number
        probabilities:
          type: array
          description: >-
            Distribution over choices or levels, in question order, when
            supplied
          items:
            type: object
            properties:
              value:
                description: The choice value, or the level index
                oneOf:
                  - type: string
                  - type: boolean
                  - type: number
              label:
                type: string
                description: Score answers. The level's label
              probability:
                type: number
        confidence:
          type: number
          description: Model confidence for this answer, when supplied
        legend:
          type: object
          additionalProperties: {}
          description: Score answers. Level index to description, when supplied
        answer_confidence:
          type: number
          description: Laya only. Calibrated probability of the reported answer
        action:
          type: object
          description: Laya only. Action head output, passed through untouched
        abstention:
          type: string
          enum:
            - passed
            - abstained
            - unevaluated
          description: Laya only, when `min_confidence` is set
        abstention_threshold:
          type: number
          description: Laya only, when `min_confidence` is set
        low_confidence:
          type: boolean
          description: Laya only, when `min_confidence` is set
    BifrostLLMUsage:
      type: object
      description: Token usage information
      properties:
        prompt_tokens:
          type: integer
          description: >
            Total input tokens including any prompt-cache tokens (read + write).
            Subtract prompt_tokens_details.cached_read_tokens and
            prompt_tokens_details.cached_write_tokens to get the non-cached
            portion.
        prompt_tokens_details:
          $ref: '#/components/schemas/ChatPromptTokensDetails'
        completion_tokens:
          type: integer
          description: Number of output/completion tokens generated.
        completion_tokens_details:
          $ref: '#/components/schemas/ChatCompletionTokensDetails'
        total_tokens:
          type: integer
        tool_usage:
          type: object
          description: |
            Counts of provider-hosted (server-side) tool calls billed per call.
          properties:
            web_search:
              type: object
              properties:
                num_requests:
                  type: integer
                  description: Number of billable web search calls.
        cost:
          $ref: '#/components/schemas/BifrostCost'
    BifrostResponseExtraFields:
      type: object
      description: Additional fields included in responses
      properties:
        request_type:
          type: string
          description: Type of request that was made
        pricing_request_type:
          type: string
          description: Request type used for pricing, when it differs from request_type
        routing_info:
          $ref: '#/components/schemas/RoutingInfo'
        provider:
          $ref: '#/components/schemas/ModelProvider'
          deprecated: true
          description: 'Deprecated: use routing_info.provider.'
        original_model_requested:
          type: string
          deprecated: true
          description: >-
            Deprecated: use routing_info.primary_model when
            routing_info.is_fallback is true, otherwise routing_info.model. For
            the model the caller asked for, read routing_info.requested_model.
        resolved_model_used:
          type: string
          deprecated: true
          description: >-
            Deprecated: use routing_info.resolved_key_alias.model_id when an
            alias matched, otherwise routing_info.model.
        latency:
          type: integer
          format: int64
          description: >-
            Request latency in milliseconds. On a stream each chunk carries its
            own latency and the last chunk the total.
        upstream_latency:
          type: integer
          format: int64
          description: >-
            Milliseconds spent waiting on the provider, summed over every
            attempt, retry and fallback. Absent when unknown.
        chunk_index:
          type: integer
          description: Index of the chunk for streaming responses, 0 otherwise
        raw_request:
          description: Raw provider request, when raw request capture is enabled
        raw_response:
          description: Raw provider response, when raw response capture is enabled
        cache_debug:
          $ref: '#/components/schemas/BifrostCacheDebug'
        routing_metadata:
          type: object
          description: >-
            Billable internal calls the routing plugin made while classifying
            the request's complexity
          properties:
            calls:
              type: array
              items:
                type: object
                properties:
                  request_type:
                    type: string
                  provider_used:
                    type: string
                  model_used:
                    type: string
                  input_tokens:
                    type: integer
                  output_tokens:
                    type: integer
                  count_toward_budgets:
                    type: boolean
        guardrail_debug:
          $ref: '#/components/schemas/BifrostGuardrailMetadata'
        parse_errors:
          type: array
          description: Errors hit while parsing JSONL batch results
          items:
            type: object
            properties:
              code:
                type: string
              message:
                type: string
              param:
                type: string
              line:
                type: integer
        converted_request_type:
          type: string
        dropped_compat_plugin_params:
          type: array
          description: >-
            Parameters the compat plugin dropped because the model does not
            support them
          items:
            type: string
        dropped_unsupported_tools:
          type: array
          description: Tool types removed because the target model does not support them
          items:
            type: string
        provider_response_headers:
          type: object
          description: >-
            The provider's HTTP response headers, without transport-level
            headers
          additionalProperties:
            type: string
        passthrough_path:
          type: string
          description: Provider path of a passthrough request
    DecisionMapAnswer:
      type: object
      required:
        - kind
        - value
      properties:
        kind:
          type: string
          enum:
            - noul
            - choice
            - score
            - box
          description: The question's decision kind
        value:
          description: >-
            The decided value. A number in [0,1] for `noul`, an option string
            for `choice`, a numeric rubric score for `score`, the box's edges
            for `box`.
          oneOf:
            - type: number
            - type: string
            - type: object
              description: >-
                Box answers. Each edge is a fraction from 0 to 1 of the image's
                height (`top`, `bottom`) or width (`left`, `right`), measured
                from its top-left
              required:
                - top
                - bottom
                - left
                - right
              properties:
                top:
                  type: number
                bottom:
                  type: number
                left:
                  type: number
                right:
                  type: number
        confidence:
          type: number
          description: Model confidence for this answer, when supplied
        probabilities:
          type: object
          additionalProperties:
            type: number
          description: Probability distribution over options or levels, when supplied
        legend:
          type: object
          additionalProperties:
            type: string
          description: Legend mapping levels to descriptions, when supplied
        answer_confidence:
          type: number
          minimum: 0
          maximum: 1
          description: Laya only. Calibrated probability of the reported answer
        action:
          type: object
          description: >-
            Laya only. Action head output, e.g. `{"act_probability":1.0}`,
            passed through untouched
        abstention:
          type: string
          enum:
            - passed
            - abstained
            - unevaluated
          description: >-
            Laya only, when `min_confidence` is set. Whether the answer cleared
            the threshold
        abstention_threshold:
          type: number
          description: >-
            Laya only, when `min_confidence` is set. The threshold the answer
            was gated on
        low_confidence:
          type: boolean
          description: >-
            Laya only, when `min_confidence` is set. True when the answer fell
            below the threshold
    ErrorField:
      type: object
      properties:
        type:
          type: string
        code:
          type: string
        message:
          type: string
        param:
          type: string
        event_id:
          type: string
    BifrostErrorExtraFields:
      type: object
      properties:
        routing_info:
          $ref: '#/components/schemas/RoutingInfo'
        provider:
          $ref: '#/components/schemas/ModelProvider'
          deprecated: true
          description: 'Deprecated: use routing_info.provider.'
        original_model_requested:
          type: string
          deprecated: true
          description: >-
            Deprecated: use routing_info.primary_model when
            routing_info.is_fallback is true, otherwise routing_info.model. For
            the model the caller asked for, read routing_info.requested_model.
        resolved_model_used:
          type: string
          deprecated: true
          description: >-
            Deprecated: use routing_info.resolved_key_alias.model_id when an
            alias matched, otherwise routing_info.model.
        request_type:
          type: string
        mcp_request_type:
          type: string
        a2a_request_type:
          type: string
          description: Agent Gateway operation, for A2A errors
        a2a_agent_name:
          type: string
        error_type:
          type: string
          description: >-
            Normalized, low-cardinality classification of why the request
            failed, declared by whichever component refused it. Prefixed by
            fault domain (caller_, policy_, provider_, bifrost_). Absent on
            failures that were not classified at source.
        retry_after_ms:
          type: integer
          format: int64
          minimum: 1000
          maximum: 300000
          description: >-
            The provider's hint for how long to wait before retrying, in
            milliseconds, read from its retry-after-ms or Retry-After header or
            its google.rpc.RetryInfo error detail, and clamped to between 1000
            and 300000. Absent when the provider gave no explicit hint.
        raw_request:
          description: Raw provider request, when raw request capture is enabled
        raw_response:
          description: Raw provider response, when raw response capture is enabled
        converted_request_type:
          type: string
        dropped_compat_plugin_params:
          type: array
          items:
            type: string
        latency:
          type: integer
          format: int64
          description: Latency in milliseconds
        key_statuses:
          type: array
          description: >-
            Per-key results, for requests that ran on every key such as listing
            models
          items:
            type: object
            properties:
              key_id:
                type: string
              status:
                type: string
                enum:
                  - success
                  - list_models_failed
              provider:
                $ref: '#/components/schemas/ModelProvider'
              error:
                $ref: '#/components/schemas/BifrostError'
        mcp_auth_required:
          type: object
          description: >-
            Set when a per-user MCP tool needs the caller to complete an inline
            auth flow
          properties:
            kind:
              type: string
            mcp_client_id:
              type: string
            mcp_client_name:
              type: string
            message:
              type: string
            authorize_url:
              type: string
            session_id:
              type: string
            subject_token_missing:
              type: boolean
              description: >-
                token_exchange only. True when there was nothing to exchange,
                including when the caller's Bifrost sign-in has expired; message
                says which
            exchange_error:
              type: string
              description: >-
                token_exchange only. The identity provider's error code and
                description when it refused the exchange
        billed_usage:
          $ref: '#/components/schemas/BifrostLLMUsage'
          description: >-
            Usage the provider reported and billed even though the request
            failed
    DecisionInputMessage:
      type: object
      required:
        - role
        - content
      properties:
        type:
          type: string
          enum:
            - message
          description: Optional item type, as OpenAI's SDKs send it
        role:
          type: string
          example: user
        content:
          description: Text, or an array of parts
          oneOf:
            - type: string
            - type: array
              items:
                $ref: '#/components/schemas/DecisionInputPart'
        phase:
          type: string
          enum:
            - commentary
            - final_answer
          description: An assistant message's phase
    DecisionFunctionCall:
      type: object
      required:
        - type
        - call_id
        - name
        - arguments
      properties:
        type:
          type: string
          enum:
            - function_call
        call_id:
          type: string
          description: The call's ID, which its output names
        name:
          type: string
        arguments:
          type: string
          description: The call's arguments, as JSON text
        namespace:
          type: string
        id:
          type: string
        status:
          type: string
          enum:
            - in_progress
            - completed
            - incomplete
    DecisionFunctionCallOutput:
      type: object
      required:
        - type
        - call_id
        - output
      properties:
        type:
          type: string
          enum:
            - function_call_output
        call_id:
          type: string
          description: The call this output answers
        output:
          $ref: '#/components/schemas/DecisionToolOutput'
        id:
          type: string
        status:
          type: string
          enum:
            - in_progress
            - completed
            - incomplete
    DecisionCustomToolCall:
      type: object
      required:
        - type
        - call_id
        - name
        - input
      properties:
        type:
          type: string
          enum:
            - custom_tool_call
        call_id:
          type: string
          description: The call's ID, which its output names
        name:
          type: string
        input:
          type: string
          description: The call's freeform input
        namespace:
          type: string
        id:
          type: string
        status:
          type: string
          enum:
            - in_progress
            - completed
            - incomplete
    DecisionCustomToolCallOutput:
      type: object
      required:
        - type
        - call_id
        - output
      properties:
        type:
          type: string
          enum:
            - custom_tool_call_output
        call_id:
          type: string
          description: The call this output answers
        output:
          $ref: '#/components/schemas/DecisionToolOutput'
        id:
          type: string
        status:
          type: string
          enum:
            - in_progress
            - completed
            - incomplete
    DecisionInstructionPart:
      description: One part of a question's instructions
      oneOf:
        - type: object
          required:
            - type
            - text
          properties:
            type:
              type: string
              enum:
                - input_text
            text:
              type: string
        - type: object
          required:
            - type
            - image_url
          properties:
            type:
              type: string
              enum:
                - input_image
            image_url:
              type: string
              description: A base64 data URL or an HTTP(S) URL
            detail:
              type: string
              enum:
                - low
                - high
                - auto
                - original
        - $ref: '#/components/schemas/DecisionInputJSON'
    ChatPromptTokensDetails:
      type: object
      properties:
        text_tokens:
          type: integer
        audio_tokens:
          type: integer
        image_tokens:
          type: integer
        cached_read_tokens:
          type: integer
          description: >
            Tokens served from the prompt cache (cache hit). These tokens are
            already included in prompt_tokens and are billed at the reduced
            cache-read rate. Populated for all providers that support prompt
            caching (Anthropic, Bedrock, OpenAI, Gemini, xAI, etc.).
        cached_write_tokens:
          type: integer
          description: >
            Tokens written to the prompt cache on this request (cache creation /
            write). These tokens are already included in prompt_tokens and are
            billed at the cache-creation rate. Populated for providers that
            separately report cache write tokens (Anthropic, Bedrock).
    ChatCompletionTokensDetails:
      type: object
      properties:
        text_tokens:
          type: integer
        accepted_prediction_tokens:
          type: integer
        audio_tokens:
          type: integer
        citation_tokens:
          type: integer
        num_search_queries:
          type: integer
          deprecated: true
          description: >-
            Deprecated, use tool_usage.web_search.num_requests. Will be removed
            in 3.0.0.
        reasoning_tokens:
          type: integer
        image_tokens:
          type: integer
        rejected_prediction_tokens:
          type: integer
    BifrostCost:
      type: object
      description: Cost breakdown for the request
      properties:
        input_tokens_cost:
          type: number
        output_tokens_cost:
          type: number
        reasoning_tokens_cost:
          type: number
          description: Cost for reasoning/thinking tokens (reasoning models)
        citation_tokens_cost:
          type: number
          description: Cost for citation tokens
        search_queries_cost:
          type: number
          description: Cost for web search queries
        request_cost:
          type: number
        total_cost:
          type: number
    RoutingInfo:
      type: object
      description: >-
        Which provider, model and key handled the attempt that produced this
        response or error, and what the caller asked for. Also sent as
        x-bifrost-routing-info-* response headers.
      properties:
        provider:
          $ref: '#/components/schemas/ModelProvider'
          description: Provider that ran the attempt
        model:
          type: string
          description: Model sent to that provider
        key:
          type: string
          description: Name of the stored key used, never its ID or secret
        resolved_key_alias:
          $ref: '#/components/schemas/ResolvedKeyAlias'
        is_fallback:
          type: boolean
          description: >-
            True when a fallback served the request or returned the error.
            Omitted when false.
        primary_provider:
          $ref: '#/components/schemas/ModelProvider'
          description: The primary attempt's provider. Set only when a fallback ran.
        primary_model:
          type: string
          description: The primary attempt's model. Set only when a fallback ran.
        requested_provider:
          $ref: '#/components/schemas/ModelProvider'
          description: >-
            Provider the caller asked for, before routing rules, load balancing
            or session affinity changed it. Omitted when the caller sent a bare
            model.
        requested_model:
          type: string
          description: Model the caller asked for, before anything changed it
        server_side_fallback_model:
          type: string
          description: Model that answered when Anthropic switched models inside one call
    ModelProvider:
      type: string
      description: AI model provider identifier
      enum:
        - anthropic
        - azure
        - bedrock
        - bedrock_mantle
        - sagemaker
        - cerebras
        - cohere
        - deepseek
        - gemini
        - groq
        - mistral
        - ollama
        - opencode-go
        - opencode-zen
        - openai
        - parasail
        - perplexity
        - sgl
        - vertex
        - openrouter
        - elevenlabs
        - huggingface
        - nebius
        - xai
        - replicate
        - vllm
        - runway
        - runware
        - fireworks
        - sarvam
        - wafer
        - databricks
        - cloudflare
        - typesafe
        - minimax
        - byteplus
    BifrostCacheDebug:
      type: object
      properties:
        cache_hit:
          type: boolean
        cache_id:
          type: string
        hit_type:
          type: string
        requested_provider:
          type: string
        requested_model:
          type: string
        provider_used:
          type: string
        model_used:
          type: string
        input_tokens:
          type: integer
        threshold:
          type: number
        similarity:
          type: number
        cache_hit_latency:
          type: integer
          format: int64
          description: Milliseconds spent serving a cache hit. Set only on a hit.
    BifrostGuardrailMetadata:
      type: object
      description: Guardrail judge calls and matches recorded for a request.
      properties:
        judge_calls:
          type: array
          description: >-
            Billable guardrail judge invocations (LLM-backed guardrail
            providers)
          items:
            $ref: '#/components/schemas/BifrostGuardrailJudgeCall'
        detections:
          type: array
          description: >-
            Guardrail matches. Enforced rules record detect-only matches;
            output-monitor rules record every match they see, with the action
            enforcement would have taken.
          items:
            $ref: '#/components/schemas/BifrostGuardrailDetection'
    DecisionInputPart:
      description: >-
        One part of a message's content. User messages take text, JSON, and
        image parts; assistant messages take output text and refusals.
      oneOf:
        - $ref: '#/components/schemas/DecisionInputText'
        - $ref: '#/components/schemas/DecisionInputJSON'
        - $ref: '#/components/schemas/DecisionInputImage'
        - $ref: '#/components/schemas/DecisionInputImageAsset'
        - $ref: '#/components/schemas/DecisionOutputText'
        - $ref: '#/components/schemas/DecisionRefusal'
    DecisionToolOutput:
      description: A tool's output, as text or as text and image parts
      oneOf:
        - type: string
        - type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/DecisionInputText'
              - $ref: '#/components/schemas/DecisionInputImage'
    DecisionInputJSON:
      type: object
      description: Structured evidence, read as JSON
      required:
        - type
        - data
      properties:
        type:
          type: string
          enum:
            - input_json
        data:
          description: A JSON object, or an array
          oneOf:
            - type: object
              additionalProperties: true
            - type: array
              items: {}
    ResolvedKeyAlias:
      type: object
      description: Set only when the requested model matched a model alias on the key
      required:
        - model_id
      properties:
        model_id:
          type: string
          description: Model ID sent to the provider
        model_name:
          type: string
          description: Canonical model name, used for pricing and logs
        model_family:
          type: string
          description: Resolved model family
    BifrostGuardrailJudgeCall:
      type: object
      properties:
        phase:
          type: string
        rule_id:
          type: integer
        rule_name:
          type: string
        guardrail_name:
          type: string
        guardrail_provider:
          type: string
        action:
          type: string
        reason:
          type: string
        judge_provider:
          type: string
        judge_model:
          type: string
        judge_request_type:
          type: string
        prompt_tokens:
          type: integer
        prompt_tokens_details:
          type: object
          additionalProperties: true
        completion_tokens:
          type: integer
        completion_tokens_details:
          type: object
          additionalProperties: true
        total_tokens:
          type: integer
    BifrostGuardrailDetection:
      type: object
      properties:
        phase:
          type: string
          description: Phase the match was found in (input, output, or mcp-<source>)
        rule_id:
          type: integer
        rule_name:
          type: string
        guardrail_name:
          type: string
          description: Guardrail profile that matched
        guardrail_provider:
          type: string
          description: >-
            Guardrail provider type of the profile (for example regex or
            bedrock)
        reason:
          type: string
        assessments:
          type: array
          description: Sanitized policy categories; never the matched text
          items:
            type: string
        action:
          type: string
          enum:
            - detect
            - block
            - redact
            - transform
          description: >-
            What the guardrail did, or would have done when the rule only
            monitors
        enforced:
          type: boolean
          description: >-
            False when an output-monitor rule recorded the match without acting
            on it
    DecisionInputText:
      type: object
      required:
        - type
        - text
      properties:
        type:
          type: string
          enum:
            - input_text
        text:
          description: >-
            A string, or structured data that Typesafe-based models read as is
            and OpenAI receives as JSON text
          oneOf:
            - type: string
            - type: object
              additionalProperties: true
            - type: array
              items: {}
        prompt_cache_breakpoint:
          $ref: '#/components/schemas/DecisionPromptCacheBreakpoint'
    DecisionInputImage:
      type: object
      description: An inline image, read as evidence
      required:
        - type
        - image_url
      properties:
        type:
          type: string
          enum:
            - input_image
        image_url:
          type: string
          description: A base64 data URL or an HTTP(S) URL
        detail:
          type: string
          enum:
            - low
            - high
            - auto
            - original
          description: >-
            Image detail level, forwarded to models that read images (OpenAI's
            defaults to `auto`)
        prompt_cache_breakpoint:
          $ref: '#/components/schemas/DecisionPromptCacheBreakpoint'
    DecisionInputImageAsset:
      type: object
      description: >-
        Typesafe only. An image sent by reference, as one of Typesafe's
        `assets`, placed wherever its ID is written in the input, instructions,
        or criteria instead of as evidence itself. Other providers reject it.
      required:
        - type
        - id
      anyOf:
        - required:
            - data
        - required:
            - name
      properties:
        type:
          type: string
          enum:
            - input_image
        id:
          type: string
          description: The reference written where the image belongs
        data:
          type: string
          format: byte
          description: >-
            The image file, base64-encoded, without a `data:` prefix; its format
            is read from the bytes
        name:
          type: string
          description: >-
            In a multipart request, the name of the file part that holds the
            image. A JSON request cannot use it.
    DecisionOutputText:
      type: object
      description: An assistant message's text
      required:
        - type
        - text
      properties:
        type:
          type: string
          enum:
            - output_text
        text:
          type: string
    DecisionRefusal:
      type: object
      description: An assistant message's refusal
      required:
        - type
        - refusal
      properties:
        type:
          type: string
          enum:
            - refusal
        refusal:
          type: string
    DecisionPromptCacheBreakpoint:
      type: object
      description: >-
        Marks the end of a reusable prompt prefix on a text or image part of the
        input. Forwarded to OpenAI.
      properties:
        mode:
          type: string
          enum:
            - explicit
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >
        Bearer token authentication. Use your provider API key or Bifrost
        authentication token.

        Virtual keys (prefixed with `sk-bf-`) can also be passed here.
    BasicAuth:
      type: http
      scheme: basic
      description: >
        Basic authentication using the Bifrost admin username and password

        (`auth_config.admin_username` / `auth_config.admin_password`).

        Accepted on management APIs (`/api/*`, `/metrics`, `/ws`) only - the
        inference

        middleware never validates Basic credentials.
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: |
        API key authentication via the `x-api-key` header.
        Virtual keys (prefixed with `sk-bf-`) can also be passed here.
    VirtualKeyAuth:
      type: apiKey
      in: header
      name: x-bf-vk
      description: >
        Bifrost Virtual Key for governance, routing, and access control.
        Supported on all inference endpoints (`/v1/*`, `/openai/*`,
        `/anthropic/*`, `/bedrock/*`, `/cohere/*`, `/genai/*`, `/langchain/*`,
        `/litellm/*`, `/pydanticai/*`, `/mcp`), not on management APIs
        (`/api/*`) - with the single

        exception of the self-service `GET /api/governance/virtual-keys/quota`,
        where the virtual key is the credential.

        Example: `sk-bf-*` prefixed keys.

````

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