AI Gateway Provider
The AI Gateway provider connects you to models from multiple AI providers through a single interface. Instead of integrating with each provider separately, you can access OpenAI, Anthropic, Google, Meta, xAI, and other providers and their models.
Features
- Access models from multiple providers without having to install additional provider modules/dependencies
- Use the same code structure across different AI providers
- Switch between models and providers easily
- Automatic authentication when deployed on Vercel
- View pricing information across providers
- Observability for AI model usage through the Vercel dashboard
Setup
The Vercel AI Gateway provider is part of the AI SDK.
Basic Usage
For most use cases, you can use the AI Gateway directly with a model string:
// use plain model string with global providerimport { generateText } from 'ai';
const { text } = await generateText({ model: 'openai/gpt-5', prompt: 'Hello world',});// use provider instance (requires version 5.0.36 or later)import { generateText, gateway } from 'ai';
const { text } = await generateText({ model: gateway('openai/gpt-5'), prompt: 'Hello world',});The AI SDK automatically uses the AI Gateway when you pass a model string in the creator/model-name format.
Provider Instance
The gateway provider instance is available from the ai package in version
5.0.36 and later.
You can also import the default provider instance gateway from ai:
import { gateway } from 'ai';You may want to create a custom provider instance when you need to:
- Set custom configuration options (API key, base URL, headers)
- Use the provider in a provider registry
- Wrap the provider with middleware
- Use different settings for different parts of your application
To create a custom provider instance, import createGateway from ai:
import { createGateway } from 'ai';
const gateway = createGateway({ apiKey: process.env.AI_GATEWAY_API_KEY ?? '',});You can use the following optional settings to customize the AI Gateway provider instance:
-
baseURL string
Use a different URL prefix for API calls. The default prefix is
https://ai-gateway.vercel.sh/v1/ai. -
apiKey string
API key that is being sent using the
Authorizationheader. It defaults to theAI_GATEWAY_API_KEYenvironment variable. -
headers Record<string,string>
Custom headers to include in the requests.
-
fetch (input: RequestInfo, init?: RequestInit) => Promise<Response>
Custom fetch implementation. Defaults to the global
fetchfunction. You can use it as a middleware to intercept requests, or to provide a custom fetch implementation for e.g. testing. -
metadataCacheRefreshMillis number
How frequently to refresh the metadata cache in milliseconds. Defaults to 5 minutes (300,000ms).
Authentication
The Gateway provider supports two authentication methods:
API Key Authentication
Set your API key via environment variable:
AI_GATEWAY_API_KEY=your_api_key_hereOr pass it directly to the provider:
import { createGateway } from 'ai';
const gateway = createGateway({ apiKey: 'your_api_key_here',});OIDC Authentication (Vercel Deployments)
When deployed to Vercel, the AI Gateway provider supports authenticating using OIDC (OpenID Connect) tokens without API Keys.
How OIDC Authentication Works
-
In Production/Preview Deployments:
- OIDC authentication is automatically handled
- No manual configuration needed
- Tokens are automatically obtained and refreshed
-
In Local Development:
- First, install and authenticate with the Vercel CLI
- Run
vercel env pullto download your project's OIDC token locally - For automatic token management:
- Use
vercel devto start your development server - this will handle token refreshing automatically
- Use
- For manual token management:
- If not using
vercel dev, note that OIDC tokens expire after 12 hours - You'll need to run
vercel env pullagain to refresh the token before it expires
- If not using
If an API Key is present (either passed directly or via environment), it will always be used, even if invalid.
Read more about using OIDC tokens in the Vercel AI Gateway docs.
Bring Your Own Key (BYOK)
You can connect your own provider credentials to use with Vercel AI Gateway. This lets you use your existing provider accounts and access private resources.
To set up BYOK, add your provider credentials in your Vercel team's AI Gateway settings. Once configured, AI Gateway automatically uses your credentials. No code changes are needed.
Learn more in the BYOK documentation.
Language Models
You can create language models using a provider instance. The first argument is the model ID in the format creator/model-name:
import { generateText } from 'ai';
const { text } = await generateText({ model: 'openai/gpt-5', prompt: 'Explain quantum computing in simple terms',});AI Gateway language models can also be used in the streamText, generateObject, and streamObject functions (see AI SDK Core).
Available Models
The AI Gateway supports models from OpenAI, Anthropic, Google, Meta, xAI, Mistral, DeepSeek, Amazon Bedrock, Cohere, Perplexity, Alibaba, and other providers.
For the complete list of available models, see the AI Gateway documentation.
Dynamic Model Discovery
You can discover available models programmatically:
import { gateway, generateText } from 'ai';
const availableModels = await gateway.getAvailableModels();
// List all available modelsavailableModels.models.forEach(model => { console.log(`${model.id}: ${model.name}`); if (model.description) { console.log(` Description: ${model.description}`); } if (model.pricing) { console.log(` Input: $${model.pricing.input}/token`); console.log(` Output: $${model.pricing.output}/token`); if (model.pricing.cachedInputTokens) { console.log( ` Cached input (read): $${model.pricing.cachedInputTokens}/token`, ); } if (model.pricing.cacheCreationInputTokens) { console.log( ` Cache creation (write): $${model.pricing.cacheCreationInputTokens}/token`, ); } }});
// Use any discovered model with plain stringconst { text } = await generateText({ model: availableModels.models[0].id, // e.g., 'openai/gpt-4o' prompt: 'Hello world',});Credit Usage
You can check your team's current credit balance and usage:
import { gateway } from 'ai';
const credits = await gateway.getCredits();
console.log(`Team balance: ${credits.balance} credits`);console.log(`Team total used: ${credits.total_used} credits`);The getCredits() method returns your team's credit information based on the authenticated API key or OIDC token:
- balance number - Your team's current available credit balance
- total_used number - Total credits consumed by your team
Examples
Basic Text Generation
import { generateText } from 'ai';
const { text } = await generateText({ model: 'anthropic/claude-sonnet-4', prompt: 'Write a haiku about programming',});
console.log(text);Streaming
import { streamText } from 'ai';
const { textStream } = await streamText({ model: 'openai/gpt-5', prompt: 'Explain the benefits of serverless architecture',});
for await (const textPart of textStream) { process.stdout.write(textPart);}Tool Usage
import { generateText, tool } from 'ai';import { z } from 'zod';
const { text } = await generateText({ model: 'xai/grok-4', prompt: 'What is the weather like in San Francisco?', tools: { getWeather: tool({ description: 'Get the current weather for a location', parameters: z.object({ location: z.string().describe('The location to get weather for'), }), execute: async ({ location }) => { // Your weather API call here return `It's sunny in ${location}`; }, }), },});Provider-Executed Tools
Some providers offer tools that are executed by the provider itself, such as OpenAI's web search tool. To use these tools through AI Gateway, import the provider to access the tool definitions:
import { generateText, stepCountIs } from 'ai';import { openai } from '@ai-sdk/openai';
const result = await generateText({ model: 'openai/gpt-5-mini', prompt: 'What is the Vercel AI Gateway?', stopWhen: stepCountIs(10), tools: { web_search: openai.tools.webSearch({}), },});
console.dir(result.text);Some provider-executed tools require account-specific configuration (such as Claude Agent Skills) and may not work through AI Gateway. To use these tools, you must bring your own key (BYOK) directly to the provider.
Usage Tracking with User and Tags
Track usage per end-user and categorize requests with tags:
import type { GatewayProviderOptions } from '@ai-sdk/gateway';import { generateText } from 'ai';
const { text } = await generateText({ model: 'openai/gpt-5', prompt: 'Summarize this document...', providerOptions: { gateway: { user: 'user-abc-123', // Track usage for this specific end-user tags: ['document-summary', 'premium-feature'], // Categorize for reporting } satisfies GatewayProviderOptions, },});This allows you to:
- View usage and costs broken down by end-user in your analytics
- Filter and analyze spending by feature or use case using tags
- Track which users or features are driving the most AI usage
Provider Options
The AI Gateway provider accepts provider options that control routing behavior and provider-specific configurations.
Gateway Provider Options
You can use the gateway key in providerOptions to control how AI Gateway routes requests:
import type { GatewayProviderOptions } from '@ai-sdk/gateway';import { generateText } from 'ai';
const { text } = await generateText({ model: 'anthropic/claude-sonnet-4', prompt: 'Explain quantum computing', providerOptions: { gateway: { order: ['vertex', 'anthropic'], // Try Vertex AI first, then Anthropic only: ['vertex', 'anthropic'], // Only use these providers } satisfies GatewayProviderOptions, },});The following gateway provider options are available:
-
order string[]
Specifies the sequence of providers to attempt when routing requests. The gateway will try providers in the order specified. If a provider fails or is unavailable, it will move to the next provider in the list.
Example:
order: ['bedrock', 'anthropic']will attempt Amazon Bedrock first, then fall back to Anthropic. -
only string[]
Restricts routing to only the specified providers. When set, the gateway will never route to providers not in this list, even if they would otherwise be available.
Example:
only: ['anthropic', 'vertex']will only allow routing to Anthropic or Vertex AI. -
models string[]
Specifies fallback models to use when the primary model fails or is unavailable. The gateway will try the primary model first (specified in the
modelparameter), then try each model in this array in order until one succeeds.Example:
models: ['openai/gpt-5-nano', 'gemini-2.0-flash']will try the fallback models in order if the primary model fails. -
user string
Optional identifier for the end user on whose behalf the request is being made. This is used for spend tracking and attribution purposes, allowing you to track usage per end-user in your application.
Example:
user: 'user-123'will associate this request with end-user ID "user-123" in usage reports. -
tags string[]
Optional array of tags for categorizing and filtering usage in reports. Useful for tracking spend by feature, prompt version, or any other dimension relevant to your application.
Example:
tags: ['chat', 'v2']will tag this request with "chat" and "v2" for filtering in usage analytics.
You can combine these options to have fine-grained control over routing and tracking:
import type { GatewayProviderOptions } from '@ai-sdk/gateway';import { generateText } from 'ai';
const { text } = await generateText({ model: 'anthropic/claude-sonnet-4', prompt: 'Write a haiku about programming', providerOptions: { gateway: { order: ['vertex'], // Prefer Vertex AI only: ['anthropic', 'vertex'], // Only allow these providers } satisfies GatewayProviderOptions, },});Model Fallbacks Example
The models option enables automatic fallback to alternative models when the primary model fails:
import type { GatewayProviderOptions } from '@ai-sdk/gateway';import { generateText } from 'ai';
const { text } = await generateText({ model: 'openai/gpt-4o', // Primary model prompt: 'Write a TypeScript haiku', providerOptions: { gateway: { models: ['openai/gpt-5-nano', 'gemini-2.0-flash'], // Fallback models } satisfies GatewayProviderOptions, },});
// This will:// 1. Try openai/gpt-4o first// 2. If it fails, try openai/gpt-5-nano// 3. If that fails, try gemini-2.0-flash// 4. Return the result from the first model that succeedsProvider-Specific Options
When using provider-specific options through AI Gateway, use the actual provider name (e.g. anthropic, openai, not gateway) as the key:
import type { AnthropicProviderOptions } from '@ai-sdk/anthropic';import type { GatewayProviderOptions } from '@ai-sdk/gateway';import { generateText } from 'ai';
const { text } = await generateText({ model: 'anthropic/claude-sonnet-4', prompt: 'Explain quantum computing', providerOptions: { gateway: { order: ['vertex', 'anthropic'], } satisfies GatewayProviderOptions, anthropic: { thinking: { type: 'enabled', budgetTokens: 12000 }, } satisfies AnthropicProviderOptions, },});This works with any provider supported by AI Gateway. Each provider has its own set of options - see the individual provider documentation pages for details on provider-specific options.
Available Providers
AI Gateway supports routing to 20+ providers.
For a complete list of available providers and their slugs, see the AI Gateway documentation.
Model Capabilities
Model capabilities depend on the specific provider and model you're using. For detailed capability information, see:
- AI Gateway provider options for an overview of available providers
- Individual AI SDK provider pages for specific model capabilities and features