---
title: "Import Llm Configs"
method: POST
path: "/workflows/v1/llm-configs/import"
tags: ["LLM Configs"]
---

# Import Llm Configs

`POST /workflows/v1/llm-configs/import`

## Request

- Base URL: `https://api-qa.interactly.ai`
- URL: `https://api-qa.interactly.ai/workflows/v1/llm-configs/import`
- Auth: HTTP bearer

Create LLM configurations from an exported bundle, all or nothing.

Every redacted secret must come back in ``secret_overrides``. Ids are kept when this team does not use
them yet, so workflows that attach the configs by id resolve after they are imported too; a name the
team already uses gets an ``(imported)`` suffix. Imported configs are never made the team default.

## Request body

- LLMConfigImportRequest
  - `bundle` LLMConfigBundle, required: Self-describing envelope for one or more exported LLM configs. ``configs`` holds plain dicts rather than ``LLMOrGroupConfig`` models. The union would accept ``<REDACTED>`` as a perfectly valid ``api_key``, so a config is only validated once the importer has put its secrets back.
    - `export_format` string: Export format identifier
    - `exported_at` string, date-time
    - `configs` object[], required: Each item has llm_config_id, name, description, is_default and config. No team or audit fields.
    - `redactions` LLMConfigRedaction[]: Fields whose values were replaced with the '<REDACTED>' sentinel
      - `path` string, required: Dotted path from the bundle root, e.g. 'configs.0.config.llms.1.api_key'
      - `config_name` string, nullable: Name of the exported config the secret belongs to
      - `reason` string, required: Why it was redacted, e.g. 'secret field'
    - `warnings` string[]: Non-fatal notes for whoever imports the bundle
  - `secret_overrides` object: Dotted path -> value for each redacted field being supplied again, keyed exactly as the bundle's redactions list them, e.g. {'configs.0.config.api_key': 'sk-...'}

## Response `200`

Successful Response

- LLMConfigImportResponse
  - `imported` ImportedLLMConfig[]
    - `source_llm_config_id` string, nullable: The config's id in the exporting team
    - `llm_config` LLMConfigModel, required: Stores a named, reusable LLM configuration that lives independently of workflows and nodes. A workflow or node attaches it via ``attachable_llm_config_id`` (which holds this model's ``llm_config_id``) and the concrete ``config`` is resolved into the workflow at hydration time.
      - `team_id` string, nullable: ID of the team that owns this edge
      - `created_by` string, nullable: ID of the user who created this edge
      - `updated_by` string, nullable: ID of the user who last updated this edge
      - `created_at` string, date-time
      - `updated_at` string, date-time
      - `_id` string
      - `llm_config_id` string
      - `name` string, required: Display name of the configuration
      - `description` string, nullable: Optional textual description
      - `config` union, required: The actual configuration details
        - AzureOpenAILLMConfigOutput
          - `logical_id` string, nullable: Unique identifier for the LLM configuration
          - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
          - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
          - `provider` 'default_provider' | 'azure_openai' | 'openai' | 'google' | 'anthropic' | 'bedrock' | 'xai' | 'gemma' | 'glm' | 'deepseek' | 'custom', nullable: The selected Large Language Model provider from the available options.
          - `streaming` boolean: Whether to enable streaming for the LLM response.
          - `max_retries` integer, nullable: Maximum number of retries for the LLM request in case of failure.
          - `max_parse_retries` integer, nullable: Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.
          - `max_tokens` integer, nullable: Maximum number of tokens to generate in the response.
          - `temperature` number, nullable: Controls the randomness of the model's output. Lower values make the output more deterministic.
          - `request_timeout_ms` integer, nullable: Timeout for the request in milliseconds.
          - `seed` integer, nullable: Seed for random number generation to ensure reproducibility.
          - `model_kwargs` object: Additional keyword arguments to pass to the LLM provider's API.
          - `api_key` string, nullable: API key to access the LLM provider endpoint. Admins can see the stored key here; for every other role it is stored securely and never shown back, and leaving it blank keeps the existing key in use. Because an admin is shown the real key, an admin who clears this field removes the stored key.
          - `do_not_split_sentences` boolean: Whether to avoid splitting sentences in the LLM response.
          - `truncated_max_recent_messages` integer, nullable: Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used.
          - `model` 'gpt-5-chat' | 'gpt-5-mini' | 'gpt-5-nano' | 'gpt-4.1-nano' | 'gpt-4.1-mini' | 'gpt-4.1'
          - `type` 'azure_openai_llm': Differentiator field that helps in identifying this particular type of config when serializing and deserializing
          - `endpoint` string, nullable: Endpoint URL for Azure OpenAI API requests. Automatically inferred from env var `AZURE_OPENAI_ENDPOINT` if not provided.
          - `api_version` string, nullable: Azure OpenAI API version. Falls back to `OPENAI_API_VERSION` env var if not provided.
          - `reasoning_effort` string, nullable: Reasoning effort level for GPT-5-* models. Options are 'low', 'medium', 'high'.
        - OpenAILLMConfigOutput
          - `logical_id` string, nullable: Unique identifier for the LLM configuration
          - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
          - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
          - `provider` 'default_provider' | 'azure_openai' | 'openai' | 'google' | 'anthropic' | 'bedrock' | 'xai' | 'gemma' | 'glm' | 'deepseek' | 'custom', nullable: The selected Large Language Model provider from the available options.
          - `streaming` boolean: Whether to enable streaming for the LLM response.
          - `max_retries` integer, nullable: Maximum number of retries for the LLM request in case of failure.
          - `max_parse_retries` integer, nullable: Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.
          - `max_tokens` integer, nullable: Maximum number of tokens to generate in the response.
          - `temperature` number, nullable: Controls the randomness of the model's output. Lower values make the output more deterministic.
          - `request_timeout_ms` integer, nullable: Timeout for the request in milliseconds.
          - `seed` integer, nullable: Seed for random number generation to ensure reproducibility.
          - `model_kwargs` object: Additional keyword arguments to pass to the LLM provider's API.
          - `api_key` string, nullable: API key to access the LLM provider endpoint. Admins can see the stored key here; for every other role it is stored securely and never shown back, and leaving it blank keeps the existing key in use. Because an admin is shown the real key, an admin who clears this field removes the stored key.
          - `do_not_split_sentences` boolean: Whether to avoid splitting sentences in the LLM response.
          - `truncated_max_recent_messages` integer, nullable: Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used.
          - `model` 'gpt-5.6-sol' | 'gpt-5.6-terra' | 'gpt-5.6-luna' | 'gpt-5.4' | 'gpt-5.4-mini' | 'gpt-5.4-nano' | 'gpt-5.2' | 'gpt-5.1' | 'gpt-5-nano' | 'gpt-5-mini' | 'gpt-5' | 'gpt-5.4-pro' | 'gpt-5.2-pro' | 'gpt-4.1-nano' | 'gpt-4.1-mini' | 'gpt-4.1' | 'gpt-4' | 'gpt-4o-mini' | 'gpt-4o' | 'gpt-audio-1.5' | 'gpt-audio-mini' | 'gpt-3.5-turbo'
          - `type` 'openai_llm': Differentiator field that helps in identifying this particular type of config when serializing and deserializing
          - `base_url` string, nullable: Base URL path for OpenAI API requests, leave blank if not using a proxy or service emulator.
          - `organization` string, nullable: Organization ID for OpenAI API requests, Automatically inferred from env var `OPENAI_ORG_ID` if not provided.
          - `reasoning_effort` string, nullable: Reasoning effort level for GPT-5-* models. Options are 'minimal', 'low', 'medium', 'high'.
        - GoogleLLMConfigOutput
          - `logical_id` string, nullable: Unique identifier for the LLM configuration
          - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
          - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
          - `provider` 'default_provider' | 'azure_openai' | 'openai' | 'google' | 'anthropic' | 'bedrock' | 'xai' | 'gemma' | 'glm' | 'deepseek' | 'custom', nullable: The selected Large Language Model provider from the available options.
          - `streaming` boolean: Whether to enable streaming for the LLM response.
          - `max_retries` integer, nullable: Maximum number of retries for the LLM request in case of failure.
          - `max_parse_retries` integer, nullable: Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.
          - `max_tokens` integer, nullable: Maximum number of tokens to generate in the response.
          - `temperature` number, nullable: Controls the randomness of the model's output. Lower values make the output more deterministic.
          - `request_timeout_ms` integer, nullable: Timeout for the request in milliseconds.
          - `seed` integer, nullable: Seed for random number generation to ensure reproducibility.
          - `model_kwargs` object: Additional keyword arguments to pass to the LLM provider's API.
          - `api_key` string, nullable: API key to access the LLM provider endpoint. Admins can see the stored key here; for every other role it is stored securely and never shown back, and leaving it blank keeps the existing key in use. Because an admin is shown the real key, an admin who clears this field removes the stored key.
          - `do_not_split_sentences` boolean: Whether to avoid splitting sentences in the LLM response.
          - `truncated_max_recent_messages` integer, nullable: Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used.
          - `model` 'gemini-flash-latest' | 'gemini-flash-lite-latest' | 'gemini-3.8-flash' | 'gemini-3.7-flash' | 'gemini-3.6-flash' | 'gemini-3.1-pro-preview' | 'gemini-3.5-flash' | 'gemini-3.5-flash-lite' | 'gemini-3.1-flash-lite' | 'gemini-3-flash-preview' | 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-flash-lite'
          - `type` 'google_llm': Differentiator field that helps in identifying this particular type of config when serializing and deserializing
          - `thinking_budget` integer, nullable: Indicates the thinking budget in tokens. By default, it is set to 0.
          - `thinking_level` 'MINIMAL' | 'LOW' | 'MEDIUM' | 'HIGH': Every level any Gemini model accepts, as an enum so the editors render a select. Which of these a *given* model offers is per-model data — `supported_levels` — and narrower than this union: MINIMAL is Flash-only. This is the type a config field is annotated with, so the generated JSON schema carries the choices and the workflow editor draws a dropdown instead of a free-text box that only rewards knowing the four magic words. The tables below stay plain strings deliberately. They are serialised into the static-config payload the dashboard reads, and enum members do not survive that trip as cleanly as `str` does; `TestTheLevelEnumMatchesTheTables` is what keeps the two in step.
          - `backend` 'ai_studio' | 'vertex', nullable: Which endpoint serves a Google model. Left unset, the runtime keeps its original rule: a team-scoped Gemini key means the public Gemini API, and its absence means Vertex. That rule cannot express "Vertex regardless", because the team's key is stamped onto the config before the runtime ever sees it — so a configuration that deliberately wants Vertex silently gets AI Studio instead, on the team's key and the team's bill. Naming the backend is how a config says which one it meant.
        - AnthropicLLMConfigOutput
          - `logical_id` string, nullable: Unique identifier for the LLM configuration
          - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
          - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
          - `provider` 'default_provider' | 'azure_openai' | 'openai' | 'google' | 'anthropic' | 'bedrock' | 'xai' | 'gemma' | 'glm' | 'deepseek' | 'custom', nullable: The selected Large Language Model provider from the available options.
          - `streaming` boolean: Whether to enable streaming for the LLM response.
          - `max_retries` integer, nullable: Maximum number of retries for the LLM request in case of failure.
          - `max_parse_retries` integer, nullable: Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.
          - `max_tokens` integer, nullable: Maximum number of tokens to generate in the response.
          - `temperature` number, nullable: Controls the randomness of the model's output. Lower values make the output more deterministic.
          - `request_timeout_ms` integer, nullable: Timeout for the request in milliseconds.
          - `seed` integer, nullable: Seed for random number generation to ensure reproducibility.
          - `model_kwargs` object: Additional keyword arguments to pass to the LLM provider's API.
          - `api_key` string, nullable: API key to access the LLM provider endpoint. Admins can see the stored key here; for every other role it is stored securely and never shown back, and leaving it blank keeps the existing key in use. Because an admin is shown the real key, an admin who clears this field removes the stored key.
          - `do_not_split_sentences` boolean: Whether to avoid splitting sentences in the LLM response.
          - `truncated_max_recent_messages` integer, nullable: Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used.
          - `model` 'claude-opus-5' | 'claude-sonnet-5' | 'claude-fable-5' | 'claude-opus-4-8' | 'claude-opus-4-7' | 'claude-opus-4-6' | 'claude-opus-4-5-20251101' | 'claude-sonnet-4-6' | 'claude-sonnet-4-5-20250929' | 'claude-haiku-4-5' | 'claude-haiku-4-5-20251001'
          - `type` 'anthropic_llm': Differentiator field that helps in identifying this particular type of config when serializing and deserializing
          - `thinking_budget` integer, nullable: Token budget for Claude's extended thinking feature. Set to 0 to disable. When enabled, Claude will show its reasoning process before providing a final answer.
          - `backend` 'direct' | 'vertex': Which endpoint serves an Anthropic model.
          - `vertex_project` string, nullable: Google Cloud project that serves the model when the backend is 'vertex'. Leave blank to use the platform default (`GCP_VERTEX_PROJECT` env var).
          - `vertex_location` string, nullable: Vertex region used when the backend is 'vertex'. Leave blank for the platform default (`GCP_VERTEX_LOCATION`, itself defaulting to 'global'). The global endpoint is supported by every Anthropic model in Model Garden; a pinned region (e.g. 'us-east5') restricts inference geography but is not offered for every model.
        - BedrockLLMConfigOutput
          - `logical_id` string, nullable: Unique identifier for the LLM configuration
          - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
          - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
          - `provider` 'default_provider' | 'azure_openai' | 'openai' | 'google' | 'anthropic' | 'bedrock' | 'xai' | 'gemma' | 'glm' | 'deepseek' | 'custom', nullable: The selected Large Language Model provider from the available options.
          - `streaming` boolean: Whether to enable streaming for the LLM response.
          - `max_retries` integer, nullable: Maximum number of retries for the LLM request in case of failure.
          - `max_parse_retries` integer, nullable: Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.
          - `max_tokens` integer, nullable: Maximum number of tokens to generate in the response.
          - `temperature` number, nullable: Controls the randomness of the model's output. Lower values make the output more deterministic.
          - `request_timeout_ms` integer, nullable: Timeout for the request in milliseconds.
          - `seed` integer, nullable: Seed for random number generation to ensure reproducibility.
          - `model_kwargs` object: Additional keyword arguments to pass to the LLM provider's API.
          - `api_key` string, nullable: Amazon Bedrock long-term API key (bearer token). If set, it is used for authentication and the access-key fields below are ignored. Leave empty to authenticate with an access-key pair or the default AWS credential chain (IAM role).
          - `do_not_split_sentences` boolean: Whether to avoid splitting sentences in the LLM response.
          - `truncated_max_recent_messages` integer, nullable: Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used.
          - `model` 'zai.glm-5' | 'zai.glm-4.7' | 'zai.glm-4.7-flash' | 'moonshotai.kimi-k2.5' | 'moonshot.kimi-k2-thinking' | 'qwen.qwen3-vl-235b-a22b' | 'qwen.qwen3-32b-v1:0'
          - `type` 'bedrock_llm': Differentiator field that helps in identifying this particular type of config when serializing and deserializing
          - `region` string, nullable: AWS region the Bedrock model is invoked in. Defaults to us-east-1 if not provided.
          - `aws_access_key_id` string, nullable: AWS access key ID for Bedrock. Leave empty to use the platform default (`BEDROCK_ACCESS_KEY` env var, then the AWS credential chain).
          - `aws_secret_access_key` string, nullable: AWS secret access key for Bedrock. Leave empty to use the platform default (`BEDROCK_SECRET_KEY` env var, then the AWS credential chain).
        - XAILLMConfigOutput: xAI's Grok, served through Google Vertex AI Model Garden. Vertex fronts Grok with an OpenAI-compatible endpoint rather than xAI's own API shape, so the runtime drives it with ``ChatOpenAI`` (see ``XAIVertexLLMRuntime``). Authentication is the platform's Google Cloud service account -- there is no xAI API key involved, and the usage is billed to the Google Cloud project.
          - `logical_id` string, nullable: Unique identifier for the LLM configuration
          - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
          - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
          - `provider` 'default_provider' | 'azure_openai' | 'openai' | 'google' | 'anthropic' | 'bedrock' | 'xai' | 'gemma' | 'glm' | 'deepseek' | 'custom', nullable: The selected Large Language Model provider from the available options.
          - `streaming` boolean: Whether to enable streaming for the LLM response.
          - `max_retries` integer, nullable: Maximum number of retries for the LLM request in case of failure.
          - `max_parse_retries` integer, nullable: Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.
          - `max_tokens` integer, nullable: Maximum number of tokens to generate in the response.
          - `temperature` number, nullable: Controls the randomness of the model's output. Lower values make the output more deterministic.
          - `request_timeout_ms` integer, nullable: Timeout for the request in milliseconds.
          - `seed` integer, nullable: Seed for random number generation to ensure reproducibility.
          - `model_kwargs` object: Additional keyword arguments to pass to the LLM provider's API.
          - `api_key` string, nullable: API key to access the LLM provider endpoint. Admins can see the stored key here; for every other role it is stored securely and never shown back, and leaving it blank keeps the existing key in use. Because an admin is shown the real key, an admin who clears this field removes the stored key.
          - `do_not_split_sentences` boolean: Whether to avoid splitting sentences in the LLM response.
          - `truncated_max_recent_messages` integer, nullable: Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used.
          - `model` 'grok-4.6' | 'grok-4.3' | 'grok-4.20-reasoning' | 'grok-4.20-non-reasoning' | 'grok-4.1-fast-reasoning' | 'grok-4.1-fast-non-reasoning'
          - `type` 'xai_llm': Differentiator field that helps in identifying this particular type of config when serializing and deserializing
          - `vertex_project` string, nullable: Google Cloud project that serves the model. Leave blank to use the platform default (`GCP_VERTEX_PROJECT` env var).
          - `vertex_location` string, nullable: Vertex region that serves the model. Grok is served only by Vertex's global endpoint, so this should be left blank (or set to 'global'); any other region is rejected.
        - GemmaLLMConfigOutput: Google's Gemma, served by Vertex AI as a fully managed serverless API. Open-weights, but reached exactly like the Vertex partner models: the same OpenAI-compatible endpoint and the same Google Cloud service-account auth (see ``GemmaVertexLLMRuntime``). There is no Gemma API key -- usage is billed to the Google Cloud project.
          - `logical_id` string, nullable: Unique identifier for the LLM configuration
          - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
          - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
          - `provider` 'default_provider' | 'azure_openai' | 'openai' | 'google' | 'anthropic' | 'bedrock' | 'xai' | 'gemma' | 'glm' | 'deepseek' | 'custom', nullable: The selected Large Language Model provider from the available options.
          - `streaming` boolean: Whether to enable streaming for the LLM response.
          - `max_retries` integer, nullable: Maximum number of retries for the LLM request in case of failure.
          - `max_parse_retries` integer, nullable: Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.
          - `max_tokens` integer, nullable: Maximum number of tokens to generate in the response.
          - `temperature` number, nullable: Controls the randomness of the model's output. Lower values make the output more deterministic.
          - `request_timeout_ms` integer, nullable: Timeout for the request in milliseconds.
          - `seed` integer, nullable: Seed for random number generation to ensure reproducibility.
          - `model_kwargs` object: Additional keyword arguments to pass to the LLM provider's API.
          - `api_key` string, nullable: API key to access the LLM provider endpoint. Admins can see the stored key here; for every other role it is stored securely and never shown back, and leaving it blank keeps the existing key in use. Because an admin is shown the real key, an admin who clears this field removes the stored key.
          - `do_not_split_sentences` boolean: Whether to avoid splitting sentences in the LLM response.
          - `truncated_max_recent_messages` integer, nullable: Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used.
          - `model` 'gemma-4-26b-a4b-it-maas'
          - `type` 'gemma_llm': Differentiator field that helps in identifying this particular type of config when serializing and deserializing
          - `enable_thinking` boolean: Whether Gemma should reason step by step before answering. Off by default: thinking is billed as output tokens and adds noticeable latency -- a live comparison measured 13 output tokens with it off against 198 with it on for the same question -- which on a voice call the caller hears as silence. Turn it on for nodes that do harder reasoning and are not latency-sensitive. The reasoning itself is returned separately and never appears in the spoken or displayed answer.
          - `vertex_project` string, nullable: Google Cloud project that serves the model. Leave blank to use the platform default (`GCP_VERTEX_PROJECT` env var).
          - `vertex_location` string, nullable: Vertex region that serves the model. Gemma is served only by Vertex's global endpoint, so this should be left blank (or set to 'global'); any other region is rejected.
        - GLMLLMConfigOutput: Z.ai's GLM, served by Vertex AI as a fully managed serverless API. Open-weights, reached exactly like the other Vertex serverless and partner models: the same OpenAI-compatible endpoint and the same Google Cloud service-account auth (see ``GLMVertexLLMRuntime``). There is no Z.ai API key -- usage is billed to the Google Cloud project.
          - `logical_id` string, nullable: Unique identifier for the LLM configuration
          - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
          - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
          - `provider` 'default_provider' | 'azure_openai' | 'openai' | 'google' | 'anthropic' | 'bedrock' | 'xai' | 'gemma' | 'glm' | 'deepseek' | 'custom', nullable: The selected Large Language Model provider from the available options.
          - `streaming` boolean: Whether to enable streaming for the LLM response.
          - `max_retries` integer, nullable: Maximum number of retries for the LLM request in case of failure.
          - `max_parse_retries` integer, nullable: Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.
          - `max_tokens` integer, nullable: Maximum number of tokens to generate in the response.
          - `temperature` number, nullable: Controls the randomness of the model's output. Lower values make the output more deterministic.
          - `request_timeout_ms` integer, nullable: Timeout for the request in milliseconds.
          - `seed` integer, nullable: Seed for random number generation to ensure reproducibility.
          - `model_kwargs` object: Additional keyword arguments to pass to the LLM provider's API.
          - `api_key` string, nullable: API key to access the LLM provider endpoint. Admins can see the stored key here; for every other role it is stored securely and never shown back, and leaving it blank keeps the existing key in use. Because an admin is shown the real key, an admin who clears this field removes the stored key.
          - `do_not_split_sentences` boolean: Whether to avoid splitting sentences in the LLM response.
          - `truncated_max_recent_messages` integer, nullable: Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used.
          - `model` 'glm-5.2-maas' | 'glm-5-maas' | 'glm-4.7-maas'
          - `type` 'glm_llm': Differentiator field that helps in identifying this particular type of config when serializing and deserializing
          - `enable_thinking` boolean: Whether GLM should reason step by step before answering. Off by default, which is a change from the model's own behaviour and deliberate: with thinking on, GLM spends its whole output budget reasoning before it writes anything, so a node with a modest Max Tokens returns an empty answer (measured empty at both 64 and 256 tokens). Thinking also costs roughly 17x the output tokens on a simple question, which on a voice call the caller hears as silence. Turn it on for harder reasoning, together with a Max Tokens of at least ~1000. The reasoning itself is returned separately and never appears in the spoken or displayed answer.
          - `vertex_project` string, nullable: Google Cloud project that serves the model. Leave blank to use the platform default (`GCP_VERTEX_PROJECT` env var).
          - `vertex_location` string, nullable: Vertex region that serves the model. GLM is served only by Vertex's global endpoint, so this should be left blank (or set to 'global'); any other region is rejected.
        - DeepSeekLLMConfigOutput: DeepSeek, served by Vertex AI as a fully managed serverless API. Open-weights, reached exactly like the other Vertex serverless and partner models: the same OpenAI-compatible endpoint and the same Google Cloud service-account auth (see ``DeepSeekVertexLLMRuntime``). There is no DeepSeek API key -- usage is billed to the Google Cloud project. Note this is a different route from the DeepSeek V3 already wired into ``conversation_agent_service``, which goes to Fireworks. The two are independent.
          - `logical_id` string, nullable: Unique identifier for the LLM configuration
          - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
          - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
          - `provider` 'default_provider' | 'azure_openai' | 'openai' | 'google' | 'anthropic' | 'bedrock' | 'xai' | 'gemma' | 'glm' | 'deepseek' | 'custom', nullable: The selected Large Language Model provider from the available options.
          - `streaming` boolean: Whether to enable streaming for the LLM response.
          - `max_retries` integer, nullable: Maximum number of retries for the LLM request in case of failure.
          - `max_parse_retries` integer, nullable: Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.
          - `max_tokens` integer, nullable: Maximum number of tokens to generate in the response.
          - `temperature` number, nullable: Controls the randomness of the model's output. Lower values make the output more deterministic.
          - `request_timeout_ms` integer, nullable: Timeout for the request in milliseconds.
          - `seed` integer, nullable: Seed for random number generation to ensure reproducibility.
          - `model_kwargs` object: Additional keyword arguments to pass to the LLM provider's API.
          - `api_key` string, nullable: API key to access the LLM provider endpoint. Admins can see the stored key here; for every other role it is stored securely and never shown back, and leaving it blank keeps the existing key in use. Because an admin is shown the real key, an admin who clears this field removes the stored key.
          - `do_not_split_sentences` boolean: Whether to avoid splitting sentences in the LLM response.
          - `truncated_max_recent_messages` integer, nullable: Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used.
          - `model` 'deepseek-v3.2-maas'
          - `type` 'deepseek_llm': Differentiator field that helps in identifying this particular type of config when serializing and deserializing
          - `enable_thinking` boolean: Whether DeepSeek should reason step by step before answering. Off by default, which is also the model's own default. Thinking costs roughly 13x the output tokens on a simple question, which on a voice call the caller hears as silence, and it needs room to work: with thinking on and a Max Tokens of 64 the answer comes back empty, so allow at least a few hundred. The reasoning itself is returned separately and never appears in the spoken or displayed answer.
          - `vertex_project` string, nullable: Google Cloud project that serves the model. Leave blank to use the platform default (`GCP_VERTEX_PROJECT` env var).
          - `vertex_location` string, nullable: Vertex region that serves the model. DeepSeek is served only by Vertex's global endpoint, so this should be left blank (or set to 'global'); any other region is rejected.
        - CustomLLMConfigOutput
          - `logical_id` string, nullable: Unique identifier for the LLM configuration
          - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
          - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
          - `provider` 'default_provider' | 'azure_openai' | 'openai' | 'google' | 'anthropic' | 'bedrock' | 'xai' | 'gemma' | 'glm' | 'deepseek' | 'custom', nullable: The selected Large Language Model provider from the available options.
          - `streaming` boolean: Whether to enable streaming for the LLM response.
          - `max_retries` integer, nullable: Maximum number of retries for the LLM request in case of failure.
          - `max_parse_retries` integer, nullable: Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.
          - `max_tokens` integer, nullable: Maximum number of tokens to generate in the response.
          - `temperature` number, nullable: Controls the randomness of the model's output. Lower values make the output more deterministic.
          - `request_timeout_ms` integer, nullable: Timeout for the request in milliseconds.
          - `seed` integer, nullable: Seed for random number generation to ensure reproducibility.
          - `model_kwargs` object: Additional keyword arguments to pass to the LLM provider's API.
          - `api_key` string, nullable: API key to access the LLM provider endpoint. Admins can see the stored key here; for every other role it is stored securely and never shown back, and leaving it blank keeps the existing key in use. Because an admin is shown the real key, an admin who clears this field removes the stored key.
          - `do_not_split_sentences` boolean: Whether to avoid splitting sentences in the LLM response.
          - `truncated_max_recent_messages` integer, nullable: Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used.
          - `model` string, nullable: Name of the model served behind the custom LLM gateway (free-form string, e.g. 'gpt-4.1-mini', 'llama-3-70b', 'mistral-large').
          - `reasoning_effort` string, nullable: Reasoning effort level for GPT-5-* models. Options are 'minimal', 'low', 'medium', 'high'.
          - `type` 'custom_llm': Differentiator field that helps in identifying this particular type of config when serializing and deserializing
          - `base_url` string, nullable: Base URL of the custom OpenAI-compatible LLM gateway (e.g. 'http://api.interactly.ai/workflows/llm-proxy').
          - `default_headers` object, nullable: Optional HTTP headers to include in every request to the gateway (e.g. routing keys, tenant IDs).
          - `rewrite_base_url` boolean: When True, uses an httpx event hook to rewrite every request URL to the exact base_url. Use this for gateways that don't accept the /chat/completions suffix the SDK appends.
          - `verify_ssl` boolean: Whether to verify SSL certificates. Set to False for gateways with self-signed certificates.
          - `response_unwrap_key` string, nullable: When set, the gateway response JSON is expected to wrap the standard OpenAI response inside this key (e.g. 'result'). The runtime will extract the nested object before passing it to the OpenAI SDK. Leave empty for gateways that already return standard format.
          - `integration_auth` IntegrationAuthConfig: Configuration for integration-backed bearer-token authentication. Provider-agnostic: any integration that exposes an OAuth2 client-credentials token endpoint (Okta, Athena, ECW, ...) can be referenced here. The runtime only needs the integration ID – the integrations service resolves the provider and returns the bearer token.
            - `integration_id` string, nullable: ID of an integration to use for bearer-token authentication. When set, the runtime fetches a cached OAuth token from this integration and injects it as the Authorization header. Ignored when api_key or an Authorization default_header is already provided.
          - `use_responses_api` boolean: Whether to use the GPT 5.x+ style Responses API, instead of Chat Completions API for this Custom LLM. See https://developers.openai.com/api/reference/resources/responses
          - `supports_audio_input` boolean: Whether the model behind this gateway accepts audio input. Off by default: audio sent to a model that cannot take it fails the request. Chat Completions only; ignored with use_responses_api.
        - WorkflowDefaultLLMConfigOutput
          - `logical_id` string, nullable: Unique identifier for the LLM configuration
          - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
          - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
          - `provider` 'default_provider' | 'azure_openai' | 'openai' | 'google' | 'anthropic' | 'bedrock' | 'xai' | 'gemma' | 'glm' | 'deepseek' | 'custom', nullable: The selected Large Language Model provider from the available options.
          - `streaming` boolean: Whether to enable streaming for the LLM response.
          - `max_retries` integer, nullable: Maximum number of retries for the LLM request in case of failure.
          - `max_parse_retries` integer, nullable: Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.
          - `max_tokens` integer, nullable: Maximum number of tokens to generate in the response.
          - `temperature` number, nullable: Controls the randomness of the model's output. Lower values make the output more deterministic.
          - `request_timeout_ms` integer, nullable: Timeout for the request in milliseconds.
          - `seed` integer, nullable: Seed for random number generation to ensure reproducibility.
          - `model_kwargs` object: Additional keyword arguments to pass to the LLM provider's API.
          - `api_key` string, nullable: API key to access the LLM provider endpoint. Admins can see the stored key here; for every other role it is stored securely and never shown back, and leaving it blank keeps the existing key in use. Because an admin is shown the real key, an admin who clears this field removes the stored key.
          - `do_not_split_sentences` boolean: Whether to avoid splitting sentences in the LLM response.
          - `truncated_max_recent_messages` integer, nullable: Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used.
          - `type` 'global_default_llm': Differentiator field that helps in identifying this particular type of config when serializing and deserializing
        - NoLLMConfigOutput
          - `logical_id` string, nullable: Unique identifier for the LLM configuration
          - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
          - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
          - `provider` 'default_provider' | 'azure_openai' | 'openai' | 'google' | 'anthropic' | 'bedrock' | 'xai' | 'gemma' | 'glm' | 'deepseek' | 'custom', nullable: The selected Large Language Model provider from the available options.
          - `streaming` boolean: Whether to enable streaming for the LLM response.
          - `max_retries` integer, nullable: Maximum number of retries for the LLM request in case of failure.
          - `max_parse_retries` integer, nullable: Maximum number of times to re-invoke the LLM when a successful response cannot be parsed into the expected structured (JSON) output. Distinct from `max_retries`, which controls transport-level retries (network errors, rate limits, 5xx) inside the LLM client.
          - `max_tokens` integer, nullable: Maximum number of tokens to generate in the response.
          - `temperature` number, nullable: Controls the randomness of the model's output. Lower values make the output more deterministic.
          - `request_timeout_ms` integer, nullable: Timeout for the request in milliseconds.
          - `seed` integer, nullable: Seed for random number generation to ensure reproducibility.
          - `model_kwargs` object: Additional keyword arguments to pass to the LLM provider's API.
          - `api_key` string, nullable: API key to access the LLM provider endpoint. Admins can see the stored key here; for every other role it is stored securely and never shown back, and leaving it blank keeps the existing key in use. Because an admin is shown the real key, an admin who clears this field removes the stored key.
          - `do_not_split_sentences` boolean: Whether to avoid splitting sentences in the LLM response.
          - `truncated_max_recent_messages` integer, nullable: Maximum number of recent messages to keep when truncating the conversation history. If not set, no truncation is applied. If set, the recent conversation history will be truncated to contain only the specified number of messages when invoking the LLM for next response. If set to 0, only the system prompt is used.
          - `type` 'no_llm': Differentiator field that helps in identifying this particular type of config when serializing and deserializing
        - LLMGroupConfigOutput
          - `type` 'llm_group': Discriminator field which must always be 'llm_group'
          - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
          - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
          - `logical_id` string, nullable: Unique identifier for the LLM Group
          - `llms` union[]: List of LLM configurations, in preferred order of use.
            - union
              - …
          - `operation_mode` 'parallel_select_one' | 'sequential_with_proactive'
          - `min_patience_time_ms` integer, nullable: Grace period in milliseconds until which we will unconditionally wait, unless all LLMs have responded.
          - `max_patience_time_ms` integer, nullable: Threshold milliseconds after which we will stop waiting. If no LLM has responded by this time, we will return None.
        - LLMGroupWithBackchannelConfigOutput
          - `type` 'llm_group_with_backchannel': Discriminator field which must always be 'llm_group_with_backchannel'
          - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
          - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
          - `id` string, nullable: Unique identifier for the LLM Group
          - `main_llm_config` LLMGroupConfigOutput
            - `type` 'llm_group': Discriminator field which must always be 'llm_group'
            - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
            - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
            - `logical_id` string, nullable: Unique identifier for the LLM Group
            - `llms` union[]: List of LLM configurations, in preferred order of use.
              - …
            - `operation_mode` 'parallel_select_one' | 'sequential_with_proactive'
            - `min_patience_time_ms` integer, nullable: Grace period in milliseconds until which we will unconditionally wait, unless all LLMs have responded.
            - `max_patience_time_ms` integer, nullable: Threshold milliseconds after which we will stop waiting. If no LLM has responded by this time, we will return None.
          - `non_backchannel_response_prefix` string, nullable: If back channel response is being sent, only the LLM output following this prefix will follow the backchannel response
          - `backchannel_llm_config` LLMGroupConfigOutput
            - `type` 'llm_group': Discriminator field which must always be 'llm_group'
            - `named_llm_config_id` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its ID.
            - `named_llm_config_name` string, nullable: If this configuration was resolved from a reusable named LLM configuration, this holds its name.
            - `logical_id` string, nullable: Unique identifier for the LLM Group
            - `llms` union[]: List of LLM configurations, in preferred order of use.
              - …
            - `operation_mode` 'parallel_select_one' | 'sequential_with_proactive'
            - `min_patience_time_ms` integer, nullable: Grace period in milliseconds until which we will unconditionally wait, unless all LLMs have responded.
            - `max_patience_time_ms` integer, nullable: Threshold milliseconds after which we will stop waiting. If no LLM has responded by this time, we will return None.
          - `backchannel_static_responses` string[]: List of static responses from which one will be selected as a backchannel response.
          - `backchannel_static_responses_selection_mode` 'random' | 'sequence'
          - `backchannel_min_patience_time_ms` integer, nullable: Grace period in milliseconds until which we will unconditionally wait for the main LLM to respond, unless it has already responded.
      - `is_default` boolean: Indicates if this is the global default LLM configuration for the team
    - `renamed_from` string, nullable: The bundle's name for this config, when that name was already taken
    - `ids_reminted` boolean: True when the source llm_config_id or logical id was already taken in this team, so new ones were minted. Workflows that attach the config by its old id will not resolve to this copy.
  - `warnings` string[]

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-21** `4a885f58a270`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/interactly/apis/interactly-api-3/changes/workflows/v1/llm-configs/import/post.md)

---

[API](https://skmtc.dev/interactly/apis/interactly-api-3.md) - [All operations](https://skmtc.dev/interactly/apis/interactly-api-3/llms.txt) - [OpenAPI document](https://skmtc.dev/interactly/apis/interactly-api-3/revisions/919b415ec222?raw)
