LLM Providers and Connections
Overview
An LLM Provider Connection is a secure, encrypted link to an external LLM service (OpenAI, Anthropic, Azure, a self-hosted engine, etc.). Each connection holds the provider type, API credentials, and deployment metadata, and becomes available to any AI Gateway for routing once saved.
The hub is mounted in two places, and all three tabs (Providers, Model Catalog, Definitions) follow the same scoping rule as the Connections screens:
- Project menu (AI Gateway → LLM Providers): each tab lists only the records created in the active project.
- Admin menu: lists everything — built-in/shared records and every project's records.
Scoping applies to the lists only. Selection dropdowns — picking a provider in an AI Proxy policy, choosing a catalog entry on a provider form, Clone from Catalog — still offer the project's own records plus the shared/built-in ones, exactly like connection selection elsewhere in Apinizer.
Provider Categories
OpenAI, Anthropic, Azure OpenAI, Google Vertex AI, Google AI Studio, AWS Bedrock, Cohere, Mistral, DeepSeek, Groq, Moonshot, Zhipu, Qwen, xAI, Together AI, Fireworks AI, Cerebras, Hugging Face, OpenRouter, Perplexity, NVIDIA NIM, Voyage AI — hosted and scaled by the provider.
vLLM, Ollama — models running on infrastructure you operate.
Any endpoint Apinizer doesn't have a built-in profile for — pick the adapter family it speaks and define your own paths.
Code is the value the Provider Type Catalog definition's code field carries — the internal identifier a connection's provider type resolves against. The APNZ-6550 catalog refresh added nine of the cloud providers below (Google AI Studio, plus the xAI through NVIDIA NIM rows) — all speak an OpenAI-compatible wire format, so no new adapter family was needed:
| Provider | Code | Deployment (default) | Notes |
|---|---|---|---|
| OpenAI | openai | Cloud | GPT-4o, GPT-4 Turbo, GPT-3.5, and other OpenAI models |
| Anthropic | anthropic | Cloud | Claude models |
| Azure OpenAI | azure-openai | Cloud | OpenAI models hosted on Azure |
| Google Vertex AI | vertex | Cloud | Gemini and PaLM models |
| Google AI Studio | google-ai-studio | Cloud | Direct Gemini API surface — separate from Vertex, no GCP project or OAuth2 required |
| AWS Bedrock | bedrock | Cloud | Claude, Llama, Mistral, Titan, and Nova models |
| Cohere | cohere | Cloud | Command models |
| Mistral | mistral | Cloud | Mistral/Mixtral models |
| DeepSeek | deepseek | Cloud | DeepSeek-V3/R1 |
| Groq | groq | Cloud | Fast inference on Groq's LPU hardware |
| Moonshot (Kimi) | moonshot | Cloud | Kimi models |
| Zhipu (GLM) | zhipu | Cloud | GLM models |
| Qwen (DashScope) | qwen-dashscope | Cloud | Alibaba Qwen models |
| xAI | xai | Cloud | Grok models |
| Together AI | together | Cloud | Open-weight model aggregator |
| Fireworks AI | fireworks | Cloud | Open-weight model inference |
| Cerebras | cerebras | Cloud | Cerebras Inference |
| Hugging Face | huggingface | Cloud | Inference Providers router |
| OpenRouter | openrouter | Cloud | Multi-provider aggregator — model IDs are vendor/model-shaped |
| Perplexity | perplexity | Cloud | Perplexity Router API |
| NVIDIA NIM | nvidia-nim | Cloud | NVIDIA-hosted surface |
| Voyage AI | voyage | Cloud | Embedding-only provider |
| vLLM | vllm | On-Premise | Self-hosted inference engine |
| Ollama | ollama | On-Premise | Local LLM inference |
| Custom OpenAI-Compatible | custom-openai-compat | On-Premise (default) | Any endpoint that speaks the OpenAI API format |
Deployment Type
Each connection declares whether the LLM runs in the cloud or on-premise:
- Cloud — the LLM is managed by the provider (any "Cloud" row in the table above)
- On-Premise — the LLM runs in your infrastructure (vLLM, Ollama, a custom OpenAI-compatible endpoint)
Deployment type is auto-filled based on provider type when you create a connection, but you can override it if needed (for example, a self-hosted vLLM instance running on a cloud VM).
Credentials
All API keys and secrets are encrypted at rest and never logged. Connections are managed through Apinizer's credential system, the same system used to secure API Proxy access.
Who Holds the Credential: Gateway or Client
Every connection answers one question up front — who supplies the upstream provider's credential on a request:
| Credential Source | Behavior |
|---|---|
| Provided by AI gateway (default) | Apinizer stores the key and signs every request with it — the behavior every connection had before this setting existed. |
| Provided by client | Apinizer stores no credential at all. Every request must already carry the provider's own header; the gateway forwards that header untouched instead of injecting a stored value. Budget, cost, and rate limits still attach to the Apinizer credential that made the call — only the upstream key belongs to the client. |
Provided by client is for installations that don't want the provider's raw key stored inside Apinizer at all — the caller (or a proxy in front of it) supplies its own key on every request. Because nothing is stored, Test Connection asks for a temporary credential just for that one probe, and that value is never saved.
Where the Key Travels: Header or Query Parameter
For the API-key family of authentication (Bearer token, an API key in a named header, or a custom header — see Credential Type Label below), a second setting decides where the key is placed on the outbound request:
| API Key Location | Shape | Notes |
|---|---|---|
| Header (default) | <header name>: <prefix><key> | Every mainstream provider. |
| Query parameter | ?<parameter name>=<key> | Appended to the URL — Gemini's native endpoint accepts ?key=. Discouraged when a header alternative exists, since a key placed in the URL can end up in access logs. |
Basic auth, AWS Signature V4, and the Google service-account (OAuth2) flow each have a fixed transport of their own and are unaffected by this setting.
Key Prefix
The text placed in front of the key value on the wire. Left blank, it defaults to the credential type's own prefix (Bearer for a Bearer token, nothing for a raw API key). Set it explicitly to an empty value for a provider that wants the raw key with no prefix (Anthropic's x-api-key style), or to something like Token for a provider that expects Authorization: Token <key>.
Allowing a Client to Override the Stored Key
On a gateway-held connection, Allow clients to override with their own key lets an individual request bypass the stored credential: if the incoming request already carries the connection's own auth header, that value is forwarded instead of the stored key — the same pattern Kong calls allow_override. Left off (the default), any such header on the incoming request is dropped before the call is signed, so the stored key can never leak by a client simply guessing the header name.