SparkBright LLM Gateway

One OpenAI-compatible endpoint over 17 providers, plus verbatim native passthrough. This page is generated from the gateway's live provider registry, so every value below reflects current behavior.

1. Overview & authentication

Base URL: https://llmproxy.api.sparkbright.me. Every request (except GET /health and the docs pages) authenticates with a SparkBright app key:

Authorization: Bearer <your-app-key>

The app key controls rate limits and which providers the app may call. Provider API keys are held by the gateway and injected server-side — clients never send upstream provider keys. An app restricted by allowedProviders gets 403 for any other provider.

endpoints POST /v1/chat/completions · GET /v1/models[?provider=] · GET /v1/models/pricing[?provider=] · GET /v1/providers · ANY /native/{provider}/{path...} · GET /health · GET / · GET /docs

2. Standard API — POST /v1/chat/completions

An OpenAI-shaped chat endpoint that works identically across providers. Pick the provider and model per request; the gateway renames the token param, clamps temperature, and drops unsupported params for you (see the parameter matrix).

Request body

{
  "provider": "openai",           // required — a provider id (see table below)
  "model": "gpt-5.5",          // required — a model id for that provider
  "messages": [                   // required — OpenAI chat messages
    { "role": "system", "content": "You are concise." },
    { "role": "user", "content": "Hello" }
  ],
  "temperature": 0.7,             // standard params, top-level (OpenAI style)
  "max_tokens": 1024,
  "stream": false,
  "conversationId": "optional-id",// server-side 90-min history merge (non-stream)
  "standardFormat": true          // default true; false returns provider-raw body
}

Params may be sent top-level (OpenAI style) or inside a legacy options{} object, in camelCase or snake_case; top-level wins. Recognized standard params: max_tokens, temperature, top_p, top_k, stop, seed, presence_penalty, frequency_penalty, response_format, tools, tool_choice, parallel_tool_calls, reasoning_effort, n, user.

Response (non-stream)

{
  "success": true,
  "provider": "openai",
  "model": "gpt-5.5",
  "response": { /* OpenAI chat.completion shape (normalized) */
    "choices": [{ "message": { "role": "assistant", "content": "..." }, "finish_reason": "stop" }]
  },
  "usage": { "prompt_tokens": 12, "completion_tokens": 34, "total_tokens": 46 },
  "conversationId": "conv-...",
  "metadata": {
    "requestId": "req-...",
    "timestamp": "2026-07-12T00:00:00.000Z",
    "rateLimitRemaining": 58,
    "dropped_params": ["top_k"]   // params silently dropped for this provider
  }
}

response is always normalized to the OpenAI chat.completion shape when standardFormat is true (the default). Set standardFormat: false to receive the provider's raw body instead. Inspect metadata.dropped_params to see exactly what the gateway removed.

curl

curl -sS https://llmproxy.api.sparkbright.me/v1/chat/completions \
  -H "Authorization: Bearer $SB_APP_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "openai",
    "model": "gpt-5.5",
    "messages": [{ "role": "user", "content": "Hello" }],
    "max_tokens": 256
  }'

JavaScript (fetch)

const res = await fetch("https://llmproxy.api.sparkbright.me/v1/chat/completions", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.SB_APP_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    provider: "anthropic",
    model: "claude-sonnet-5",
    messages: [{ role: "user", content: "Hello" }],
    max_tokens: 256,
  }),
});
const data = await res.json();
console.log(data.response.choices[0].message.content);

Streaming

Set "stream": true to receive Server-Sent Events. The gateway pipes the upstream SSE straight through in OpenAI delta shape (Anthropic's typed stream is translated to the same shape). Streamed responses have no JSON wrapper and skip the conversation cache.

curl -N https://llmproxy.api.sparkbright.me/v1/chat/completions \
  -H "Authorization: Bearer $SB_APP_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "provider": "groq", "model": "openai/gpt-oss-120b",
        "messages": [{ "role": "user", "content": "Count to 3" }], "stream": true }'
# data: {"choices":[{"delta":{"content":"1"}}]}
# data: {"choices":[{"delta":{"content":"2"}}]}
# ...
# data: [DONE]

conversationId

Supply a conversationId on a non-stream request and the gateway merges prior turns from a 90-minute server-side cache, appends the new turn, and stores the assistant reply. To keep multi-turn history you must supply the same id from the first request onward. Omitted on streams.

Swapping providers & models

The request shape is identical across providers — change provider and model and nothing else. Because token-param renaming, temperature clamping, and unsupported-param dropping are handled per provider, the same body is portable. Use GET /v1/models?provider=<id> to discover live model ids, and each provider's default/cheap ids (below) as safe starting points.

Model cost — GET /v1/models/pricing

Same auth, query, and envelope as /v1/models, with a per-model pricing object (USD per 1,000,000 tokens) and a provider-level cost summary attached. Alias: /v1/models/cost. Each provider carries a cost_source: api (pricing read live from the provider — OpenRouter, Together, SambaNova), static (published rates the gateway maintains), or none (no per-token cost — Ollama is local/self-hosted, Featherless is a flat subscription). Models with no known price (e.g. openrouter/auto) return pricing:null with a cost_reason.

curl -sS https://llmproxy.api.sparkbright.me/v1/models/pricing?provider=anthropic   -H "Authorization: Bearer <app-key>"

{ "provider": "anthropic", "cost_source": "static", "cost_available": true,
  "unit": "usd_per_1m_tokens", "currency": "USD",
  "models": [ { "id": "claude-sonnet-5",
    "pricing": { "input": 3, "output": 15, "source": "static", "unit": "usd_per_1m_tokens" } } ] }

3. Native passthrough — ANY /native/{provider}/{path...}

Forward a request verbatim to a provider's own API. The gateway does no body parsing, no param validation, and no transformation — it injects provider auth (and required headers such as anthropic-version), forwards method, query, and body, and streams the response back with the provider's own status and content type. Use this to reach provider-specific features the standard route doesn't model.

The path after /native/{provider} is appended to that provider's native root:

ProviderForwards to (native root)Native chat surfaceExample call
openai https://api.openai.com POST /chat/completions POST https://llmproxy.api.sparkbright.me/native/openai/chat/completions
anthropic https://api.anthropic.com POST /v1/messages POST https://llmproxy.api.sparkbright.me/native/anthropic/v1/messages
google https://generativelanguage.googleapis.com POST /v1beta/models/{model}:generateContent POST https://llmproxy.api.sparkbright.me/native/google/v1beta/models/gemini-3.5-flash:generateContent
groq https://api.groq.com POST /chat/completions POST https://llmproxy.api.sparkbright.me/native/groq/chat/completions
sambanova https://api.sambanova.ai POST /chat/completions POST https://llmproxy.api.sparkbright.me/native/sambanova/chat/completions
moonshot https://api.moonshot.ai POST /chat/completions POST https://llmproxy.api.sparkbright.me/native/moonshot/chat/completions
deepseek https://api.deepseek.com POST /chat/completions POST https://llmproxy.api.sparkbright.me/native/deepseek/chat/completions
alibaba https://dashscope-intl.aliyuncs.com POST /chat/completions POST https://llmproxy.api.sparkbright.me/native/alibaba/chat/completions
cohere https://api.cohere.com POST /chat/completions POST https://llmproxy.api.sparkbright.me/native/cohere/chat/completions
mistral https://api.mistral.ai POST /chat/completions POST https://llmproxy.api.sparkbright.me/native/mistral/chat/completions
xai https://api.x.ai POST /chat/completions POST https://llmproxy.api.sparkbright.me/native/xai/chat/completions
cerebras https://api.cerebras.ai POST /chat/completions POST https://llmproxy.api.sparkbright.me/native/cerebras/chat/completions
perplexity https://api.perplexity.ai POST /chat/completions POST https://llmproxy.api.sparkbright.me/native/perplexity/chat/completions
openrouter https://openrouter.ai POST /chat/completions POST https://llmproxy.api.sparkbright.me/native/openrouter/chat/completions
together https://api.together.xyz POST /chat/completions POST https://llmproxy.api.sparkbright.me/native/together/chat/completions
featherless https://api.featherless.ai POST /chat/completions POST https://llmproxy.api.sparkbright.me/native/featherless/chat/completions
ollama http://localhost:11434 POST /chat/completions POST https://llmproxy.api.sparkbright.me/native/ollama/chat/completions

Example: POST /native/anthropic/v1/messages reaches https://api.anthropic.com/v1/messages with x-api-key + anthropic-version injected.

4. Parameter matrix

Each cell shows two things: the native param name / range (top, grey) to use for a native passthrough call, and how the standard route maps that param for the provider (bottom; red = dropped). Table scrolls horizontally; the param column is pinned.

paramopenaianthropicgooglegroqsambanovamoonshotdeepseekalibabacoheremistralxaicerebrasperplexityopenroutertogetherfeatherlessollama
max_tokens
max_completion_tokens
renamed → max_completion_tokens
max_tokens (required)
passed as max_tokens; required, defaults 4096
generationConfig.maxOutputTokens
passed as max_tokens
max_completion_tokens
renamed → max_completion_tokens
max_tokens
passed as max_tokens
max_completion_tokens
renamed → max_completion_tokens; defaults 4096 if unset
max_tokens
passed as max_tokens
max_tokens
passed as max_tokens
max_tokens
passed as max_tokens
max_tokens
passed as max_tokens
max_completion_tokens
renamed → max_completion_tokens
max_completion_tokens
renamed → max_completion_tokens
max_tokens
passed as max_tokens
max_tokens
passed as max_tokens
max_tokens
passed as max_tokens
max_tokens
passed as max_tokens
max_tokens
passed as max_tokens
temperature
temperature 0–2
clamped to 0–2; dropped on reasoning models unless reasoning_effort none
temperature 0–1
clamped to 0–1
temperature 0–2
clamped to 0–2
temperature 0–2
clamped to 0–2
temperature 0–2
clamped to 0–2
temperature 0–1
clamped to 0–1
temperature 0–2
clamped to 0–2
temperature 0–1.999
clamped to 0–1.999
temperature 0–2
clamped to 0–2
temperature 0–1.5
clamped to 0–1.5
temperature 0–2
clamped to 0–2
temperature 0–1.5
clamped to 0–1.5
temperature 0–2
clamped to 0–2
temperature 0–2
clamped to 0–2
temperature 0–2
clamped to 0–2
temperature 0–2
clamped to 0–2
temperature 0–2
clamped to 0–2
top_p
top_p
passed; dropped on reasoning models
top_p
passed
topP
passed
top_p
passed
top_p
passed
top_p
passed
top_p
passed
top_p
passed
top_p
passed
top_p
passed
top_p
passed
top_p
passed
top_p
passed
top_p
passed
top_p
passed
top_p
passed
top_p
passed
top_k
top_k (may 400)
dropped
top_k
passed
topK
passed
top_k (may 400)
dropped
top_k
passed
top_k (may 400)
dropped
top_k (may 400)
dropped
top_k (may 400)
dropped
top_k (may 400)
dropped
top_k (may 400)
dropped
top_k (may 400)
dropped
top_k (may 400)
dropped
top_k
passed
top_k
passed
top_k
passed
top_k
passed
top_k
passed
stop
stop
passed
stop_sequences[]
passed
stopSequences[]
passed
stop
passed
stop
passed
stop
passed
stop
passed
stop
passed
stop
passed
stop
passed
stop
passed
stop
passed
stop
passed
stop
passed
stop
passed
stop
passed
stop
passed
seed
seed
passed
dropped
seed
passed
seed
passed
seed (may 400)
dropped
seed (may 400)
dropped
seed (may 400)
dropped
seed
passed
seed
passed
random_seed
renamed → random_seed
seed
passed
seed
passed
seed (may 400)
dropped
seed
passed
seed
passed
seed
passed
seed
passed
presence_penalty
presence_penalty
passed
dropped
presencePenalty
passed
presence_penalty
passed
presence_penalty (may 400)
dropped
presence_penalty
passed
presence_penalty (may 400)
dropped
presence_penalty (may 400)
dropped
presence_penalty
passed
presence_penalty
passed
presence_penalty
passed
presence_penalty (may 400)
dropped
presence_penalty
passed
presence_penalty
passed
presence_penalty
passed
presence_penalty
passed
presence_penalty
passed
frequency_penalty
frequency_penalty
passed
dropped
frequencyPenalty
passed
frequency_penalty
passed
frequency_penalty (may 400)
dropped
frequency_penalty
passed
frequency_penalty (may 400)
dropped
frequency_penalty (may 400)
dropped
frequency_penalty
passed
frequency_penalty
passed
frequency_penalty
passed
frequency_penalty (may 400)
dropped
frequency_penalty
passed
frequency_penalty
passed
frequency_penalty
passed
frequency_penalty
passed
frequency_penalty
passed
response_format
response_format
passed
— (use tools / JSON prompt)
dropped
responseMimeType / responseSchema
passed
response_format
passed
response_format
passed
response_format
passed
response_format
passed
response_format
passed
response_format
passed
response_format
passed
response_format
passed
response_format
passed
response_format (may 400)
dropped
response_format
passed
response_format
passed
response_format (may 400)
dropped
response_format
passed
tools
tools
passed
tools[]
passed
tools[].functionDeclarations
passed
tools
passed
tools
passed
tools
passed
tools
passed
tools
passed
tools
passed
tools
passed
tools
passed
tools
passed
tools (may 400)
dropped
tools
passed
tools
passed
tools (may 400)
dropped
tools
passed
tool_choice
tool_choice
passed
tool_choice {auto|any|tool|none}
passed
toolConfig.functionCallingConfig
passed
tool_choice
passed
tool_choice
passed
tool_choice
passed; "required" → "auto"
tool_choice
passed
tool_choice
passed
tool_choice
passed
tool_choice
passed
tool_choice
passed
tool_choice
passed
tool_choice (may 400)
dropped
tool_choice
passed
tool_choice
passed
tool_choice (may 400)
dropped
tool_choice
passed
parallel_tool_calls
parallel_tool_calls
passed
passed
passed
parallel_tool_calls
passed
parallel_tool_calls
passed
parallel_tool_calls
passed
parallel_tool_calls
passed
parallel_tool_calls
passed
parallel_tool_calls
passed
parallel_tool_calls
passed
parallel_tool_calls
passed
parallel_tool_calls
passed
parallel_tool_calls (may 400)
dropped
parallel_tool_calls
passed
parallel_tool_calls
passed
parallel_tool_calls (may 400)
dropped
parallel_tool_calls
passed
stream
stream
passed w/ stream_options
typed SSE
passed w/ stream_options
:streamGenerateContent?alt=sse
passed (no stream_options)
stream
passed w/ stream_options
stream
passed w/ stream_options
stream
passed w/ stream_options
stream
passed w/ stream_options
stream
passed w/ stream_options
stream
passed w/ stream_options
stream
passed (no stream_options)
stream
passed w/ stream_options
stream
passed w/ stream_options
stream
passed w/ stream_options
stream
passed w/ stream_options
stream
passed w/ stream_options
stream
passed w/ stream_options
stream
passed w/ stream_options
reasoning_effort
reasoning_effort
passed
— (thinking{budget_tokens})
dropped
— (thinkingConfig)
dropped
reasoning_effort
passed
reasoning_effort (may 400)
dropped
reasoning_effort (may 400)
dropped
reasoning_effort (may 400)
dropped
reasoning_effort (may 400)
dropped
reasoning_effort (may 400)
dropped
reasoning_effort (may 400)
dropped
reasoning_effort
passed
reasoning_effort (may 400)
dropped
reasoning_effort (may 400)
dropped
reasoning_effort
passed
reasoning_effort (may 400)
dropped
reasoning_effort (may 400)
dropped
reasoning_effort (may 400)
dropped

"passed w/ stream_options" means the gateway adds stream_options:{include_usage:true} on streams. "may 400" on a native cell means passthrough forwards the param but the provider itself may reject it.

5. Per-provider notes

IDProviderProtocolToken paramTempDefaultCheapModels listExtra standard params
openai OpenAI openai max_completion_tokens 0–2 gpt-5.5 gpt-5.4-nano live temperature, seed, presence_penalty, frequency_penalty, response_format, tools, tool_choice, parallel_tool_calls, reasoning_effort
anthropic Anthropic anthropic max_tokens 0–1 claude-sonnet-5 claude-haiku-4-5 live temperature, top_k, tools, tool_choice, parallel_tool_calls
google Google Gemini openai max_tokens 0–2 gemini-3.5-flash gemini-3.1-flash-lite live temperature, top_k, seed, presence_penalty, frequency_penalty, response_format, tools, tool_choice, parallel_tool_calls
groq Groq openai max_completion_tokens 0–2 openai/gpt-oss-120b openai/gpt-oss-20b live temperature, seed, presence_penalty, frequency_penalty, response_format, tools, tool_choice, parallel_tool_calls, reasoning_effort
sambanova SambaNova openai max_tokens 0–2 Meta-Llama-3.3-70B-Instruct gemma-4-31B-it live temperature, top_k, response_format, tools, tool_choice, parallel_tool_calls
moonshot Moonshot (Kimi) openai max_completion_tokens 0–1 kimi-k2.6 kimi-k2.5 live temperature, presence_penalty, frequency_penalty, response_format, tools, tool_choice, parallel_tool_calls
deepseek DeepSeek openai max_tokens 0–2 deepseek-v4-flash deepseek-v4-flash live temperature, response_format, tools, tool_choice, parallel_tool_calls
alibaba Alibaba Qwen (DashScope) openai max_tokens 0–1.999 qwen-plus qwen-flash live temperature, seed, response_format, tools, tool_choice, parallel_tool_calls
cohere Cohere openai max_tokens 0–2 command-a-03-2025 command-r7b-12-2024 fallback only temperature, seed, presence_penalty, frequency_penalty, response_format, tools, tool_choice, parallel_tool_calls
mistral Mistral openai max_tokens 0–1.5 mistral-large-latest mistral-small-latest live temperature, seed, presence_penalty, frequency_penalty, response_format, tools, tool_choice, parallel_tool_calls
xai xAI (Grok) openai max_completion_tokens 0–2 grok-4.5 grok-4.3 live temperature, seed, presence_penalty, frequency_penalty, response_format, tools, tool_choice, parallel_tool_calls, reasoning_effort
cerebras Cerebras openai max_completion_tokens 0–1.5 gpt-oss-120b gemma-4-31b live temperature, seed, response_format, tools, tool_choice, parallel_tool_calls
perplexity Perplexity (Sonar) openai max_tokens 0–2 sonar-pro sonar fallback only temperature, top_k, presence_penalty, frequency_penalty
openrouter OpenRouter openai max_tokens 0–2 openrouter/auto meta-llama/llama-3.3-70b-instruct:free live temperature, top_k, seed, presence_penalty, frequency_penalty, response_format, tools, tool_choice, parallel_tool_calls, reasoning_effort
together Together AI openai max_tokens 0–2 meta-llama/Llama-3.3-70B-Instruct-Turbo meta-llama/Llama-3.1-8B-Instruct-Turbo live temperature, top_k, seed, presence_penalty, frequency_penalty, response_format, tools, tool_choice, parallel_tool_calls
featherless Featherless AI openai max_tokens 0–2 meta-llama/Meta-Llama-3.1-8B-Instruct meta-llama/Meta-Llama-3.1-8B-Instruct live temperature, top_k, seed, presence_penalty, frequency_penalty
ollama Ollama openai max_tokens 0–2 llama3.3 llama3.2 live temperature, top_k, seed, presence_penalty, frequency_penalty, response_format, tools, tool_choice, parallel_tool_calls

OpenAI openai

Standard basehttps://api.openai.com/v1
Native roothttps://api.openai.com
Auth (standard)bearer
Token parammax_completion_tokens
Temperature0 – 2 (clamped)
Default modelgpt-5.5
Cheap modelgpt-5.4-nano
Fallback listgpt-5.6-sol, gpt-5.5-pro, gpt-5.5, gpt-5.4, gpt-5.4-mini, gpt-5.4-nano, gpt-5.2, gpt-5.1, gpt-4.1, gpt-4.1-mini, gpt-4o, gpt-4o-mini
/v1/modelslive via /models
Always droppednone
QuirksReasoning models (gpt-5*/o-series) drop temperature & top_p unless reasoning_effort is none.
Docshttps://platform.openai.com/docs/api-reference

Anthropic anthropic

Standard basehttps://api.anthropic.com
Native roothttps://api.anthropic.com
Auth (standard)x-api-key  + anthropic-version: 2023-06-01
Token parammax_tokens
Temperature0 – 1 (clamped)
Default modelclaude-sonnet-5
Cheap modelclaude-haiku-4-5
Fallback listclaude-fable-5, claude-opus-4-8, claude-sonnet-5, claude-haiku-4-5-20251001
/v1/modelslive via /v1/models
Always droppednone
Quirksmax_tokens is required; the gateway defaults it to 4096.
Docshttps://docs.anthropic.com/en/api

Google Gemini google

Standard basehttps://generativelanguage.googleapis.com/v1beta/openai
Native roothttps://generativelanguage.googleapis.com
Auth (standard)bearer  / native x-goog-api-key
Token parammax_tokens
Temperature0 – 2 (clamped)
Default modelgemini-3.5-flash
Cheap modelgemini-3.1-flash-lite
Fallback listgemini-3.1-pro, gemini-3.5-flash, gemini-3.1-flash-lite, gemini-2.5-pro, gemini-2.5-flash
/v1/modelslive via /models
Always droppednone
QuirksNo stream_options; usage arrives in the final stream chunk automatically.
Docshttps://ai.google.dev/gemini-api/docs

Groq groq

Standard basehttps://api.groq.com/openai/v1
Native roothttps://api.groq.com
Auth (standard)bearer
Token parammax_completion_tokens
Temperature0 – 2 (clamped)
Default modelopenai/gpt-oss-120b
Cheap modelopenai/gpt-oss-20b
Fallback listopenai/gpt-oss-120b, openai/gpt-oss-20b, llama-3.1-8b-instant, moonshotai/kimi-k2-instruct, qwen/qwen3-32b
/v1/modelslive via /models
Always droppedlogprobs, top_logprobs, logit_bias, n
Docshttps://console.groq.com/docs

SambaNova sambanova

Standard basehttps://api.sambanova.ai/v1
Native roothttps://api.sambanova.ai
Auth (standard)bearer
Token parammax_tokens
Temperature0 – 2 (clamped)
Default modelMeta-Llama-3.3-70B-Instruct
Cheap modelgemma-4-31B-it
Fallback listDeepSeek-V3.1, DeepSeek-V3.2, Meta-Llama-3.3-70B-Instruct, MiniMax-M2.7, gemma-4-31B-it, gpt-oss-120b
/v1/modelslive via /models
Always droppedpresence_penalty, frequency_penalty, logprobs, top_logprobs, logit_bias
Docshttps://docs.sambanova.ai

Moonshot (Kimi) moonshot

Standard basehttps://api.moonshot.ai/v1
Native roothttps://api.moonshot.ai
Auth (standard)bearer
Token parammax_completion_tokens
Temperature0 – 1 (clamped)
Default modelkimi-k2.6
Cheap modelkimi-k2.5
Fallback listkimi-k2.7-code, kimi-k2.7-code-highspeed, kimi-k2.6, kimi-k2.5
/v1/modelslive via /models
Always droppednone
QuirksBad low default for max tokens — the gateway sets 4096 when you omit it. tool_choice:"required" is unsupported and is coerced to "auto".
Docshttps://platform.moonshot.ai/docs

DeepSeek deepseek

Standard basehttps://api.deepseek.com
Native roothttps://api.deepseek.com
Auth (standard)bearer
Token parammax_tokens
Temperature0 – 2 (clamped)
Default modeldeepseek-v4-flash
Cheap modeldeepseek-v4-flash
Fallback listdeepseek-v4-flash, deepseek-v4-pro
/v1/modelslive via /models
Always droppedpresence_penalty, frequency_penalty, seed, top_k
Docshttps://api-docs.deepseek.com

Alibaba Qwen (DashScope) alibaba

Standard basehttps://dashscope-intl.aliyuncs.com/compatible-mode/v1
Native roothttps://dashscope-intl.aliyuncs.com
Auth (standard)bearer
Token parammax_tokens
Temperature0 – 1.999 (clamped)
Default modelqwen-plus
Cheap modelqwen-flash
Fallback listqwen3-max, qwen-max, qwen-plus, qwen-flash, qwen-turbo, qwq-plus
/v1/modelslive via /models
Always droppedfrequency_penalty, top_k
Docshttps://www.alibabacloud.com/help/en/model-studio

Cohere cohere

Standard basehttps://api.cohere.com/compatibility/v1
Native roothttps://api.cohere.com
Auth (standard)bearer
Token parammax_tokens
Temperature0 – 2 (clamped)
Default modelcommand-a-03-2025
Cheap modelcommand-r7b-12-2024
Fallback listcommand-a-plus-05-2026, command-a-03-2025, command-a-reasoning-08-2025, command-a-vision-07-2025, command-r7b-12-2024
/v1/modelsno live list — fallback ids only
Always droppednone
Docshttps://docs.cohere.com

Mistral mistral

Standard basehttps://api.mistral.ai/v1
Native roothttps://api.mistral.ai
Auth (standard)bearer
Token parammax_tokens
Temperature0 – 1.5 (clamped)
Default modelmistral-large-latest
Cheap modelmistral-small-latest
Fallback listmistral-large-latest, mistral-medium-latest, mistral-small-latest, ministral-3-8b, codestral-latest
/v1/modelslive via /models
Always droppedlogit_bias, logprobs, top_logprobs, top_k
Quirksseed is renamed to random_seed. No stream_options; usage arrives in the final stream chunk automatically.
Docshttps://docs.mistral.ai

xAI (Grok) xai

Standard basehttps://api.x.ai/v1
Native roothttps://api.x.ai
Auth (standard)bearer
Token parammax_completion_tokens
Temperature0 – 2 (clamped)
Default modelgrok-4.5
Cheap modelgrok-4.3
Fallback listgrok-4.5, grok-4.3, grok-4.20, grok-build-0.1
/v1/modelslive via /models
Always droppedlogit_bias
Docshttps://docs.x.ai

Cerebras cerebras

Standard basehttps://api.cerebras.ai/v1
Native roothttps://api.cerebras.ai
Auth (standard)bearer
Token parammax_completion_tokens
Temperature0 – 1.5 (clamped)
Default modelgpt-oss-120b
Cheap modelgemma-4-31b
Fallback listzai-glm-4.7, gemma-4-31b, gpt-oss-120b
/v1/modelslive via /models
Always droppedpresence_penalty, frequency_penalty, logit_bias
Docshttps://inference-docs.cerebras.ai

Perplexity (Sonar) perplexity

Standard basehttps://api.perplexity.ai
Native roothttps://api.perplexity.ai
Auth (standard)bearer
Token parammax_tokens
Temperature0 – 2 (clamped)
Default modelsonar-pro
Cheap modelsonar
Fallback listsonar, sonar-pro, sonar-reasoning, sonar-reasoning-pro, sonar-deep-research
/v1/modelsno live list — fallback ids only
Always droppedlogit_bias
Docshttps://docs.perplexity.ai

OpenRouter openrouter

Standard basehttps://openrouter.ai/api/v1
Native roothttps://openrouter.ai
Auth (standard)bearer
Token parammax_tokens
Temperature0 – 2 (clamped)
Default modelopenrouter/auto
Cheap modelmeta-llama/llama-3.3-70b-instruct:free
Fallback listopenrouter/auto, meta-llama/llama-3.3-70b-instruct:free, deepseek/deepseek-chat:free
/v1/modelslive via /models
Always droppednone
QuirksUnknown/extra params are forwarded (e.g. models[], provider, route, transforms).
Docshttps://openrouter.ai/docs

Together AI together

Standard basehttps://api.together.xyz/v1
Native roothttps://api.together.xyz
Auth (standard)bearer
Token parammax_tokens
Temperature0 – 2 (clamped)
Default modelmeta-llama/Llama-3.3-70B-Instruct-Turbo
Cheap modelmeta-llama/Llama-3.1-8B-Instruct-Turbo
Fallback listmeta-llama/Llama-3.3-70B-Instruct-Turbo, deepseek-ai/DeepSeek-V3, Qwen/Qwen2.5-72B-Instruct-Turbo, meta-llama/Llama-3.1-8B-Instruct-Turbo, moonshotai/Kimi-K2-Instruct
/v1/modelslive via /models
Always droppednone
Docshttps://docs.together.ai

Featherless AI featherless

Standard basehttps://api.featherless.ai/v1
Native roothttps://api.featherless.ai
Auth (standard)bearer
Token parammax_tokens
Temperature0 – 2 (clamped)
Default modelmeta-llama/Meta-Llama-3.1-8B-Instruct
Cheap modelmeta-llama/Meta-Llama-3.1-8B-Instruct
Fallback listmeta-llama/Meta-Llama-3.1-8B-Instruct, meta-llama/Meta-Llama-3.1-70B-Instruct, Qwen/Qwen2.5-72B-Instruct
/v1/modelslive via /models
Always droppednone
Docshttps://featherless.ai/docs

Ollama ollama

Standard basehttp://localhost:11434/v1
Native roothttp://localhost:11434
Auth (standard)bearer
Token parammax_tokens
Temperature0 – 2 (clamped)
Default modelllama3.3
Cheap modelllama3.2
Fallback listllama3.3, qwen2.5, gpt-oss:20b, deepseek-r1
/v1/modelslive via /models
Always droppednone
QuirksBase URL overridable via env OLLAMA_BASE_URL (local/self-hosted).
Docshttps://github.com/ollama/ollama/blob/main/docs/openai.md

OpenRouter free models

OpenRouter (provider: "openrouter") fronts hundreds of upstreams and exposes a pool of free models. Params unsupported by the chosen upstream are silently dropped, not errored.

6. Error contract

When a provider returns a non-2xx response, the gateway returns the same HTTP status and preserves the provider's own error body verbatim:

{
  "success": false,
  "error": {
    "type": "provider_error",
    "provider": "openai",
    "status": 400,
    "message": "<best short message>",
    "provider_error": { /* the provider's raw JSON body, verbatim (or raw text) */ },
    "request_id": "req-..."
  }
}

On the native route the provider's response is passed through untouched (status, content-type, body). Mid-stream provider errors are piped through unchanged. Gateway-side problems use standard 4xx types — invalid_request_error, authentication_error, rate_limit_error.

7. Machine-readable registry & notes for AI agents

GET /v1/providers returns the full registry as JSON (secrets excluded): for every provider its protocol, baseUrl, nativeBaseUrl, authStyle, tokenParam, temperature range, supports flags, dropParams, quirks, models (default/cheap/fallback/list), and docs. This is the same data that generates this page.

Recommended agent flow for choosing a model dynamically:

  1. Fetch GET /v1/providers once to learn which providers exist, their capabilities, and their default/cheap ids.
  2. Filter providers by the capabilities your task needs — e.g. require supports.tools for function calling, supports.response_format for JSON mode, supports.reasoning_effort for reasoning control.
  3. Fetch GET /v1/models?provider=<id> for the chosen provider to get live model ids (falls back to the registry's fallback list if the provider has no live list or is unreachable); each response also carries default and cheap for that provider.
  4. Call POST /v1/chat/completions with the selected provider + model. Read metadata.dropped_params to confirm which of your params the provider actually honored.
  5. On a provider error, inspect error.provider_error (verbatim) and either retry with a fallback model or switch providers.

Prefer each provider's default for quality and cheap for cost/latency. Do not hardcode model ids long-term — resolve them from /v1/models so you follow provider deprecations automatically.


SparkBright LLM Gateway · 17 providers · generated from src/registry.js at request time.