Tera Router

Providers & Accounts

The built-in provider catalog, adding accounts, priorities, and custom providers.

Provider vs account

  • A provider is a type of upstream (OpenAI, Anthropic, Gemini, Exa, ...) with a built-in dialect and base URL.
  • An account is your concrete credential on that provider — one provider can have many accounts.

Built-in catalog

The Providers page splits the catalog into four tabs. A provider appears under every tab its capabilities match — OpenAI, for example, is under all of them except search.

TabProviders
AI Model Providersopenai, anthropic, openrouter, nvidia, gemini, mistral, together, fireworks, nebius, groq, cline, cloudflare, muse, voyage-ai, jina-ai, plus custom providers
AI Search Providersexa, tavily, firecrawl, jina-ai, brave, serper
AI Voice Providersopenai, groq (STT), elevenlabs, deepgram, plus OpenAI-compatible custom providers
AI Image Generationopenai, gemini, together, muse, plus OpenAI-compatible custom providers

What each capability unlocks on the gateway:

CapabilityGateway endpoint
chat/v1/chat/completions, /v1/messages, /v1/responses
embeddings/v1/embeddings
image/v1/images/generations
tts / stt/v1/audio/speech, /v1/audio/transcriptions
search / fetch/v1/search, /v1/web/fetch

Chat providers speak the OpenAI dialect except anthropic (Anthropic dialect). OpenAI and Anthropic can be connected with an API key or by signing in on the official website (OAuth); the OpenAI sign-in is routed as the separate codex provider (Responses dialect, ChatGPT backend).

Account credentials are stored encrypted (envelope encryption with a key derived from APP_SECRET).

Adding an account

Via the dashboard (Providers → pick a provider → Connect) or the API. Chat providers sync their model list right after connecting; search, voice, and embedding-only providers (Exa, ElevenLabs, Voyage AI, …) only need the key, which is checked on first use because those APIs have no free test call. Test before saving:

curl -X POST http://localhost:8080/v1/validate-key \
  -H "Authorization: Bearer <dashboard-jwt>" \
  -H "Content-Type: application/json" \
  -d '{ "provider": "openai", "auth_kind": "api_key", "api_key": "sk-..." }'

Important fields when creating an account:

  • auth_kind — api_key, oauth, or none.
  • priority — the order used when one provider has multiple accounts.
  • proxy_pool_id — bind the account to a proxy pool for outbound IP control.
  • metadata.base_url — override the built-in base URL (useful for your own compatible endpoints).
  • metadata.headers — extra headers per account.

Every account supports a connection test (POST /v1/accounts/:id/test) and quota reading (GET /v1/accounts/:id/quota) from the dashboard.

Custom providers

Have your own OpenAI/Anthropic/Responses-compatible endpoint? Register it as a custom provider (Providers → Custom) by picking its api_kind, then add accounts as usual. Its slug works immediately in model: "my-provider/model".

On this page