> ## 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.

# Create team (deprecated path)

> Creates a new team.

<Warning>
  This path is deprecated and will be removed in the following major release.
  Use `/api/governance/teams` instead.
</Warning>


## OpenAPI

````yaml /openapi/openapi.json post /api/teams
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: 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: 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: 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: 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
paths:
  /api/teams:
    post:
      tags:
        - Governance
      summary: Create team (deprecated path)
      description: Creates a new team.
      operationId: createTeamLegacy
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTeamRequest'
      responses:
        '200':
          description: Team created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TeamResponse'
        '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'
      deprecated: true
      security:
        - ManagementBearerAuth: []
components:
  schemas:
    CreateTeamRequest:
      type: object
      description: Create team request
      required:
        - name
      properties:
        name:
          type: string
        customer_id:
          type: string
        budgets:
          type: array
          description: Budgets to create for this team; reset durations must be unique
          items:
            $ref: '#/components/schemas/CreateBudgetRequest'
    TeamResponse:
      type: object
      description: Team operation response
      properties:
        message:
          type: string
        team:
          $ref: '#/components/schemas/Team'
    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'
    CreateBudgetRequest:
      type: object
      description: Create budget request
      required:
        - max_limit
        - reset_duration
      properties:
        max_limit:
          type: number
        reset_duration:
          type: string
        reset_config:
          type: object
          description: >
            Window settings the reset duration cannot express. Only valid when
            reset_duration is quarterly (`1Q`); the API rejects it on any other
            window.
          properties:
            quarter_start_month:
              type: integer
              minimum: 1
              maximum: 12
              description: >
                First month of Q1 as 1-12, so a fiscal year opening in April (4)
                gives Apr-Jun / Jul-Sep / Oct-Dec / Jan-Mar. Omitted means
                January. Quarter boundaries repeat every three months, so only
                the value modulo 3 changes the reset dates: January, April, July
                and October all reset on calendar quarters and differ only in
                which quarter is labelled Q1.
          additionalProperties: false
        calendar_aligned:
          type: boolean
          default: false
          description: >
            When true, usage resets at the start of each calendar period in UTC
            instead of on a rolling window from last reset. Only valid with
            reset durations that use day, week, month, quarter, or year suffixes
            (`d`, `w`, `M`, `Q`, `Y`). For example `1d` resets at midnight UTC;
            `1w` at Monday 00:00 UTC; `1M` on the first day of each month; `1Q`
            on the first day of the fiscal quarter; `1Y` on January 1. Sub-day
            durations (e.g. `1h`) cannot use calendar alignment.
    Team:
      type: object
      description: Team configuration
      properties:
        id:
          type: string
        name:
          type: string
        customer_id:
          type: string
        customer:
          $ref: '#/components/schemas/Customer'
        budgets:
          type: array
          description: Budgets owned by this team
          items:
            $ref: '#/components/schemas/Budget'
        virtual_keys:
          type:
            - array
            - 'null'
          description: >
            Virtual keys assigned to this team. This field may be omitted or
            returned as null in some responses (for example, when a team is
            embedded inside a virtual-key response) to avoid nested
            `virtual_keys` recursion.
          items:
            $ref: '#/components/schemas/VirtualKey'
        profile:
          type: object
          additionalProperties: true
        config:
          type: object
          additionalProperties: true
        claims:
          type: object
          additionalProperties: true
        config_hash:
          type:
            - string
            - 'null'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    ErrorField:
      type: object
      properties:
        type:
          type: string
        code:
          type: string
        message:
          type: string
        param:
          type: string
        event_id:
          type: string
    BifrostErrorExtraFields:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/ModelProvider'
        model_requested:
          type: string
        request_type:
          type: string
    Customer:
      type: object
      description: Customer configuration
      properties:
        id:
          type: string
        name:
          type: string
        budget_id:
          type: string
        budget:
          $ref: '#/components/schemas/Budget'
        teams:
          type: array
          items:
            $ref: '#/components/schemas/Team'
        virtual_keys:
          type:
            - array
            - 'null'
          description: >
            Virtual keys owned by this customer. Omitted or returned as null by
            the paginated list endpoint (`GET /api/governance/customers` with
            `limit`/`offset`/`search`), which reports `virtual_key_count`
            instead; use the single-customer endpoint to retrieve the keys
            themselves.
          items:
            $ref: '#/components/schemas/VirtualKey'
        virtual_key_count:
          type: integer
          description: Number of virtual keys owned by this customer. Always populated.
        config_hash:
          type: string
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    Budget:
      type: object
      description: Budget configuration
      required:
        - id
        - max_limit
        - reset_duration
        - last_reset
        - current_usage
        - config_hash
        - created_at
        - updated_at
      properties:
        id:
          type: string
        max_limit:
          type: number
          description: Maximum budget in dollars
        reset_duration:
          type: string
          description: Reset duration (e.g., "30s", "5m", "1h", "1d", "1w", "1M", "1Q")
        reset_config:
          type: object
          description: >
            Window settings the reset duration cannot express. Only valid when
            reset_duration is quarterly (`1Q`); the API rejects it on any other
            window.
          properties:
            quarter_start_month:
              type: integer
              minimum: 1
              maximum: 12
              description: >
                First month of Q1 as 1-12, so a fiscal year opening in April (4)
                gives Apr-Jun / Jul-Sep / Oct-Dec / Jan-Mar. Omitted means
                January. Quarter boundaries repeat every three months, so only
                the value modulo 3 changes the reset dates: January, April, July
                and October all reset on calendar quarters and differ only in
                which quarter is labelled Q1.
          additionalProperties: false
        calendar_aligned:
          type: boolean
          description: >-
            When true, resets align to calendar period boundaries in UTC (not
            rolling from last reset)
          default: false
        last_reset:
          type: string
          format: date-time
        current_usage:
          type: number
        override_amount:
          type: number
          description: >-
            Additional spend added on top of `max_limit` while the override is
            active. Omitted when no override is set.
        override_mode:
          type: string
          description: >
            How long the override stays active. `cycles` keeps it active for a
            finite number of

            reset windows; `forever` keeps it active until it is removed.
            Omitted when no override is set.
          enum:
            - cycles
            - forever
        override_cycles_remaining:
          type: integer
          description: >
            Reset windows the override is still valid for, including the current
            one. Positive only

            for `cycles` mode; recomputed from the original grant on every
            reset, never decremented in place.
        override_cycles_total:
          type: integer
          description: >-
            Number of reset windows the current `cycles` override was granted
            for. Immutable for the life of the grant.
        override_anchor_reset:
          type: string
          format: date-time
          description: >-
            Reset-window boundary at which the current `cycles` override was
            granted. Immutable for the life of the grant.
        team_id:
          type: string
          description: Team that owns this budget, when the budget is team-scoped
        virtual_key_id:
          type: string
          description: >-
            Virtual key that owns this budget, when the budget is
            virtual-key-scoped
        provider_config_id:
          type: integer
          description: >-
            Provider config that owns this budget, when the budget is
            provider-config-scoped
        config_hash:
          type:
            - string
            - 'null'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    VirtualKey:
      type: object
      description: Virtual key configuration
      required:
        - id
        - name
        - value
        - is_active
        - provider_configs
        - mcp_configs
        - calendar_aligned
        - config_hash
        - created_at
        - updated_at
      properties:
        id:
          type: string
        name:
          type: string
        value:
          type: string
        description:
          type: string
        is_active:
          type: boolean
        expires_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Expiry timestamp. Requests using this virtual key are rejected once
            it passes. Null or absent means the key never expires.
        provider_configs:
          type: array
          items:
            $ref: '#/components/schemas/VirtualKeyProviderConfig'
        mcp_configs:
          type: array
          items:
            $ref: '#/components/schemas/VirtualKeyMCPConfig'
        team_id:
          type: string
        customer_id:
          type: string
        rate_limit_id:
          type: string
        calendar_aligned:
          type: boolean
        team:
          $ref: '#/components/schemas/Team'
        customer:
          $ref: '#/components/schemas/Customer'
        budgets:
          type: array
          description: Budget quotas assigned directly to this virtual key
          items:
            $ref: '#/components/schemas/Budget'
        rate_limit:
          $ref: '#/components/schemas/RateLimit'
        config_hash:
          type: string
        created_by_user_id:
          type: string
          description: User that created this virtual key, when available
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    ModelProvider:
      type: string
      description: AI model provider identifier
      enum:
        - openai
        - azure
        - anthropic
        - bedrock
        - cohere
        - vertex
        - vllm
        - mistral
        - ollama
        - groq
        - sgl
        - parasail
        - perplexity
        - replicate
        - cerebras
        - deepseek
        - gemini
        - openrouter
        - elevenlabs
        - huggingface
        - nebius
        - xai
        - runway
        - fireworks
    VirtualKeyProviderConfig:
      type: object
      description: Provider configuration for a virtual key
      required:
        - id
        - virtual_key_id
        - provider
        - weight
        - allowed_models
        - blacklisted_models
        - allow_all_keys
        - keys
      properties:
        id:
          type: integer
        virtual_key_id:
          type: string
        provider:
          type: string
        weight:
          type:
            - number
            - 'null'
          description: >-
            Weight for provider load balancing. Null means excluded from
            weighted routing.
        allowed_models:
          type: array
          items:
            type: string
        blacklisted_models:
          type: array
          items:
            type: string
        allow_all_keys:
          type: boolean
        rate_limit_id:
          type: string
        budgets:
          type: array
          description: Budget quotas assigned to this provider config
          items:
            $ref: '#/components/schemas/Budget'
        rate_limit:
          $ref: '#/components/schemas/RateLimit'
        keys:
          type:
            - array
            - 'null'
          description: >
            Associated API keys for this provider config. **Always null in the
            quota endpoint** — keys are intentionally not loaded here to keep
            the response lean and avoid exposing sensitive credentials. Use the
            admin virtual-key API to inspect actual key assignments.
          items:
            $ref: '#/components/schemas/TableKey'
    VirtualKeyMCPConfig:
      type: object
      description: MCP configuration for a virtual key
      required:
        - id
        - virtual_key_id
        - mcp_client_id
        - mcp_client
        - tools_to_execute
      properties:
        id:
          type: integer
        virtual_key_id:
          type: string
        mcp_client_id:
          type: integer
        mcp_client:
          $ref: '#/components/schemas/MCPClientConfig'
        tools_to_execute:
          type: array
          items:
            type: string
    RateLimit:
      type: object
      description: Rate limit configuration
      required:
        - id
        - token_current_usage
        - token_last_reset
        - request_current_usage
        - request_last_reset
        - config_hash
        - created_at
        - updated_at
      properties:
        id:
          type: string
        token_max_limit:
          type: integer
          format: int64
        token_reset_duration:
          type: string
        token_current_usage:
          type: integer
          format: int64
        token_last_reset:
          type: string
          format: date-time
        request_max_limit:
          type:
            - integer
            - 'null'
          format: int64
        request_reset_duration:
          type:
            - string
            - 'null'
        request_current_usage:
          type: integer
          format: int64
        request_last_reset:
          type: string
          format: date-time
        config_hash:
          type:
            - string
            - 'null'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    TableKey:
      type: object
      description: Table key configuration
      properties:
        id:
          type: integer
        name:
          type: string
        provider_id:
          type: integer
        provider:
          type: string
        key_id:
          type: string
        value:
          type: object
          description: >
            A secret-capable value. Serialized as an object with the resolved
            `value` plus

            reference metadata; on input, a bare string is also accepted — plain
            text,

            `env.VAR_NAME`, or `vault.path/to/secret` (references resolve at
            runtime and

            only the reference is persisted).
          properties:
            value:
              type: string
              description: Resolved value (redacted in GET responses for secret fields)
            ref:
              type: string
              description: >-
                Source reference (`env.VAR_NAME` or `vault.path`); empty for
                plain-text values
            type:
              type: string
              enum:
                - plain_text
                - env
                - vault
              description: Source type of the value
        models:
          type: array
          items:
            type: string
        weight:
          type:
            - number
            - 'null'
        enabled:
          type:
            - boolean
            - 'null'
          default: true
        use_for_batch_api:
          type:
            - boolean
            - 'null'
          default: false
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        config_hash:
          type:
            - string
            - 'null'
        azure_endpoint:
          oneOf:
            - type: object
              description: >
                A secret-capable value. Serialized as an object with the
                resolved `value` plus

                reference metadata; on input, a bare string is also accepted —
                plain text,

                `env.VAR_NAME`, or `vault.path/to/secret` (references resolve at
                runtime and

                only the reference is persisted).
              properties:
                value:
                  type: string
                  description: Resolved value (redacted in GET responses for secret fields)
                ref:
                  type: string
                  description: >-
                    Source reference (`env.VAR_NAME` or `vault.path`); empty for
                    plain-text values
                type:
                  type: string
                  enum:
                    - plain_text
                    - env
                    - vault
                  description: Source type of the value
            - type: 'null'
        azure_client_id:
          oneOf:
            - type: object
              description: >
                A secret-capable value. Serialized as an object with the
                resolved `value` plus

                reference metadata; on input, a bare string is also accepted —
                plain text,

                `env.VAR_NAME`, or `vault.path/to/secret` (references resolve at
                runtime and

                only the reference is persisted).
              properties:
                value:
                  type: string
                  description: Resolved value (redacted in GET responses for secret fields)
                ref:
                  type: string
                  description: >-
                    Source reference (`env.VAR_NAME` or `vault.path`); empty for
                    plain-text values
                type:
                  type: string
                  enum:
                    - plain_text
                    - env
                    - vault
                  description: Source type of the value
            - type: 'null'
        azure_client_secret:
          oneOf:
            - type: object
              description: >
                A secret-capable value. Serialized as an object with the
                resolved `value` plus

                reference metadata; on input, a bare string is also accepted —
                plain text,

                `env.VAR_NAME`, or `vault.path/to/secret` (references resolve at
                runtime and

                only the reference is persisted).
              properties:
                value:
                  type: string
                  description: Resolved value (redacted in GET responses for secret fields)
                ref:
                  type: string
                  description: >-
                    Source reference (`env.VAR_NAME` or `vault.path`); empty for
                    plain-text values
                type:
                  type: string
                  enum:
                    - plain_text
                    - env
                    - vault
                  description: Source type of the value
            - type: 'null'
        azure_tenant_id:
          oneOf:
            - type: object
              description: >
                A secret-capable value. Serialized as an object with the
                resolved `value` plus

                reference metadata; on input, a bare string is also accepted —
                plain text,

                `env.VAR_NAME`, or `vault.path/to/secret` (references resolve at
                runtime and

                only the reference is persisted).
              properties:
                value:
                  type: string
                  description: Resolved value (redacted in GET responses for secret fields)
                ref:
                  type: string
                  description: >-
                    Source reference (`env.VAR_NAME` or `vault.path`); empty for
                    plain-text values
                type:
                  type: string
                  enum:
                    - plain_text
                    - env
                    - vault
                  description: Source type of the value
            - type: 'null'
        vertex_project_id:
          oneOf:
            - type: object
              description: >
                A secret-capable value. Serialized as an object with the
                resolved `value` plus

                reference metadata; on input, a bare string is also accepted —
                plain text,

                `env.VAR_NAME`, or `vault.path/to/secret` (references resolve at
                runtime and

                only the reference is persisted).
              properties:
                value:
                  type: string
                  description: Resolved value (redacted in GET responses for secret fields)
                ref:
                  type: string
                  description: >-
                    Source reference (`env.VAR_NAME` or `vault.path`); empty for
                    plain-text values
                type:
                  type: string
                  enum:
                    - plain_text
                    - env
                    - vault
                  description: Source type of the value
            - type: 'null'
        vertex_project_number:
          oneOf:
            - type: object
              description: >
                A secret-capable value. Serialized as an object with the
                resolved `value` plus

                reference metadata; on input, a bare string is also accepted —
                plain text,

                `env.VAR_NAME`, or `vault.path/to/secret` (references resolve at
                runtime and

                only the reference is persisted).
              properties:
                value:
                  type: string
                  description: Resolved value (redacted in GET responses for secret fields)
                ref:
                  type: string
                  description: >-
                    Source reference (`env.VAR_NAME` or `vault.path`); empty for
                    plain-text values
                type:
                  type: string
                  enum:
                    - plain_text
                    - env
                    - vault
                  description: Source type of the value
            - type: 'null'
        vertex_region:
          oneOf:
            - type: object
              description: >
                A secret-capable value. Serialized as an object with the
                resolved `value` plus

                reference metadata; on input, a bare string is also accepted —
                plain text,

                `env.VAR_NAME`, or `vault.path/to/secret` (references resolve at
                runtime and

                only the reference is persisted).
              properties:
                value:
                  type: string
                  description: Resolved value (redacted in GET responses for secret fields)
                ref:
                  type: string
                  description: >-
                    Source reference (`env.VAR_NAME` or `vault.path`); empty for
                    plain-text values
                type:
                  type: string
                  enum:
                    - plain_text
                    - env
                    - vault
                  description: Source type of the value
            - type: 'null'
        vertex_auth_credentials:
          oneOf:
            - type: object
              description: >
                A secret-capable value. Serialized as an object with the
                resolved `value` plus

                reference metadata; on input, a bare string is also accepted —
                plain text,

                `env.VAR_NAME`, or `vault.path/to/secret` (references resolve at
                runtime and

                only the reference is persisted).
              properties:
                value:
                  type: string
                  description: Resolved value (redacted in GET responses for secret fields)
                ref:
                  type: string
                  description: >-
                    Source reference (`env.VAR_NAME` or `vault.path`); empty for
                    plain-text values
                type:
                  type: string
                  enum:
                    - plain_text
                    - env
                    - vault
                  description: Source type of the value
            - type: 'null'
        bedrock_access_key:
          oneOf:
            - type: object
              description: >
                A secret-capable value. Serialized as an object with the
                resolved `value` plus

                reference metadata; on input, a bare string is also accepted —
                plain text,

                `env.VAR_NAME`, or `vault.path/to/secret` (references resolve at
                runtime and

                only the reference is persisted).
              properties:
                value:
                  type: string
                  description: Resolved value (redacted in GET responses for secret fields)
                ref:
                  type: string
                  description: >-
                    Source reference (`env.VAR_NAME` or `vault.path`); empty for
                    plain-text values
                type:
                  type: string
                  enum:
                    - plain_text
                    - env
                    - vault
                  description: Source type of the value
            - type: 'null'
        bedrock_secret_key:
          oneOf:
            - type: object
              description: >
                A secret-capable value. Serialized as an object with the
                resolved `value` plus

                reference metadata; on input, a bare string is also accepted —
                plain text,

                `env.VAR_NAME`, or `vault.path/to/secret` (references resolve at
                runtime and

                only the reference is persisted).
              properties:
                value:
                  type: string
                  description: Resolved value (redacted in GET responses for secret fields)
                ref:
                  type: string
                  description: >-
                    Source reference (`env.VAR_NAME` or `vault.path`); empty for
                    plain-text values
                type:
                  type: string
                  enum:
                    - plain_text
                    - env
                    - vault
                  description: Source type of the value
            - type: 'null'
        bedrock_session_token:
          oneOf:
            - type: object
              description: >
                A secret-capable value. Serialized as an object with the
                resolved `value` plus

                reference metadata; on input, a bare string is also accepted —
                plain text,

                `env.VAR_NAME`, or `vault.path/to/secret` (references resolve at
                runtime and

                only the reference is persisted).
              properties:
                value:
                  type: string
                  description: Resolved value (redacted in GET responses for secret fields)
                ref:
                  type: string
                  description: >-
                    Source reference (`env.VAR_NAME` or `vault.path`); empty for
                    plain-text values
                type:
                  type: string
                  enum:
                    - plain_text
                    - env
                    - vault
                  description: Source type of the value
            - type: 'null'
        bedrock_region:
          oneOf:
            - type: object
              description: >
                A secret-capable value. Serialized as an object with the
                resolved `value` plus

                reference metadata; on input, a bare string is also accepted —
                plain text,

                `env.VAR_NAME`, or `vault.path/to/secret` (references resolve at
                runtime and

                only the reference is persisted).
              properties:
                value:
                  type: string
                  description: Resolved value (redacted in GET responses for secret fields)
                ref:
                  type: string
                  description: >-
                    Source reference (`env.VAR_NAME` or `vault.path`); empty for
                    plain-text values
                type:
                  type: string
                  enum:
                    - plain_text
                    - env
                    - vault
                  description: Source type of the value
            - type: 'null'
        bedrock_arn:
          oneOf:
            - type: object
              description: >
                A secret-capable value. Serialized as an object with the
                resolved `value` plus

                reference metadata; on input, a bare string is also accepted —
                plain text,

                `env.VAR_NAME`, or `vault.path/to/secret` (references resolve at
                runtime and

                only the reference is persisted).
              properties:
                value:
                  type: string
                  description: Resolved value (redacted in GET responses for secret fields)
                ref:
                  type: string
                  description: >-
                    Source reference (`env.VAR_NAME` or `vault.path`); empty for
                    plain-text values
                type:
                  type: string
                  enum:
                    - plain_text
                    - env
                    - vault
                  description: Source type of the value
            - type: 'null'
    MCPClientConfig:
      type: object
      description: Full MCP client configuration (used in responses)
      properties:
        client_id:
          type: string
          description: Unique identifier for the MCP client
        name:
          type: string
          description: Display name for the MCP client
        is_code_mode_client:
          type: boolean
          description: Whether this client is available in code mode
        connection_type:
          type: string
          enum:
            - http
            - stdio
            - sse
            - inprocess
          description: Connection type for MCP client
        connection_string:
          type: string
          description: HTTP or SSE URL (required for HTTP or SSE connections)
        stdio_config:
          type: object
          description: STDIO configuration for MCP client
          properties:
            command:
              type: string
              description: Executable command to run
            args:
              type: array
              items:
                type: string
              description: Command line arguments
            envs:
              type: array
              items:
                type: string
              description: Environment variables required
        tls_config:
          type: object
          description: TLS configuration for HTTP and SSE connections.
          properties:
            insecure_skip_verify:
              type: boolean
              description: Disable TLS certificate verification. Development/testing only.
            ca_cert_pem:
              type: string
              description: >
                PEM-encoded CA certificate. Supports env.VAR_NAME syntax for
                input.

                Responses return a redacted placeholder rather than the raw PEM
                value.
        auth_type:
          type: string
          enum:
            - none
            - headers
            - oauth
            - per_user_oauth
            - per_user_headers
            - token_exchange
          description: Authentication type for the MCP connection
        oauth_config_id:
          type: string
          description: |
            OAuth config ID for OAuth authentication.
            References the oauth_configs table.
            Only set when auth_type is "oauth".
        headers:
          type: object
          additionalProperties:
            type: string
          description: |
            Custom headers to include in requests.
            Only used when auth_type is "headers".
        tools_to_execute:
          type: array
          items:
            type: string
          description: |
            Include-only list for tools.
            ["*"] => all tools are included
            [] => no tools are included
            ["tool1", "tool2"] => include only the specified tools
        tools_to_auto_execute:
          type: array
          items:
            type: string
          description: |
            List of tools that can be auto-executed without user approval.
            Must be a subset of tools_to_execute.
            ["*"] => all executable tools can be auto-executed
            [] => no tools are auto-executed
            ["tool1", "tool2"] => only specified tools can be auto-executed
        tool_pricing:
          type: object
          additionalProperties:
            type: number
            format: double
          description: |
            Per-tool cost in USD for execution.
            Key is the tool name, value is the cost per execution.
            Example: {"read_file": 0.001, "write_file": 0.002}
        allow_on_all_virtual_keys:
          type: boolean
          default: false
          description: >
            When true, this MCP client's tools are accessible to all virtual
            keys without requiring

            explicit per-key assignment. All tools are allowed by default. If a
            virtual key has an

            explicit MCP config for this client, that config takes precedence
            and overrides this behaviour.
        per_user_header_keys:
          type: array
          items:
            type: string
          description: >
            For `per_user_headers` clients only. The list of header names each
            end-user

            must supply via the inline-401 flow. Header values themselves are
            stored

            per-user in a separate table (surfaced on `/api/mcp/sessions`).
        token_exchange:
          type: object
          required:
            - audience
          properties:
            audience:
              type: string
              minLength: 1
              description: >-
                Resource identifier this server is scoped to at the identity
                provider (e.g. "api://jira-mcp")
            use_idp_credentials:
              type: boolean
              description: >
                When true, performs the exchange as the SSO login application
                itself

                instead of client_id/client_secret below, which are then
                ignored.

                Some providers require this: Microsoft Entra ID's on-behalf-of
                grant

                only accepts an assertion audienced to the exchanging
                application,

                and the SSO login flow always requests a token self-audienced to
                the

                SSO application, so a separate exchange application can never

                receive a usable one.
            client_id:
              type: string
              minLength: 1
              description: >
                The identity-provider application authorized to perform
                exchanges for

                this audience — typically a dedicated registration carrying the

                token-exchange (or on-behalf-of) grant, separate from the SSO
                login

                application. Required unless use_idp_credentials is true.
                Supports

                env.VAR_NAME and vault.path references. Redacted in API
                responses.
            client_secret:
              type: string
              description: >
                Secret for the exchange application; omit for public clients.
                Ignored

                when use_idp_credentials is true. Supports env.VAR_NAME and

                vault.path references. Redacted in API responses.
            scopes:
              type: array
              items:
                type: string
              description: >
                Optional scopes to request on the exchanged token. Include

                "offline_access" (where the identity provider supports it) so
                the

                retained admin discovery credential gets a refresh token and
                stays

                self-renewing.
            authorization_server_url:
              type: string
              description: >
                Overrides the Authorization Server the exchange request is sent
                to.

                Only needed when the audience is registered on a different

                Authorization Server than the one used for SSO login (e.g.
                Okta's

                per-resource Custom Authorization Servers). Leave unset to use
                the

                deployment's SSO login issuer, which is correct for providers
                with a

                single tenant-wide token endpoint (Entra, Auth0).
          allOf:
            - if:
                not:
                  properties:
                    use_idp_credentials:
                      const: true
                  required:
                    - use_idp_credentials
              then:
                required:
                  - client_id
                description: >
                  client_id is required unless use_idp_credentials is true, in
                  which

                  case the exchange uses the SSO login application's own
                  credentials

                  instead.
          additionalProperties: false
          description: >
            For `token_exchange` clients only. `client_id` and `client_secret`
            are

            redacted in this response.
        disabled:
          type: boolean
          default: false
          description: >
            Whether the client is intentionally disabled.

            When true, the client has no active connection or workers and its
            tools are not available for inference.
  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 username and password.
    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.
    ManagementBearerAuth:
      type: http
      scheme: bearer
      description: >
        Management API authentication for `/api/*` endpoints. Use the
        `Authorization` header with `Bearer <API key>`.

        Virtual keys, dashboard/user/session tokens, and `x-api-key` headers are
        not supported on management APIs.

````