# OpenAI

> Use your own OpenAI API key with ShopAssist, including organization and project ids and EU data residency.

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

## Create a key [#create-key]

As of October 2026, in the OpenAI platform:

1. Open **platform.openai.com → Settings → Projects** and create a project for ShopAssist. For EU processing, create it in the **Europe** region.
2. In the project, open **API keys → Create new secret key**, name it "ShopAssist" and copy it.
3. Make sure the project has billing set up and a usage limit that fits your traffic.

## Account tier [#tier]

Any paid API account works. New accounts start with low rate limits; ShopAssist reports `rate_limited` when you hit them. Raise your usage tier at OpenAI as traffic grows.

## Recommended models [#models]

| Model | Id | Tier | Context window | Images | Processing |
| --- | --- | --- | --- | --- | --- |
| GPT-5.6 Luna | `gpt-5.6-luna` | Standard | 1,050,000 tokens | Yes | global |
| GPT-6 Astra | `gpt-6-astra` | Premium | 1,050,000 tokens | Yes | global |
| GPT-6 Luna | `gpt-6-luna` | Standard | 1,050,000 tokens | Yes | global |
| GPT-6 Sol | `gpt-6-sol` | Premium | 1,050,000 tokens | Yes | global |

## Fields [#fields]

| Field                   | Notes                                                                           |
| ----------------------- | ------------------------------------------------------------------------------- |
| API key                 | `sk-…`; stored encrypted                                                        |
| Organization (optional) | `org-…`, if your key belongs to several organizations                           |
| Project (optional)      | `proj_…`                                                                        |
| EU data residency       | Choose **Europe (eu.api.openai.com)** for projects created in the Europe region |
| Model                   | A model from the list above or any current `gpt-` model                         |

## Data location [#data-location]

> **Data location:** Use a project created in the Europe region (eu.api.openai.com) for EU processing. Abuse-monitoring logs may be kept up to 30 days unless you have zero data retention or modified abuse monitoring.

## 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 was revoked or belongs to another project. Create a new key in the right project.
* **429 / `insufficient_quota`:** the account has no credit or hit its monthly limit. Add credit or raise the limit.
* **429 / `rate_limited`:** your usage tier is too low for your traffic; add a [fallback](/docs/ai/byok#fallback).
* **`model_not_found`:** the model isn't enabled for the project, or was retired.
* **EU residency errors:** an EU key only works with the EU setting, and a non-EU key only without it.
