Codex Proxy API Reference
All proxy endpoints (chat/messages/responses) optionally accept Authorization: Bearer {proxy_api_key}.
Dashboard UI uses cookie-based session (_codex_session).
POST /v1/chat/completions
OpenAI-compatible chat completion.
Streaming: SSE with choice.delta events
Non-streaming: { id, choices, usage }
Errors: { error: { message, type, code } }
Anthropic Messages API compatible.
Auth: x-api-key or Authorization: Bearer
Errors: { type: "error", error: { type, message } }
POST /v1beta/models/:model:generateContent
POST /v1beta/models/:model:streamGenerateContent
Google Gemini compatible.
Auth: x-goog-api-key header, key query param, or Bearer token
Errors: { error: { code, message, status } }
Native Codex Responses API passthrough (WebSocket transport).
Streaming: SSE with response.created, response.output_text.delta, response.completed
Non-streaming: { response, usage, responseId }
Method
Path
Description
GET
/v1/models
List models (OpenAI format)
GET
/v1/models/catalog
Full catalog with reasoning efforts
GET
/v1/models/:id
Single model detail
GET
/v1/models/:id/info
Extended model info
GET
/v1beta/models
List models (Gemini format)
POST
/admin/refresh-models
Force refresh from upstream
Method
Path
Description
GET
/auth/accounts
List all accounts
POST
/auth/accounts
Add single account ({ token?, refreshToken? })
DELETE
/auth/accounts/:id
Delete account
PATCH
/auth/accounts/:id/label
Set label ({ label })
Method
Path
Description
POST
/auth/accounts/import
Bulk import ({ accounts: [{token?, refreshToken?, label?}] })
POST
/auth/accounts/batch-delete
Bulk delete ({ ids: [] })
POST
/auth/accounts/batch-status
Bulk enable/disable ({ ids: [], status: "active"|"disabled" })
Method
Path
Description
POST
/auth/accounts/health-check
Check accounts ({ ids?, stagger_ms?, concurrency? })
POST
/auth/accounts/:id/refresh
Refresh single account
GET
/auth/accounts/:id/quota
Get quota/usage
POST
/auth/accounts/:id/reset-usage
Reset usage counters
Method
Path
Description
GET
/auth/accounts/export
Export accounts (?ids=a,b&format=minimal)
Method
Path
Description
GET
/auth/accounts/:id/cookies
Get stored cookies
POST
/auth/accounts/:id/cookies
Set cookies ({ cookies })
DELETE
/auth/accounts/:id/cookies
Clear cookies
Method
Path
Description
POST
/auth/login-start
Start OAuth → { authUrl, state }
GET
/auth/login
302 redirect to Auth0
POST
/auth/code-relay
OAuth code exchange ({ callbackUrl })
GET
/auth/callback
OAuth callback handler
POST
/auth/device-login
Start device code flow
GET
/auth/device-poll/:deviceCode
Poll device authorization
POST
/auth/import-cli
Import from Codex CLI auth.json
POST
/auth/token
Manual token submit
GET
/auth/status
Auth status + pool summary
POST
/auth/logout
Clear all accounts
Method
Path
Description
GET
/api/proxies
List proxies with health & assignments
POST
/api/proxies
Add proxy ({ url } or { host, port, username, password })
PUT
/api/proxies/:id
Update proxy
DELETE
/api/proxies/:id
Delete proxy
Method
Path
Description
POST
/api/proxies/:id/check
Health check single proxy
POST
/api/proxies/check-all
Health check all proxies
POST
/api/proxies/:id/enable
Enable proxy
POST
/api/proxies/:id/disable
Disable proxy
Assignments (Account ↔ Proxy)
Method
Path
Description
GET
/api/proxies/assignments
List all assignments
POST
/api/proxies/assign
Assign proxy to account ({ accountId, proxyId })
DELETE
/api/proxies/assign/:accountId
Unassign
POST
/api/proxies/assign-bulk
Bulk assign ({ assignments: [] })
POST
/api/proxies/assign-rule
Auto-assign by rule ({ rule: "round-robin", ... })
Method
Path
Description
GET
/api/proxies/export
Export as YAML
POST
/api/proxies/import
Import YAML or plain text (host:port:user:pass)
GET
/api/proxies/assignments/export
Export assignments
POST
/api/proxies/assignments/import
Preview assignment import
POST
/api/proxies/assignments/apply
Apply assignment import
Method
Path
Description
PUT
/api/proxies/settings
Update health check interval
Method
Path
Description
GET
/admin/general-settings
Get all settings
POST
/admin/general-settings
Update settings (returns restart_required)
GET
/admin/settings
Get proxy API key
POST
/admin/settings
Set proxy API key
GET
/admin/rotation-settings
Get rotation strategy
POST
/admin/rotation-settings
Set rotation strategy
GET
/admin/quota-settings
Get quota settings
POST
/admin/quota-settings
Set quota settings
Method
Path
Description
GET
/health
Health probe → { status, authenticated, pool }
POST
/admin/test-connection
Full connectivity diagnostics
GET
/debug/fingerprint
TLS fingerprint config (localhost only)
GET
/debug/diagnostics
System diagnostics (localhost only)
GET
/debug/models
Model store internals
Method
Path
Description
GET
/admin/update-status
Check update availability
POST
/admin/check-update
Trigger update check
POST
/admin/apply-update
Apply self-update (SSE progress stream)
Method
Path
Description
GET
/admin/usage-stats/summary
Cumulative usage by account/model
GET
/admin/usage-stats/history
Time-series data (?granularity=hourly&hours=24)
Method
Path
Description
GET
/auth/quota/warnings
Active quota warnings
Method
Path
Description
POST
/auth/dashboard-login
Login with password → sets session cookie (rate limited: 5/min)
POST
/auth/dashboard-logout
Clear session
GET
/auth/dashboard-status
Check if login required
Each protocol returns errors in its native format:
Protocol
Format
OpenAI
{ error: { message, type, code, param } }
Anthropic
{ type: "error", error: { type, message } }
Gemini
{ error: { code, message, status } }
Responses
{ type: "error", error: { type, code, message } }
Admin
{ error: "..." }
Common HTTP status codes: 401 (not authenticated), 429 (rate limited), 503 (no available accounts).