Overview
The CLI Proxy API supports OAuth authentication for various AI providers. OAuth credentials are stored in the auth-dir directory and managed through the Management API or CLI.
Supported OAuth Providers
The following providers support OAuth authentication:
- Gemini CLI (
gemini-cli) - Google Gemini via CLI authentication
- Vertex AI (
vertex) - Google Vertex AI with service accounts
- AI Studio (
aistudio) - Google AI Studio
- Antigravity (
antigravity) - Gemini 3.0 experimental access
- Claude (
claude) - Anthropic Claude via OAuth
- Codex (
codex) - OpenAI Codex
- Qwen (
qwen) - Alibaba Qwen models
- iFlow (
iflow) - iFlow AI
- Kimi (
kimi) - Moonshot AI Kimi
OAuth Model Aliases
Global OAuth model name aliases allow you to rename model IDs for both model listing and request routing.
Per-channel model name aliases. Each channel can have multiple aliases defined.Aliases do not apply to API key-based providers (gemini-api-key, codex-api-key, claude-api-key, openai-compatibility, vertex-api-key, ampcode). Those providers have their own per-credential alias systems.
Alias Configuration
Each alias entry has three properties:
oauth-model-alias.<channel>[].name
Original model name under this channel.
oauth-model-alias.<channel>[].alias
Client-visible alias for the model.
oauth-model-alias.<channel>[].fork
When true, keep the original model name and add the alias as an extra model. When false, replace the original name with the alias.
OAuth Alias Example
oauth-model-alias:
gemini-cli:
- name: "gemini-2.5-pro"
alias: "g2.5p"
fork: false # Replaces "gemini-2.5-pro" with "g2.5p"
- name: "gemini-2.5-flash"
alias: "flash"
fork: true # Keeps both "gemini-2.5-flash" and "flash"
vertex:
- name: "gemini-2.5-pro"
alias: "g2.5p"
aistudio:
- name: "gemini-2.5-pro"
alias: "g2.5p"
antigravity:
- name: "gemini-3-pro-high"
alias: "gemini-3-pro-preview"
claude:
- name: "claude-sonnet-4-5-20250929"
alias: "cs4.5"
- name: "claude-opus-4-5-20251101"
alias: "opus-latest"
codex:
- name: "gpt-5"
alias: "g5"
qwen:
- name: "qwen3-coder-plus"
alias: "qwen-plus"
iflow:
- name: "glm-4.7"
alias: "glm-god"
kimi:
- name: "kimi-k2.5"
alias: "k2.5"
When to use fork: true:Use fork: true when you want both the original model name and the alias available to clients. This is useful for:
- Gradual migration from old to new names
- Providing both short and full model names
- Supporting multiple naming conventions simultaneously
OAuth Excluded Models
Exclude specific models from OAuth providers using patterns.
Per-provider model exclusion lists. Each provider can have multiple exclusion patterns.
Exclusion Patterns
Supports four pattern types:
- Exact match:
"gemini-2.5-pro" - Excludes only this exact model
- Prefix wildcard:
"gemini-2.5-*" - Excludes gemini-2.5-flash, gemini-2.5-pro, etc.
- Suffix wildcard:
"*-preview" - Excludes gemini-3-pro-preview, claude-opus-preview, etc.
- Substring wildcard:
"*flash*" - Excludes gemini-2.5-flash-lite, flash-pro, etc.
Exclusion Example
oauth-excluded-models:
gemini-cli:
- "gemini-2.5-pro" # Exclude specific model
- "gemini-2.5-*" # Exclude all 2.5 models
- "*-preview" # Exclude all preview models
- "*flash*" # Exclude all flash variants
vertex:
- "gemini-3-pro-preview"
aistudio:
- "gemini-3-pro-preview"
antigravity:
- "gemini-3-pro-preview"
claude:
- "claude-3-5-haiku-20241022"
- "*-thinking" # Exclude thinking models
codex:
- "gpt-5-codex-mini"
- "*-mini" # Exclude all mini models
qwen:
- "vision-model"
iflow:
- "tstars2.0"
kimi:
- "kimi-k2-thinking"
- "*-thinking" # Exclude all thinking variants
Wildcard patterns are case-insensitive and match against lowercase model names.
OAuth Setup
auth-dir: "~/.cli-proxy-api"
2. Enable Management API
remote-management:
allow-remote: false
secret-key: "your-management-password"
3. Initiate OAuth Flow
Use the Management API to start OAuth authentication:
curl -X POST https://localhost:8317/v0/management/oauth/gemini-cli \
-H "X-Management-Key: your-management-password"
Response:
{
"auth_url": "https://accounts.google.com/o/oauth2/auth?...",
"state": "random-state-token"
}
4. Complete Authorization
Open the auth_url in a browser, authorize the application, and copy the callback URL.
5. Exchange Code for Token
curl -X POST https://localhost:8317/v0/management/oauth/gemini-cli/callback \
-H "X-Management-Key: your-management-password" \
-H "Content-Type: application/json" \
-d '{
"code": "authorization-code-from-callback",
"state": "random-state-token"
}'
6. Verify Session
curl https://localhost:8317/v0/management/sessions \
-H "X-Management-Key: your-management-password"
Complete OAuth Configuration Example
# Authentication Directory
auth-dir: "~/.cli-proxy-api"
# Management API (required for OAuth)
remote-management:
allow-remote: false
secret-key: "management-password-here"
# OAuth Model Aliases
oauth-model-alias:
gemini-cli:
- name: "gemini-2.5-pro"
alias: "g2.5p"
- name: "gemini-2.5-flash"
alias: "flash"
fork: true
claude:
- name: "claude-sonnet-4-5-20250929"
alias: "sonnet-latest"
codex:
- name: "gpt-5"
alias: "gpt-latest"
# OAuth Excluded Models
oauth-excluded-models:
gemini-cli:
- "*-preview" # Exclude preview models
- "gemini-1.*" # Exclude v1 models
claude:
- "claude-3-*" # Only use Claude 4+ models
codex:
- "*-mini" # Exclude mini variants
Provider-Specific Notes
Gemini CLI
oauth-model-alias:
gemini-cli:
- name: "gemini-2.5-pro"
alias: "pro"
Requires Google Cloud authentication via gcloud CLI or service account.
Claude OAuth
oauth-model-alias:
claude:
- name: "claude-sonnet-4-5-20250929"
alias: "sonnet"
Requires Anthropic account with OAuth enabled.
Vertex AI
oauth-model-alias:
vertex:
- name: "gemini-2.5-pro"
alias: "vertex-pro"
Requires Google Cloud service account with Vertex AI permissions.
Best Practices
Alias Naming:
- Use short, memorable aliases (e.g.,
"g2.5p" instead of "gemini-2.5-pro")
- Maintain consistency across providers
- Document custom aliases for your team
Security:
- Keep
auth-dir permissions restricted (0700)
- Rotate OAuth tokens periodically
- Monitor OAuth session access logs
- Use
allow-remote: false for Management API
Exclusion vs Aliases:Exclusions are applied before aliases. If you exclude a model, you cannot create an alias for it.
Troubleshooting
OAuth Flow Fails
- Check Management API is enabled (
secret-key is set)
- Verify
auth-dir exists and is writable
- Ensure OAuth provider supports your account type
Models Not Appearing
- Check
oauth-excluded-models for matching patterns
- Verify OAuth session is active (
GET /v0/management/sessions)
- Ensure provider supports the requested models
Aliases Not Working
- Verify channel name matches provider exactly (case-sensitive)
- Check for typos in
name field (must match upstream model name)
- Ensure
fork: false if you want to replace (not add to) model name