---
title: "Create or update a named custom integration"
method: PUT
path: "/integrations/custom/{name}"
tags: ["integrations"]
---

# Create or update a named custom integration

`PUT /integrations/custom/{name}`

## Path parameters

- `name` string, required — Slug identifying this named custom integration

## Request body

- CustomIntegrationCreate — Schema for creating custom integrations. Inherits api_key field validation from CustomConfig: - api_key_header and api_key_value are required when authentication_type is api_key Token field is only used for oauth2 authentication (contains OAuth2 client credentials). For api_key auth, the api_key_value field is used instead.
  - `multi_modal_config` MultiModalModelIntegrationConfig — Configuration for multi-modal capabilities (file uploads).
    - `max_files` integer, nullable — Maximum number of files allowed per request. None means no limit.
    - `max_file_size_bytes` integer, nullable — Maximum file size in bytes per file. None means no limit.
  - `authentication_type` 'api_key' | 'none' | 'oauth2' — Authentication types for custom integrations. Values: - none: No authentication required - oauth2: OAuth2 token-based authentication - api_key: API key header-based authentication
  - `models` string[], nullable — List of model names for the custom integration. Deprecated: use model_properties instead.
  - `model_properties` ModelPropertiesInput[], nullable — List of model properties with name and alias for the custom integration.
    - `name` string, required — The model name used when calling the API.
    - `alias` string, nullable — The display name/alias for the model. Defaults to name.
    - `based_on` string, nullable — Alias of a built-in model whose parameter map should be used. For example, 'gpt-5.4'. Mutually exclusive with supported_parameters.
    - `supported_parameters` string[], nullable — Explicit list of parameter names this model supports (e.g., ['max_tokens', 'temperature', 'verbosity']). Each name must be a valid RunParamsMap field. Mutually exclusive with based_on.
  - `is_legacy_format` boolean — Internal: whether this config was created from the legacy 'models' field.
  - `default_model` string, nullable — Default model to use. If not provided, defaults to the first model.
  - `endpoint` string, required — Endpoint URL for the custom integration.
  - `authentication_scope` string, nullable — Optional scope for OAuth2 authentication.
  - `oauth2_token_url` string, nullable — OAuth2 token URL for custom OAuth2 authentication. If not provided, defaults to the endpoint.
  - `api_key_header` string, nullable — HTTP header name to use for API key authentication (e.g., 'X-API-Key', 'Authorization').
  - `api_key_value` string, nullable — API key value to send in the specified header for authentication.
  - `custom_llm_config` CustomLLMConfig — Configuration for a custom LiteLLM handler class. Allows users to specify a custom implementation of litellm.CustomLLM that handles acompletion() calls with custom request/response transformation.
    - `file_name` string, required — Python file name containing the CustomLLM class (e.g., 'my_handler.py')
    - `class_name` string, required — Class name within the module (must be a litellm.CustomLLM subclass)
    - `init_kwargs` object, nullable — Optional keyword arguments to pass to the CustomLLM constructor
  - `custom_header_mapping` object, nullable — Custom header mapping from internal fields (job_id, user_id, project_id, run_id) to custom header names to be included in LLM requests.
  - `headers` object, nullable — Optional custom HTTP headers to include in requests to the integration endpoint. Stored encrypted at rest.
  - `token` string, nullable

## Response `200`

Successful Response

- IntegrationDB
  - `id` string, uuid4, required
  - `permissions` Permission[]
    - `action` union, required
      - 'update' | 'delete' | 'read_api_keys' | 'change_role_to_admin' | 'change_role_to_manager' | 'change_role_to_user' | 'change_role_to_read_only'
      - 'update' | 'list_members' | 'join' | 'request_to_join'
      - 'update_role' | 'delete'
      - 'update' | 'delete' | 'rename' | 'share' | 'create_run' | 'delete_run' | 'rename_run' | 'move_run' | 'export_data' | 'configure_human_feedback' | 'record_human_feedback' | 'log_data' | 'toggle_metric' | 'edit_alert' | 'create_stage' | 'edit_stage' | 'configure_crown_logic' | 'delete_data' | 'set_metric' | 'edit_run_tags' | 'dismiss_alert' | 'edit_slice' | 'edit_edit' | 'update_control_bindings' | 'use_control_runtime'
      - 'update' | 'delete' | 'share' | 'export' | 'autotune_apply'
      - 'update' | 'delete'
      - 'update' | 'delete'
      - 'update' | 'delete'
      - 'update' | 'delete'
      - 'update' | 'delete' | 'share' | 'export' | 'rename'
      - 'update' | 'delete' | 'share' | 'read_secrets'
      - 'rename' | 'delete' | 'delete_log_data' | 'read_settings' | 'update_settings' | 'read_cost_settings' | 'read_ai_usage'
      - 'update' | 'delete' | 'share' | 'record_annotation'
      - 'create' | 'read' | 'update' | 'delete' — Actions on Agent Control's org-scoped ``control`` resource.
    - `allowed` boolean, required
    - `message` string, nullable
  - `name` string, required
  - `provider` 'anthropic' | 'aws_bedrock' | 'aws_sagemaker' | 'azure' | 'custom' | 'databricks' | 'mistral' | 'nvidia' | 'openai' | 'vegas_gateway' | 'vertex_ai' | 'writer', required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `created_by` string, uuid4, required
  - `is_selected` boolean
  - `is_disabled` boolean

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/galileo/apis/galileo-api-server.md) · [All operations](https://skmtc.net/galileo/apis/galileo-api-server/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/galileo/galileo-api-server/versions/933e8c8e6366/schema)
