Get configured LLM providers
GET/v1/llm-providers
This route allows you to get the configured LLM providers.
To learn more about LLM management, see the documentation.
Request body schema (JSON)
{
"title": "Body"
}Responses
- 200
- 500
Default Response
Default Response
Responses (JSON)
{
"responses": {
"200": {
"description": "Default Response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"result": {
"type": "array",
"items": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"enum": [
"openai",
"azure-openai",
"anthropic",
"azure-anthropic",
"bedrock",
"port",
"openai-compatible",
"vertex-gemini",
"vertex-anthropic",
"anthropic-compatible"
]
},
"enabled": {
"type": "boolean"
},
"config": {
"anyOf": [
{
"type": "object",
"properties": {
"apiKeySecretName": {
"type": "string",
"minLength": 1
}
},
"required": [
"apiKeySecretName"
],
"additionalProperties": false,
"title": "Anthropic config"
},
{
"type": "object",
"properties": {
"apiKeySecretName": {
"type": "string",
"minLength": 1
}
},
"required": [
"apiKeySecretName"
],
"additionalProperties": false,
"title": "OpenAI config"
},
{
"type": "object",
"properties": {
"apiKeySecretName": {
"type": "string",
"minLength": 1
},
"resourceName": {
"type": "string",
"minLength": 1
},
"deploymentId": {
"description": "Deprecated. Use modelDeployments instead.",
"deprecated": true,
"type": "string",
"minLength": 1
},
"modelDeployments": {
"description": "Optional mapping of model names to Azure deployment IDs. Only needed when your deployment names differ from model names (e.g., {\"gpt-5\": \"my-custom-deployment\"}).",
"type": "object",
"additionalProperties": {
"type": "string",
"minLength": 1
}
}
},
"required": [
"apiKeySecretName",
"resourceName"
],
"additionalProperties": false,
"title": "Azure OpenAI config"
},
{
"type": "object",
"properties": {
"apiKeySecretName": {
"type": "string",
"minLength": 1
},
"resourceName": {
"type": "string",
"minLength": 1
},
"modelDeployments": {
"description": "Optional mapping of model names to Azure deployment IDs. Only needed when your deployment names differ from model names (e.g., {\"claude-sonnet-4-20250514\": \"my-custom-deployment\"}).",
"type": "object",
"additionalProperties": {
"type": "string",
"minLength": 1
}
}
},
"required": [
"apiKeySecretName",
"resourceName"
],
"additionalProperties": false,
"title": "Azure Anthropic config"
},
{
"type": "object",
"properties": {
"accessKeyIdSecretName": {
"type": "string",
"minLength": 1
},
"secretAccessKeySecretName": {
"type": "string",
"minLength": 1
},
"roleArn": {
"type": "string",
"minLength": 1
},
"externalIdSecretName": {
"type": "string"
},
"apiKeySecretName": {
"description": "Name of a Port secret holding a Bedrock API key, sent as the `Authorization: Bearer` header.",
"type": "string",
"minLength": 1
},
"baseUrl": {
"description": "Optional Bedrock runtime endpoint override (e.g. a proxy in front of Bedrock). Defaults to the AWS endpoint for `region`.",
"type": "string",
"format": "uri"
},
"region": {
"type": "string",
"minLength": 1,
"pattern": "^[a-z]{2}-[a-z]+-\\d{1}$"
},
"guardrailIdentifier": {
"type": "string"
},
"guardrailVersion": {
"type": "string"
}
},
"required": [
"region"
],
"additionalProperties": false,
"title": "Amazon Bedrock config"
},
{
"type": "object",
"properties": {},
"additionalProperties": false,
"title": "Port config"
},
{
"type": "object",
"properties": {
"baseUrl": {
"type": "string",
"format": "uri",
"description": "Base URL of the OpenAI-compatible API endpoint."
},
"apiKeySecretName": {
"type": "string",
"minLength": 1,
"description": "Name of a Port secret that stores the API key for this provider."
},
"customHeaders": {
"description": "Optional HTTP headers to add to every request to this provider.",
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"models": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 3,
"description": "Model identifier as exposed by the provider (for example the OpenAI-compatible API, the Anthropic Messages API, or Vertex AI)."
},
"displayName": {
"description": "Optional display name for the model in Port.",
"type": "string"
},
"contextWindow": {
"description": "Optional maximum context length for the model in tokens.",
"type": "number",
"minimum": 0,
"exclusiveMinimum": true
},
"supportedFeatures": {
"description": "Optional feature flags for this model in Port.",
"type": "object",
"properties": {
"temperature": {
"type": "boolean"
},
"extendedThinking": {
"type": "boolean"
},
"adaptiveThinking": {
"type": "boolean"
},
"anthropicBeta": {
"type": "boolean"
},
"caching": {
"type": "boolean"
},
"guardrails": {
"type": "boolean"
},
"reasoningEffort": {
"type": "boolean"
},
"nativeStructuredOutput": {
"description": "Anthropic-family providers with a config-driven model catalog (`anthropic-compatible`, `vertex-anthropic`). Whether this model accepts Anthropic's native `output_format` for structured output. Leave unset to let Port infer it from the model identifier; set to `false` when the identifier resembles a Claude model but the endpoint behind it does not support `output_format`.",
"type": "boolean"
},
"useLegacyMaxTokens": {
"description": "OpenAI-compatible provider. Use legacy `max_tokens` parameter or newer `max_completion_tokens`, set to `false` for models that rejects the legacy option, defaults to `true`.",
"type": "boolean"
}
},
"additionalProperties": false
}
},
"required": [
"name"
],
"additionalProperties": false
},
"description": "Model catalog for this OpenAI-compatible provider. Each `name` is the model id you use in the `model` field on invocations."
},
"supportsStructuredOutputs": {
"description": "Whether the endpoint supports JSON schema structured output responses.",
"type": "boolean"
}
},
"required": [
"baseUrl",
"apiKeySecretName",
"models"
],
"additionalProperties": false,
"title": "OpenAI-compatible config"
},
{
"type": "object",
"properties": {
"clientEmailSecretName": {
"type": "string",
"minLength": 1,
"description": "Port secret name for the GCP service account `client_email` field."
},
"privateKeySecretName": {
"type": "string",
"minLength": 1,
"description": "Port secret name for the GCP service account `private_key` field (PEM)."
},
"project": {
"type": "string",
"minLength": 1,
"description": "GCP project ID where Vertex AI is enabled."
},
"location": {
"type": "string",
"minLength": 1,
"description": "Vertex AI region where the configured models are enabled (for example `us-central1` for Gemini or `us-east5` for Claude)."
},
"models": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 3,
"description": "Model identifier as exposed by the provider (for example the OpenAI-compatible API, the Anthropic Messages API, or Vertex AI)."
},
"displayName": {
"description": "Optional display name for the model in Port.",
"type": "string"
},
"contextWindow": {
"description": "Optional maximum context length for the model in tokens.",
"type": "number",
"minimum": 0,
"exclusiveMinimum": true
},
"supportedFeatures": {
"description": "Optional feature flags for this model in Port.",
"type": "object",
"properties": {
"temperature": {
"type": "boolean"
},
"extendedThinking": {
"type": "boolean"
},
"adaptiveThinking": {
"type": "boolean"
},
"anthropicBeta": {
"type": "boolean"
},
"caching": {
"type": "boolean"
},
"guardrails": {
"type": "boolean"
},
"reasoningEffort": {
"type": "boolean"
},
"nativeStructuredOutput": {
"description": "Anthropic-family providers with a config-driven model catalog (`anthropic-compatible`, `vertex-anthropic`). Whether this model accepts Anthropic's native `output_format` for structured output. Leave unset to let Port infer it from the model identifier; set to `false` when the identifier resembles a Claude model but the endpoint behind it does not support `output_format`.",
"type": "boolean"
},
"useLegacyMaxTokens": {
"description": "OpenAI-compatible provider. Use legacy `max_tokens` parameter or newer `max_completion_tokens`, set to `false` for models that rejects the legacy option, defaults to `true`.",
"type": "boolean"
}
},
"additionalProperties": false
}
},
"required": [
"name"
],
"additionalProperties": false
},
"description": "Models your project exposes on Vertex AI. Each `name` is the model id used in the `model` field on invocations."
},
"apiKeySecretName": {
"type": "string",
"minLength": 1
}
},
"required": [
"models"
],
"additionalProperties": false,
"title": "Vertex Gemini config"
},
{
"type": "object",
"properties": {
"clientEmailSecretName": {
"type": "string",
"minLength": 1,
"description": "Port secret name for the GCP service account `client_email` field."
},
"privateKeySecretName": {
"type": "string",
"minLength": 1,
"description": "Port secret name for the GCP service account `private_key` field (PEM)."
},
"project": {
"type": "string",
"minLength": 1,
"description": "GCP project ID where Vertex AI is enabled."
},
"location": {
"type": "string",
"minLength": 1,
"description": "Vertex AI region where the configured models are enabled (for example `us-central1` for Gemini or `us-east5` for Claude)."
},
"models": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 3,
"description": "Model identifier as exposed by the provider (for example the OpenAI-compatible API, the Anthropic Messages API, or Vertex AI)."
},
"displayName": {
"description": "Optional display name for the model in Port.",
"type": "string"
},
"contextWindow": {
"description": "Optional maximum context length for the model in tokens.",
"type": "number",
"minimum": 0,
"exclusiveMinimum": true
},
"supportedFeatures": {
"description": "Optional feature flags for this model in Port.",
"type": "object",
"properties": {
"temperature": {
"type": "boolean"
},
"extendedThinking": {
"type": "boolean"
},
"adaptiveThinking": {
"type": "boolean"
},
"anthropicBeta": {
"type": "boolean"
},
"caching": {
"type": "boolean"
},
"guardrails": {
"type": "boolean"
},
"reasoningEffort": {
"type": "boolean"
},
"nativeStructuredOutput": {
"description": "Anthropic-family providers with a config-driven model catalog (`anthropic-compatible`, `vertex-anthropic`). Whether this model accepts Anthropic's native `output_format` for structured output. Leave unset to let Port infer it from the model identifier; set to `false` when the identifier resembles a Claude model but the endpoint behind it does not support `output_format`.",
"type": "boolean"
},
"useLegacyMaxTokens": {
"description": "OpenAI-compatible provider. Use legacy `max_tokens` parameter or newer `max_completion_tokens`, set to `false` for models that rejects the legacy option, defaults to `true`.",
"type": "boolean"
}
},
"additionalProperties": false
}
},
"required": [
"name"
],
"additionalProperties": false
},
"description": "Models your project exposes on Vertex AI. Each `name` is the model id used in the `model` field on invocations."
}
},
"required": [
"clientEmailSecretName",
"privateKeySecretName",
"project",
"location",
"models"
],
"additionalProperties": false,
"title": "Vertex Anthropic config"
},
{
"type": "object",
"properties": {
"baseUrl": {
"type": "string",
"format": "uri",
"description": "Base URL of the Anthropic Messages API endpoint — the prefix before `/messages`."
},
"apiKeySecretName": {
"description": "Name of a Port secret holding the key sent as the `x-api-key` header.",
"type": "string",
"minLength": 1
},
"authTokenSecretName": {
"description": "Name of a Port secret holding the token sent as the `Authorization: Bearer` header.",
"type": "string",
"minLength": 1
},
"customHeaders": {
"description": "Optional HTTP headers to add to every request to this provider.",
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"models": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 3,
"description": "Model identifier as exposed by the provider (for example the OpenAI-compatible API, the Anthropic Messages API, or Vertex AI)."
},
"displayName": {
"description": "Optional display name for the model in Port.",
"type": "string"
},
"contextWindow": {
"description": "Optional maximum context length for the model in tokens.",
"type": "number",
"minimum": 0,
"exclusiveMinimum": true
},
"supportedFeatures": {
"description": "Optional feature flags for this model in Port.",
"type": "object",
"properties": {
"temperature": {
"type": "boolean"
},
"extendedThinking": {
"type": "boolean"
},
"adaptiveThinking": {
"type": "boolean"
},
"anthropicBeta": {
"type": "boolean"
},
"caching": {
"type": "boolean"
},
"guardrails": {
"type": "boolean"
},
"reasoningEffort": {
"type": "boolean"
},
"nativeStructuredOutput": {
"description": "Anthropic-family providers with a config-driven model catalog (`anthropic-compatible`, `vertex-anthropic`). Whether this model accepts Anthropic's native `output_format` for structured output. Leave unset to let Port infer it from the model identifier; set to `false` when the identifier resembles a Claude model but the endpoint behind it does not support `output_format`.",
"type": "boolean"
},
"useLegacyMaxTokens": {
"description": "OpenAI-compatible provider. Use legacy `max_tokens` parameter or newer `max_completion_tokens`, set to `false` for models that rejects the legacy option, defaults to `true`.",
"type": "boolean"
}
},
"additionalProperties": false
}
},
"required": [
"name"
],
"additionalProperties": false
},
"description": "Model catalog for this Anthropic-compatible provider. Each `name` is the model id you use in the `model` field on invocations."
}
},
"required": [
"baseUrl",
"models"
],
"additionalProperties": false,
"title": "Anthropic-compatible config"
}
]
},
"overrides": {
"type": "object",
"properties": {
"models": {
"description": "Per-model enablement overrides. Keys are model identifiers — either a `name` from `config.models`, or any other model identifier your organization may configure.",
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"enabled": {
"default": true,
"type": "boolean"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"effectiveModels": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
}
},
"additionalProperties": false
},
"description": "Effective enablement state per model identifier after merging configuration and overrides. Keys are model id strings (not limited to a fixed catalog)."
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"createdBy": {
"type": "string"
},
"updatedAt": {
"type": "string",
"format": "date-time"
},
"updatedBy": {
"type": "string"
}
},
"required": [
"provider",
"enabled",
"effectiveModels"
],
"additionalProperties": false
}
}
},
"required": [
"ok",
"result"
],
"additionalProperties": false
}
}
}
},
"500": {
"description": "Default Response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"error": {
"type": "string"
},
"message": {
"type": "string"
},
"details": {
"type": "object",
"additionalProperties": {}
}
},
"required": [
"ok",
"error"
],
"additionalProperties": false
}
}
}
}
}
}