diff --git a/README.md b/README.md
index 024eaab05c..b5fe970ad6 100644
--- a/README.md
+++ b/README.md
@@ -134,6 +134,10 @@ Agent Router supports a wide range of AI providers, making it easy to integrate
Anthropic
+
+
+ Vercel AI Gateway
+
diff --git a/examples/basic/README.md b/examples/basic/README.md
index fb0c022a17..fe34f168c5 100644
--- a/examples/basic/README.md
+++ b/examples/basic/README.md
@@ -11,6 +11,7 @@ traffic for various AI providers.
- `azure_openai.yaml` - Azure OpenAI integration
- `gcp_vertex.yaml` - GCP Vertex AI integration
- `tars.yaml` - TARS integration
+- `vercel.yaml` - Vercel AI Gateway integration
- `cohere.yaml` - Cohere integration
- `typesafe.yaml` - TypeSafe AI (Jev) integration
diff --git a/examples/basic/vercel.yaml b/examples/basic/vercel.yaml
new file mode 100644
index 0000000000..c764f5c6e2
--- /dev/null
+++ b/examples/basic/vercel.yaml
@@ -0,0 +1,88 @@
+# Copyright Envoy AI Gateway Authors
+# SPDX-License-Identifier: Apache-2.0
+# The full text of the Apache license is available in the LICENSE file at
+# the root of the repo.
+
+apiVersion: aigateway.envoyproxy.io/v1beta1
+kind: AIGatewayRoute
+metadata:
+ name: envoy-ai-gateway-basic-vercel
+ namespace: default
+spec:
+ parentRefs:
+ - name: envoy-ai-gateway-basic
+ kind: Gateway
+ group: gateway.networking.k8s.io
+ rules:
+ - matches:
+ - headers:
+ - type: RegularExpression
+ name: x-ai-eg-model
+ value: .*
+ backendRefs:
+ - name: envoy-ai-gateway-basic-vercel
+ timeouts:
+ request: 120s
+---
+apiVersion: aigateway.envoyproxy.io/v1beta1
+kind: AIServiceBackend
+metadata:
+ name: envoy-ai-gateway-basic-vercel
+ namespace: default
+spec:
+ schema:
+ name: OpenAI
+ backendRef:
+ name: envoy-ai-gateway-basic-vercel
+ kind: Backend
+ group: gateway.envoyproxy.io
+---
+apiVersion: aigateway.envoyproxy.io/v1beta1
+kind: BackendSecurityPolicy
+metadata:
+ name: envoy-ai-gateway-basic-vercel-apikey
+ namespace: default
+spec:
+ targetRefs:
+ - group: aigateway.envoyproxy.io
+ kind: AIServiceBackend
+ name: envoy-ai-gateway-basic-vercel
+ type: APIKey
+ apiKey:
+ secretRef:
+ name: envoy-ai-gateway-basic-vercel-apikey
+ namespace: default
+---
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: Backend
+metadata:
+ name: envoy-ai-gateway-basic-vercel
+ namespace: default
+spec:
+ endpoints:
+ - fqdn:
+ hostname: ai-gateway.vercel.sh
+ port: 443
+---
+apiVersion: gateway.networking.k8s.io/v1alpha3
+kind: BackendTLSPolicy
+metadata:
+ name: envoy-ai-gateway-basic-vercel-tls
+ namespace: default
+spec:
+ targetRefs:
+ - group: "gateway.envoyproxy.io"
+ kind: Backend
+ name: envoy-ai-gateway-basic-vercel
+ validation:
+ wellKnownCACertificates: "System"
+ hostname: ai-gateway.vercel.sh
+---
+apiVersion: v1
+kind: Secret
+metadata:
+ name: envoy-ai-gateway-basic-vercel-apikey
+ namespace: default
+type: Opaque
+stringData:
+ apiKey: VERCEL_AI_GATEWAY_API_KEY # Replace with your Vercel AI Gateway API key.
diff --git a/internal/autoconfig/config_test.go b/internal/autoconfig/config_test.go
index db5d4530ff..661d50b364 100644
--- a/internal/autoconfig/config_test.go
+++ b/internal/autoconfig/config_test.go
@@ -37,6 +37,9 @@ var (
//go:embed testdata/tars.yaml
tarsYAML string
+ //go:embed testdata/vercel.yaml
+ vercelYAML string
+
//go:embed testdata/openrouter.yaml
openrouterYAML string
@@ -234,6 +237,26 @@ func TestWriteConfig(t *testing.T) {
},
expected: tarsYAML,
},
+ {
+ name: "Vercel AI Gateway (https host)",
+ input: ConfigData{
+ Backends: []Backend{
+ {
+ Name: "openai",
+ Hostname: "ai-gateway.vercel.sh",
+ Port: 443,
+ NeedsTLS: true,
+ },
+ },
+ OpenAI: &OpenAIConfig{
+ BackendName: "openai",
+ SchemaName: "OpenAI",
+ Version: "",
+ },
+ OTELLog: &otelLogConfig{Exporter: "console"},
+ },
+ expected: vercelYAML,
+ },
{
name: "OpenRouter (https path prefix)",
input: ConfigData{
diff --git a/internal/autoconfig/testdata/vercel.yaml b/internal/autoconfig/testdata/vercel.yaml
new file mode 100644
index 0000000000..e926003616
--- /dev/null
+++ b/internal/autoconfig/testdata/vercel.yaml
@@ -0,0 +1,234 @@
+# Copyright Envoy AI Gateway Authors
+# SPDX-License-Identifier: Apache-2.0
+# The full text of the Apache license is available in the LICENSE file at
+# the root of the repo.
+
+# Configuration for Envoy AI Gateway with OpenAI compatible endpoint
+apiVersion: gateway.networking.k8s.io/v1
+kind: GatewayClass
+metadata:
+ name: aigw-run
+spec:
+ controllerName: gateway.envoyproxy.io/gatewayclass-controller
+---
+apiVersion: gateway.networking.k8s.io/v1
+kind: Gateway
+metadata:
+ name: aigw-run
+ namespace: default
+spec:
+ gatewayClassName: aigw-run
+ listeners:
+ - name: http
+ protocol: HTTP
+ port: 1975
+ infrastructure:
+ parametersRef:
+ group: gateway.envoyproxy.io
+ kind: EnvoyProxy
+ name: envoy-ai-gateway
+---
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: EnvoyProxy
+metadata:
+ name: envoy-ai-gateway
+ namespace: default
+spec:
+ logging:
+ level:
+ default: error
+ telemetry:
+ accessLog:
+ settings:
+ - matches:
+ # MCP metadata only exists on backend-listener requests, which do not carry /mcp paths.
+ # Match LLM by x-ai-eg-model and MCP by x-ai-eg-mcp-backend.
+ - "request.headers['x-ai-eg-model'] != ''"
+ sinks:
+ - type: File
+ file:
+ path: /dev/stdout
+ format:
+ type: JSON
+ json:
+ # LLM specific fields. Dynamic metadata expressions must match
+ # the ones defined in the AIGatewayRoute llmRequestCosts field or
+ # header-mapped attributes via OTEL_*_REQUEST_HEADER_ATTRIBUTES.
+ gen_ai.request.model: "%REQ(X-AI-EG-MODEL)%"
+ gen_ai.response.model: "%DYNAMIC_METADATA(io.envoy.ai_gateway:response_model)%"
+ gen_ai.provider.name: "%DYNAMIC_METADATA(io.envoy.ai_gateway:backend_name)%"
+ gen_ai.usage.input_tokens: "%DYNAMIC_METADATA(io.envoy.ai_gateway:llm_input_token)%"
+ gen_ai.usage.output_tokens: "%DYNAMIC_METADATA(io.envoy.ai_gateway:llm_output_token)%"
+ gen_ai.usage.reasoning_tokens: "%DYNAMIC_METADATA(io.envoy.ai_gateway:llm_reasoning_token)%"
+ session.id: "%DYNAMIC_METADATA(io.envoy.ai_gateway:session.id)%"
+ # Common fields
+ start_time: "%START_TIME%"
+ method: "%REQ(:METHOD)%"
+ request.path: "%REQ(:PATH)%"
+ x-envoy-origin-path: "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%"
+ response_code: "%RESPONSE_CODE%"
+ connection_termination_details: "%CONNECTION_TERMINATION_DETAILS%"
+ upstream_transport_failure_reason: "%UPSTREAM_TRANSPORT_FAILURE_REASON%"
+ bytes_received: "%BYTES_RECEIVED%"
+ bytes_sent: "%BYTES_SENT%"
+ duration: "%DURATION%"
+ x-envoy-upstream-service-time: "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%"
+ x-forwarded-for: "%REQ(X-FORWARDED-FOR)%"
+ user-agent: "%REQ(USER-AGENT)%"
+ x-request-id: "%REQ(X-REQUEST-ID)%"
+ upstream_host: "%UPSTREAM_HOST%"
+ upstream_cluster: "%UPSTREAM_CLUSTER%"
+ upstream_local_address: "%UPSTREAM_LOCAL_ADDRESS%"
+ downstream_local_address: "%DOWNSTREAM_LOCAL_ADDRESS%"
+ downstream_remote_address: "%DOWNSTREAM_REMOTE_ADDRESS%"
+ - matches:
+ - "request.headers['x-ai-eg-mcp-backend'] != ''"
+ sinks:
+ - type: File
+ file:
+ path: /dev/stdout
+ format:
+ type: JSON
+ json:
+ # MCP specific fields
+ jsonrpc.request.id: "%DYNAMIC_METADATA(io.envoy.ai_gateway:mcp_request_id)%"
+ mcp.session.id: "%REQ(MCP-SESSION-ID)%"
+ mcp.method.name: "%DYNAMIC_METADATA(io.envoy.ai_gateway:mcp_method)%"
+ mcp.tool.name: "%DYNAMIC_METADATA(io.envoy.ai_gateway:mcp_tool_name)%"
+ session.id: "%DYNAMIC_METADATA(io.envoy.ai_gateway:session.id)%"
+ mcp.provider.name: "%DYNAMIC_METADATA(io.envoy.ai_gateway:mcp_backend)%"
+ # Common fields
+ start_time: "%START_TIME%"
+ method: "%REQ(:METHOD)%"
+ request.path: "%REQ(:PATH)%"
+ x-envoy-origin-path: "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%"
+ response_code: "%RESPONSE_CODE%"
+ connection_termination_details: "%CONNECTION_TERMINATION_DETAILS%"
+ upstream_transport_failure_reason: "%UPSTREAM_TRANSPORT_FAILURE_REASON%"
+ bytes_received: "%BYTES_RECEIVED%"
+ bytes_sent: "%BYTES_SENT%"
+ duration: "%DURATION%"
+ x-envoy-upstream-service-time: "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%"
+ x-forwarded-for: "%REQ(X-FORWARDED-FOR)%"
+ user-agent: "%REQ(USER-AGENT)%"
+ x-request-id: "%REQ(X-REQUEST-ID)%"
+ upstream_host: "%UPSTREAM_HOST%"
+ upstream_cluster: "%UPSTREAM_CLUSTER%"
+ upstream_local_address: "%UPSTREAM_LOCAL_ADDRESS%"
+ downstream_local_address: "%DOWNSTREAM_LOCAL_ADDRESS%"
+ downstream_remote_address: "%DOWNSTREAM_REMOTE_ADDRESS%"
+
+---
+apiVersion: aigateway.envoyproxy.io/v1beta1
+kind: AIGatewayRoute
+metadata:
+ name: aigw-run
+ namespace: default
+spec:
+ parentRefs:
+ - name: aigw-run
+ kind: Gateway
+ group: gateway.networking.k8s.io
+ # Simple rule: route everything to OpenAI backend
+ rules:
+ - matches:
+ - headers:
+ - type: RegularExpression
+ name: x-ai-eg-model
+ value: .*
+ backendRefs:
+ - name: openai
+ namespace: default
+ timeouts:
+ request: 120s
+ # Configure the LLM request costs so they can be included in the Envoy access logs
+ llmRequestCosts:
+ - metadataKey: llm_input_token
+ type: InputToken
+ - metadataKey: llm_output_token
+ type: OutputToken
+ - metadataKey: llm_reasoning_token
+ type: ReasoningToken
+---
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: Backend
+metadata:
+ name: openai
+ namespace: default
+spec:
+ endpoints:
+ - fqdn:
+ hostname: ai-gateway.vercel.sh
+ port: 443
+---
+apiVersion: aigateway.envoyproxy.io/v1beta1
+kind: AIServiceBackend
+metadata:
+ name: openai
+ namespace: default
+spec:
+ timeouts:
+ request: 3m
+ schema:
+ name: OpenAI
+ backendRef:
+ name: openai
+ kind: Backend
+ group: gateway.envoyproxy.io
+ namespace: default
+---
+apiVersion: gateway.networking.k8s.io/v1alpha3
+kind: BackendTLSPolicy
+metadata:
+ name: openai-tls
+ namespace: default
+spec:
+ targetRefs:
+ - group: 'gateway.envoyproxy.io'
+ kind: Backend
+ name: openai
+ validation:
+ wellKnownCACertificates: "System"
+ hostname: ai-gateway.vercel.sh
+---
+# By default, Envoy Gateway sets the buffer limit to 32kiB which is not
+# sufficient for AI workloads. This ClientTrafficPolicy sets the buffer limit
+# to 50MiB as an example.
+# TODO: Remove after https://github.com/envoyproxy/ai-gateway/issues/1212
+apiVersion: gateway.envoyproxy.io/v1alpha1
+kind: ClientTrafficPolicy
+metadata:
+ name: client-buffer-limit
+ namespace: default
+spec:
+ targetRefs:
+ - group: gateway.networking.k8s.io
+ kind: Gateway
+ name: aigw-run
+ connection:
+ bufferLimit: 50Mi
+---
+apiVersion: v1
+kind: Secret
+metadata:
+ name: openai-apikey
+ namespace: default
+type: Opaque
+stringData:
+ apiKey: ${OPENAI_API_KEY}
+---
+apiVersion: aigateway.envoyproxy.io/v1beta1
+kind: BackendSecurityPolicy
+metadata:
+ name: openai-apikey
+ namespace: default
+spec:
+ targetRefs:
+ - group: aigateway.envoyproxy.io
+ kind: AIServiceBackend
+ name: openai
+ type: APIKey
+ apiKey:
+ secretRef:
+ name: openai-apikey
+---
diff --git a/site/docs/capabilities/llm-integrations/supported-endpoints.md b/site/docs/capabilities/llm-integrations/supported-endpoints.md
index ed83453c1c..cbb12da929 100644
--- a/site/docs/capabilities/llm-integrations/supported-endpoints.md
+++ b/site/docs/capabilities/llm-integrations/supported-endpoints.md
@@ -606,6 +606,7 @@ The following table summarizes which providers support which endpoints:
| [Hunyuan](https://cloud.tencent.com/document/product/1729/111007) | ⚠️ | ⚠️ | ⚠️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Via OpenAI-compatible API |
| [Tencent LLM Knowledge Engine](https://www.tencentcloud.com/document/product/1255/70381) | ⚠️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Via OpenAI-compatible API |
| [Tetrate Agent Router Service (TARS)](https://router.tetrate.ai/) | ⚠️ | ⚠️ | ⚠️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Via OpenAI-compatible API |
+| [Vercel AI Gateway](https://vercel.com/docs/ai-gateway) | ⚠️ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | ❌ | ❌ | Via OpenAI-compatible API; Anthropic endpoints via the `Anthropic` schema |
| [Google Vertex AI](https://cloud.google.com/vertex-ai/docs/reference/rest) | ✅ | 🚧 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | Via API translation |
| [Anthropic on Vertex AI](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/claude) | ✅ | ❌ | 🚧 | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | Via API translation |
| [Anthropic on AWS Bedrock](https://aws.amazon.com/bedrock/anthropic/) | 🚧 | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | Native Anthropic API |
diff --git a/site/docs/capabilities/llm-integrations/supported-providers.md b/site/docs/capabilities/llm-integrations/supported-providers.md
index a01b18e378..8f89b84ba3 100644
--- a/site/docs/capabilities/llm-integrations/supported-providers.md
+++ b/site/docs/capabilities/llm-integrations/supported-providers.md
@@ -30,6 +30,7 @@ Below is a table of currently supported providers and their respective configura
| [Hunyuan](https://cloud.tencent.com/document/product/1729/111007) | `{"name":"OpenAI","prefix":"/v1"}` | [API Key] | ✅ | |
| [Tencent LLM Knowledge Engine](https://www.tencentcloud.com/document/product/1255/70381?lang=en) | `{"name":"OpenAI","prefix":"/v1"}` | [API Key] | ✅ | |
| [Tetrate Agent Router Service (TARS)](https://router.tetrate.ai/) | `{"name":"OpenAI","prefix":"/v1"}` | [API Key] | ✅ | |
+| [Vercel AI Gateway](https://vercel.com/docs/ai-gateway) | `{"name":"OpenAI","prefix":"/v1"}` or `{"name":"Anthropic"}` | [API Key] or [Anthropic API Key] | ✅ | Aggregating gateway. Model IDs are namespaced, e.g. `openai/gpt-4o-mini`. |
| [SambaNova](https://docs.sambanova.ai/sambastudio/latest/open-ai-api.html) | `{"name":"OpenAI","prefix":"/v1"}` | [API Key] | ✅ | |
| Self-hosted-models | `{"name":"OpenAI","prefix":"/v1"}` | N/A | ⚠️ | Depending on the API schema spoken by self-hosted servers. For example, [vLLM] speaks the OpenAI format. Also, API Key auth can be configured as well. |
| [Anthropic](https://docs.claude.com/en/home) | `{"name":"Anthropic"}` | [Anthropic API Key] | ✅ | Support only Native Anthropic messages endpoint |
diff --git a/site/docs/cli/run.md b/site/docs/cli/run.md
index 5b9b2802aa..053021e562 100644
--- a/site/docs/cli/run.md
+++ b/site/docs/cli/run.md
@@ -33,6 +33,8 @@ AZURE_OPENAI_ENDPOINT=https://example.openai.azure.com \
aigw run
# Tetrate Agent Router Service (TARS)
OPENAI_BASE_URL=https://api.router.tetrate.ai/v1 OPENAI_API_KEY=sk-your-key aigw run
+# Vercel AI Gateway
+OPENAI_BASE_URL=https://ai-gateway.vercel.sh/v1 OPENAI_API_KEY=your-vercel-ai-gateway-key aigw run
# Ollama running locally
OPENAI_BASE_URL=http://localhost:11434/v1 OPENAI_API_KEY=unused aigw run
```
diff --git a/site/docs/getting-started/connect-providers/index.md b/site/docs/getting-started/connect-providers/index.md
index 4d3d934941..08c66bea38 100644
--- a/site/docs/getting-started/connect-providers/index.md
+++ b/site/docs/getting-started/connect-providers/index.md
@@ -14,6 +14,7 @@ In this getting started guide you'll find quickstart setups to connect to the fo
- [Tetrate Agent Router Service (TARS)](./tars.md) - Connect to Tetrate Agent Router Service's models
- [Bitdeer AI](./bitdeer.md) - Connect to Bitdeer AI's OpenAI-compatible inference models
+- [Vercel AI Gateway](./vercel.md) - Route to Vercel AI Gateway's OpenAI-compatible endpoint
- [OpenAI](./openai.md) - Connect to OpenAI's GPT models
- [Anthropic](./anthropic.md) - Connect to Anthropic's Claude models
- [AWS Bedrock](./aws-bedrock.md) - Access AWS Bedrock's suite of foundation models
@@ -44,6 +45,7 @@ Choose your provider to get started:
- [Connect Tetrate Agent Router Service (TARS)](./tars.md)
- [Connect Bitdeer AI](./bitdeer.md)
+- [Connect Vercel AI Gateway](./vercel.md)
- [Connect OpenAI](./openai.md)
- [Connect Anthropic](./anthropic.md)
- [Connect AWS Bedrock](./aws-bedrock.md)
diff --git a/site/docs/getting-started/connect-providers/vercel.md b/site/docs/getting-started/connect-providers/vercel.md
new file mode 100644
index 0000000000..da2d2bf976
--- /dev/null
+++ b/site/docs/getting-started/connect-providers/vercel.md
@@ -0,0 +1,154 @@
+---
+id: vercel
+title: Connect Vercel AI Gateway
+sidebar_position: 4
+---
+
+import CodeBlock from '@theme/CodeBlock';
+import vars from '../../\_vars.json';
+
+# Connect Vercel AI Gateway
+
+This guide will help you configure Agent Router to route traffic to [Vercel AI Gateway](https://vercel.com/docs/ai-gateway),
+which exposes models from many providers behind a single OpenAI-compatible endpoint at
+`https://ai-gateway.vercel.sh/v1`.
+
+Because Vercel AI Gateway speaks the [OpenAI Chat Completions API](https://vercel.com/docs/ai-gateway/sdks-and-apis/openai-chat-completions)
+and authenticates with `Authorization: Bearer `, it is configured with the `OpenAI` schema and
+an API key, the same as any other OpenAI-compatible provider. This is useful when you want a single
+egress and spend-tracking layer for models that are not hosted in your own cluster.
+
+## Prerequisites
+
+Before you begin, you'll need:
+
+- An [AI Gateway API key](https://vercel.com/docs/ai-gateway/authentication-and-byok#api-key)
+- Basic setup completed from the [Basic Usage](../basic-usage.md) guide
+
+Because Vercel AI Gateway fronts many models, the route in this example matches every value of
+`x-ai-eg-model` rather than a fixed list. Remove the mock route from the basic setup first so the
+two do not overlap:
+
+```shell
+kubectl delete aigatewayroute envoy-ai-gateway-basic
+```
+
+## Configuration Steps
+
+:::info Ready to proceed?
+Ensure you have followed the steps in [Connect Providers](../connect-providers/)
+:::
+
+### 1. Download configuration template
+
+
+{`curl -O https://raw.githubusercontent.com/theagentrouter/agent-router/${vars.aigwGitRef}/examples/basic/vercel.yaml`}
+
+
+### 2. Configure Vercel AI Gateway Credentials
+
+Edit the `vercel.yaml` file to replace the Vercel placeholder value:
+
+- Find the section containing `VERCEL_AI_GATEWAY_API_KEY`
+- Replace it with your actual Vercel AI Gateway API key
+
+:::caution Security Note
+Make sure to keep your API key secure and never commit it to version control.
+The key will be stored in a Kubernetes secret.
+:::
+
+### 3. Apply Configuration
+
+Apply the updated configuration and wait for the Gateway pod to be ready. If you already have a Gateway running,
+then the secret credential update will be picked up automatically in a few seconds.
+
+```shell
+kubectl apply -f vercel.yaml
+
+kubectl wait pods --timeout=2m \
+ -l gateway.envoyproxy.io/owning-gateway-name=envoy-ai-gateway-basic \
+ -n envoy-gateway-system \
+ --for=condition=Ready
+```
+
+### 4. Test the Configuration
+
+You should have set `$GATEWAY_URL` as part of the basic setup before connecting to providers.
+See the [Basic Usage](../basic-usage.md) page for instructions.
+
+Vercel AI Gateway model IDs follow the `creator/model-name` format, for example `openai/gpt-4o-mini`
+or `anthropic/claude-sonnet-4.5`. See [Models & Providers](https://vercel.com/docs/ai-gateway/models-and-providers)
+for the available IDs, or query `https://ai-gateway.vercel.sh/v1/models`.
+
+#### Test Chat Completions
+
+```shell
+curl -H "Content-Type: application/json" \
+ -d '{
+ "model": "openai/gpt-4o-mini",
+ "messages": [
+ {
+ "role": "user",
+ "content": "Hi."
+ }
+ ]
+ }' \
+ $GATEWAY_URL/v1/chat/completions
+```
+
+#### Test Embeddings
+
+```shell
+curl -H "Content-Type: application/json" \
+ -d '{
+ "model": "openai/text-embedding-3-small",
+ "input": "Agent Router"
+ }' \
+ $GATEWAY_URL/v1/embeddings
+```
+
+## Using the native Anthropic API
+
+Vercel AI Gateway also serves the native Anthropic Messages API on the same host. To route to it,
+configure a second `AIServiceBackend` with the `Anthropic` schema and an `AnthropicAPIKey`
+`BackendSecurityPolicy`, which sends the key in the `x-api-key` header:
+
+```yaml
+spec:
+ schema:
+ name: Anthropic
+```
+
+Requests then go to `$GATEWAY_URL/anthropic/v1/messages`. See
+[Supported Providers](/docs/capabilities/llm-integrations/supported-providers) for the full
+schema and authentication matrix.
+
+## Troubleshooting
+
+If you encounter issues:
+
+1. Verify your API key is correct and active
+
+2. Check pod status:
+
+ ```shell
+ kubectl get pods -n envoy-gateway-system
+ ```
+
+3. View controller logs:
+
+ ```shell
+ kubectl logs -n envoy-ai-gateway-system deployment/ai-gateway-controller
+ ```
+
+4. View External Processor Logs
+
+ ```shell
+ kubectl logs -n envoy-gateway-system -l gateway.envoyproxy.io/owning-gateway-name=envoy-ai-gateway-basic -c ai-gateway-extproc
+ ```
+
+5. Common errors:
+ - 401: Invalid API key
+ - 403: The API key's project does not have access to the requested model
+ - 429: Rate limit or spend limit exceeded
+ - 502: Upstream model provider unavailable
diff --git a/site/src/data/home/providers.ts b/site/src/data/home/providers.ts
index a2be97daca..eb4317510d 100644
--- a/site/src/data/home/providers.ts
+++ b/site/src/data/home/providers.ts
@@ -26,5 +26,6 @@ export const providers: Provider[] = [
{ name: 'SambaNova', logoUrl: '/img/providers/sambanova.svg', status: 'supported' },
{ name: 'Tetrate Agent Router Service', logoUrl: '/img/providers/tars.svg', status: 'supported' },
{ name: 'Together AI', logoUrl: '/img/providers/together-ai.svg', status: 'supported' },
+ { name: 'Vercel AI Gateway', logoUrl: '/img/providers/vercel.svg', status: 'supported' },
{ name: 'Vertex AI', logoUrl: '/img/providers/vertex-ai.svg', status: 'supported' },
];
diff --git a/site/static/img/providers/vercel.svg b/site/static/img/providers/vercel.svg
new file mode 100644
index 0000000000..ecf3cb6b4b
--- /dev/null
+++ b/site/static/img/providers/vercel.svg
@@ -0,0 +1 @@
+