# Azure OpenAI

> Use your own Azure OpenAI or Azure AI Foundry deployment with ShopAssist: resource URL, deployment name and base model.

Source: https://shopassist.coec.dk/docs/ai/azure-openai · Updated 2026-10-01

## Create a deployment [#create-key]

As of October 2026, in the Azure portal or Azure AI Foundry:

1. Create an **Azure OpenAI** resource in an EU region.
2. In **Deployments → Deploy model**, deploy a chat model with the deployment type **Data Zone Standard (EU)** or a regional EU deployment. Note the **deployment name**.
3. Under **Keys and Endpoint**, copy a key and the endpoint, for example `https://contoso-ai.openai.azure.com/`.

## Account tier [#tier]

Any Azure subscription with Azure OpenAI access. Quota is set per deployment (tokens per minute).

## Recommended models [#models]

| Model | Id | Tier | Context window | Images | Processing |
| --- | --- | --- | --- | --- | --- |
| GPT-6 Luna (Azure EU Data Zone) | `gpt-6-luna` | Standard | 1,050,000 tokens | Yes | EU |
| GPT-6 Sol (Azure EU Data Zone) | `gpt-6-sol` | Premium | 1,050,000 tokens | Yes | EU |

## Fields [#fields]

| Field      | Notes                                                                                                                   |
| ---------- | ----------------------------------------------------------------------------------------------------------------------- |
| Base URL   | `https://<resource>.openai.azure.com/openai/v1/` (also `services.ai.azure.com` and `cognitiveservices.azure.com` hosts) |
| API key    | From **Keys and Endpoint**                                                                                              |
| Model      | The **deployment name**, not the model name                                                                             |
| Base model | The model behind the deployment, so ShopAssist knows its capabilities                                                   |

Without a base model and with a deployment name that isn't a known model id, capabilities come from the connection test only and the dashboard shows `azure_base_model_unknown`.

## Data location [#data-location]

> **Data location:** Use an EU Data Zone or EU regional deployment. Global deployments may process data anywhere.

## Connection test [#probe]

| Check | Required | What it tests | On failure |
| --- | --- | --- | --- |
| `auth` | Yes | The key is accepted (lists models or sends a tiny request) | `auth_failed`, `insufficient_quota`, `gemini_free_tier`, `endpoint_blocked`, `provider_unavailable`, `model_not_found` |
| `tools` | Yes | The model calls a tool with valid arguments and continues after the result | `tools_unsupported`: the model can't run the shopping tools |
| `ttft` | No (degraded) | The first answer event arrives within 8 seconds | `ttft_slow`: works, but shoppers wait |
| `parallel_tools` | No | Two tools are called in one step | `parallel_tools_unsupported`: slightly slower answers |
| `vision` | No | The model names the colour of a test image | `vision_unsupported`: visual search is off |
| `context` | Self-hosted only | A fact at the start of an 8,000-token prompt is recalled | `context_too_small`: the endpoint truncates prompts |

## Cost [#cost]

Estimate based on list prices on 2026-09-28; your provider bills you directly.

| Provider | Model | USD per 1,000 conversations | ≈ EUR per 1,000 conversations |
| --- | --- | --- | --- |
| Azure OpenAI | GPT-6 Luna | $3.61 | €3.10 |
| Mistral | Mistral Small 4 | $4.71 | €4.05 |
| OpenAI | GPT-5.6 Luna | $7.62 | €6.55 |
| Google Gemini | Gemini 3.1 Flash-Lite | $8.85 | €7.61 |
| OpenAI | GPT-5 mini | $9.85 | €8.47 |
| Google Gemini | Gemini 3.5 Flash-Lite | $12.02 | €10.34 |
| Mistral | Mistral Large 3 | $14.70 | €12.64 |
| OpenAI | GPT-5.4 mini | $26.55 | €22.83 |
| Anthropic | Claude Haiku 4.5 | $36.10 | €31.05 |
| Anthropic | Claude Sonnet 5 | $72.20 | €62.09 |

## Troubleshooting [#troubleshooting]

* **401 / `auth_failed`:** the key belongs to another resource, or was rotated.
* **`model_not_found`:** the deployment name is wrong, or the deployment was deleted.
* **429 / `rate_limited`:** raise the deployment's tokens-per-minute quota.
* **`content_filtered`:** Azure's content filter blocked a request; review the filter configuration of the deployment.
