Setup
Add Azure OpenAI
Your Azure credits, the same Conifer wire.
Azure OpenAI is not a normal OpenAI key. The gateway needs the resource URL and the key. Deployment names are not stored. Call each one as the request model.
Save the endpoint
In the console keys view, pick Azure OpenAI and paste:
- Resource URL:
https://{resource}.openai.azure.com/openai/v1 - The Azure API key for that resource
The store is PUT /v1/keys/azure with {"api_key":"...","base_url":"https://{resource}.openai.azure.com/openai/v1"}. No deployments field (retired). A 422 names azure if the row fails; a 404 means no row. The header the gateway sends upstream is api-key.
Same values from the CLI, stored on the gateway (callers keep using CONIFER_API_KEY):
printf %s "$AZURE_KEY" | conifer keys add azure --url https://{resource}.openai.azure.com/openai/v1To register Azure as a local CLI endpoint instead, so conifer run can hit the resource directly:
printf %s "$AZURE_KEY" | conifer endpoints add byok azure --url https://{resource}.openai.azure.com/openai/v1The key is verified live against the resource and stored sealed. You can see it (provider, last four, resource URL) and remove it on the same console page. Mint a Conifer API key first at the console if callers will hit api.conifer.build.
Call a deployment
curl https://api.conifer.build/v1/chat/completions \
-H "Authorization: Bearer $CONIFER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "YOUR_DEPLOYMENT_NAME",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "three names for a build cache"}]
}'Set model to the Azure deployment name, or azure/<deployment>. The gateway maps nothing. Your deployments are not listed in GET /v1/models. A name the resource does not serve returns Azure’s own error.
One collision rule: a deployment named exactly like a catalog model (for example gpt-4o) routes to the catalog, not your resource. Give deployments distinct names.