Other Providers
Observra routes by URL segment, with one dedicated adapter per provider.
For copy-paste code covering raw HTTP, native SDKs, and agent frameworks per language, see Python, PHP, Node.js, and Go.
Currently supported providers
| URL segment | Upstream | Notes |
|---|---|---|
/openai | api.openai.com | Reference integration - see OpenAI SDK Integration |
/anthropic | api.anthropic.com | Native Anthropic Messages API protocol supported directly |
/groq | api.groq.com | OpenAI-compatible protocol |
/gemini | generativelanguage.googleapis.com | Native Gemini protocol; model can be taken from the URL path (/models/{model}:generateContent) instead of the body |
/ollama | ollama.com (or your own Ollama host) | NDJSON/JSONL streaming responses |
/openrouter | openrouter.ai | OpenAI-compatible protocol |
/azure | Customer-supplied, via X-Azure-Endpoint header | Azure OpenAI has no fixed upstream base URL - see below |
Each provider's upstream base URL can be overridden per-deployment via a {PROVIDER}_UPSTREAM_URL environment variable (e.g. OPENAI_UPSTREAM_URL), useful for pointing at a proxy or regional endpoint.
Cross-protocol calls
Because the gateway detects the incoming client protocol independently of the target provider, you can call a non-OpenAI provider using an OpenAI-shaped request body (or vice versa) and the gateway will translate it - see Routing & Providers for how protocol detection and translation work, and their current limits.
Azure OpenAI specifics
Azure requires an additional X-Azure-Endpoint header carrying your Azure OpenAI resource's https:// endpoint (validated to be an *.openai.azure.com/.azure.us/.azure.eu host) - Azure has no single static upstream URL the way other providers do, since each customer has a dedicated resource endpoint. See Gateway Authentication.
What "supported" means today
Support means: an adapter exists that can build the upstream request and, where cross-protocol translation is needed, translate request/response/streaming-chunk shapes. It does not imply cost data is available for every model on every provider - if Observra doesn't have pricing for a specific model yet, cost is simply left unset for that observation.