Azure OpenAI Pricing: Same Rates, a Slower Chatbot
Azure OpenAI pricing for GPT-6.1 Sol is $2 per million input tokens and $10 per million output tokens on a Global deployment: exactly what OpenAI charges for the same model. Pin the deployment to a Data Zone and the rate goes up. Microsoft’s price list adds 10% for a US Data Zone and 20% for an EU one. So the honest answer to “is Azure OpenAI more expensive?” is: not per token, unless you need your data kept in a region. But a chatbot isn’t billed per token. It’s billed per answer, and that depends on how the model behaves on the platform you send it to.
We measured it. On 17 October 2026 we sent the same WordPress chatbot request to GPT-6.1 Sol and GPT-6 Luna on OpenAI, Azure Global, Azure US and EU Data Zones, Amazon Bedrock and OpenAI Flex, from our own production server: 78 streamed calls in all. On OpenAI, 1,000 Sol answers cost $8.80 without caching and took 2.7 seconds each. On Azure Global the price per token was the same, but the bill was 4% higher, and each answer took 5.1 seconds, almost twice as long. Every route answered every question correctly.
Azure OpenAI pricing in October 2026
These are the pay-as-you-go rates from Microsoft’s Azure Retail Prices API, read on 17 October 2026 for East US 2 and Sweden Central. Prices are per million tokens, for prompts under the long-context threshold. “Data Zone” keeps processing inside the US or the EU. “Global” lets Azure route the request to any region.
| Model and deployment | Input / 1M | Cached input / 1M | Cache write / 1M | Output / 1M |
|---|---|---|---|---|
| GPT-6.1 Sol, Global Standard | $2.00 | $0.10 | $2.50 | $10.00 |
| GPT-6.1 Sol, Data Zone US | $2.20 | $0.11 | $2.75 | $11.00 |
| GPT-6.1 Sol, Data Zone EU | $2.40 | $0.12 | $3.00 | $12.00 |
| GPT-6.1 Sol, Global Flex | $1.00 | $0.05 | $1.25 | $5.00 |
| GPT-6 Luna, Global Standard | $0.10 | $0.01 | $0.125 | $0.50 |
| GPT-6 Luna, Data Zone US | $0.11 | $0.011 | $0.1375 | $0.55 |
| GPT-6 Luna, Data Zone EU | $0.12 | $0.012 | $0.15 | $0.60 |
| GPT-6 Luna, Global Flex | $0.05 | $0.005 | $0.0625 | $0.25 |
| GPT-6 Astra, Global Standard | $10.00 | $1.00 | $12.50 | $50.00 |
A few things in that list are easy to miss:
- Global matches OpenAI to the cent. OpenAI’s own rates for GPT-6.1 Sol and GPT-6 Luna, as listed through OpenRouter on the same day, are identical to Azure’s Global Standard column, including the cached and cache-write rates.
- The EU premium is 20%, not 10%. East US 2 and West US 3 price the US Data Zone at 1.1 times Global. Sweden Central, France Central and Germany West Central all price the EU Data Zone at 1.2 times.
- Cache writes cost extra. The GPT-6 generation bills the first send of a cacheable prompt at 1.25 times the input rate. Later hits cost 5% of the input rate on Sol and 10% on Luna. That applies on OpenAI’s own API too, not only on Azure.
- Flex is Global only. Azure’s Flex meters for the GPT-6 family started on 1 October 2026 at half the Standard price. There’s no Data Zone Flex in the price list, so if you need EU residency you can’t get the discount.
- Long prompts cost double. Above the long-context threshold (272,000 prompt tokens on OpenAI’s side), GPT-6.1 Sol moves to $4 input and $15 output on Global. A website chatbot will never get near it.
Provisioned throughput (PTU) pricing
Azure also sells capacity by the hour instead of by the token. The retail list prices a Provisioned Throughput Unit at $1.00 an hour on Global, $1.10 on Data Zone and $2.00 on Regional. Microsoft’s billing docs are clear about the catch: you pay for every deployed PTU, every hour, whether or not a single request arrives, and a deployment can’t be paused. One PTU at the hourly rate is about $730 a month before any reservation discount, and minimum deployment sizes vary by model. For comparison, our test puts 10,000 GPT-6.1 Sol chatbot answers at about $88 on pay-as-you-go. PTU is for companies with steady, heavy traffic and a latency guarantee to meet. A WordPress site chatbot is not that.
How we tested Azure OpenAI pricing on a chatbot
Price lists tell you the rate. They don’t tell you how many tokens the same model spends on the same question when it runs on different infrastructure. So we sent real requests.
- The request: the exact shape MxChat sends. Our site’s system prompt plus four knowledge-base excerpts from our own documentation, about 4,090 input tokens per call.
- The questions: three real support questions: does MxChat look up WooCommerce orders, do you need Pinecone for the knowledge base, and can a visitor be handed to a human on Slack or Telegram.
- The routes: GPT-6.1 Sol on OpenAI, OpenAI Flex, Azure Global, Azure US Data Zone, Azure EU Data Zone and Amazon Bedrock (US East), plus OpenRouter’s own choice. GPT-6 Luna on the same routes minus Flex. 13 routes, each question asked twice, 78 calls.
- How: streamed calls through OpenRouter with the provider pinned and fallbacks off, from our WordPress server in the US. We recorded the time to the first visible word, the time to the finished answer, and the billed cost OpenRouter reported for each call.
One thing to know about OpenRouter’s Azure endpoints: its US and EU Azure routes are priced at 1.1 times OpenAI, which matches Azure’s US Data Zone but is cheaper than Azure’s own EU Data Zone list price. If you hold your own Azure EU deployment, you pay the 1.2 times rate in the table above. We note where that changes the numbers.
All 78 calls returned an answer on the first try, and all 78 answers were correct on our three questions. They’re easy questions with the answer in the excerpts, so this was a cost and speed test, not an accuracy contest.
Results: GPT-6.1 Sol on Azure vs OpenAI
Each request was sent twice. The first send wrote the prompt to the cache, which the GPT-6 family bills at 1.25 times the input rate. The second send hit the cache. A real chatbot sits between the two: the system prompt repeats on every question, but the knowledge-base excerpts change. So we also show the plain no-cache cost, calculated from the tokens each route actually used.
| GPT-6.1 Sol route | First send (cache write), per 1k | Repeat (cache hit), per 1k | No cache, per 1k | First word | Full answer |
|---|---|---|---|---|---|
| OpenAI | $10.84 | $1.04 | $8.80 | 1.36 s | 2.66 s |
| Azure Global | $11.19 | $1.29 | $9.11 | 4.76 s | 5.08 s |
| Azure US Data Zone | not seen* | $1.38 | $9.92 | 4.85 s | 5.64 s |
| Azure EU Data Zone (OpenRouter price) | $12.32 | $1.34 | $9.98 | 3.39 s | 4.32 s |
| Azure EU Data Zone (Azure list price) | about $13.44 | about $1.46 | about $10.89 | – | – |
| Amazon Bedrock, US East | $12.06 | $1.62 | $9.99 | 2.07 s | 2.47 s |
| OpenAI Flex | $5.41 | $0.45 | $4.36 | 8.03 s | 8.78 s |
| OpenRouter’s own pick (always OpenAI) | – | $0.98 | $8.75 | 1.41 s | 2.85 s |
*The US Data Zone route found our prompts already cached by the earlier Azure Global calls, so it never paid a cache write. Times are medians of six calls. The EU list-price row is our tokens re-priced at Azure’s 1.2 times EU rate, not a separate measurement.

Same price per token, a bigger bill
Azure Global charges OpenAI’s rates, yet the same answers cost 4% more without caching and 24% more on a cache hit. The reason is hidden reasoning. GPT-6.1 Sol thinks briefly before it writes, and you pay for those tokens at the output rate. On OpenAI it spent an average of 10 reasoning tokens per answer. On Azure Global it spent 38, on Azure’s Data Zones 34 to 38, and on Bedrock 35. The visible answers were the same length on every route, about 51 to 54 output tokens.
We didn’t set a reasoning effort in any request, so each platform used its own default for the model, and the defaults are evidently not the same. On a cached request, where input is almost free, those extra 24 to 28 tokens are a large share of the bill. If you move a chatbot to Azure, set the reasoning effort yourself rather than trusting the platform’s default.
The speed gap is bigger than the price gap
The surprise was latency. From a server in the US, OpenAI showed the first word of a Sol answer in 1.36 seconds and finished in 2.66. Azure Global took 4.76 seconds to the first word and 5.08 to finish. On Azure the extra time came before the answer started, so streaming doesn’t hide it: the visitor watches a typing indicator for nearly five seconds.
Amazon Bedrock, which now sells GPT-6.1 Sol in US East at 1.1 times OpenAI’s rates, was the fastest route we tried at 2.47 seconds. OpenAI Flex halves the bill and costs you about six extra seconds per answer, which makes it a poor fit for a live chat window.

Results: GPT-6 Luna on Azure vs OpenAI
GPT-6 Luna is the model most WordPress chatbots should start with. It costs a twentieth of Sol per token, and on our three support questions its answers were just as correct, if a little plainer.
| GPT-6 Luna route | First send (cache write), per 1k | Repeat (cache hit), per 1k | No cache, per 1k | Full answer, median | Slowest of six |
|---|---|---|---|---|---|
| OpenAI | $0.58 | $0.07 | $0.46 | 2.48 s | 2.99 s |
| Azure Global | not seen* | $0.09 | $0.46 | 4.36 s | 16.62 s |
| Azure US Data Zone | $0.61 | $0.09 | $0.50 | 3.89 s | 18.43 s |
| Azure EU Data Zone (OpenRouter price) | $0.61 | $0.12 | $0.51 | 2.77 s | 3.52 s |
| Amazon Bedrock, US East | $0.61 | $0.11 | $0.51 | 1.53 s | 2.39 s |
| OpenRouter’s own pick | – | $0.10 | $0.46 | 3.37 s | 5.49 s |
*Same cache effect as above: another route had already written these prompts.
Luna’s reasoning was much the same on every platform (48 to 64 hidden tokens), so the cost differences are just the list prices: Global matches OpenAI, the Data Zones and Bedrock add 10%. At these rates the difference is a few cents per thousand answers. What separates the routes is speed. Two of the twelve Azure Global and US Data Zone calls took more than 16 seconds; nothing on OpenAI, the EU Data Zone or Bedrock took longer than 3.6 seconds. Left to choose, OpenRouter sent five of six Luna requests to Azure and one to OpenAI.
What it costs per month
Here is what the measured no-cache cost per answer means for a site chatbot, at three traffic levels. The EU column uses Azure’s own 1.2 times list price.
| Answers per month | Sol on OpenAI or Azure Global | Sol on Azure EU Data Zone | Luna on OpenAI or Azure Global | Luna on Azure EU Data Zone |
|---|---|---|---|---|
| 1,000 | $8.80 to $9.11 | about $10.89 | $0.46 | about $0.56 |
| 10,000 | $88 to $91 | about $109 | $4.60 | about $5.60 |
| 100,000 | $880 to $911 | about $1,089 | $46 | about $56 |
Prompt caching can cut those figures sharply when your system prompt is long and stable. Our OpenAI Batch API test shows why the input side is where the money goes on a knowledge-base chatbot, and the same logic applies here: on every route, input was 85% or more of a no-cache Sol bill.

When Azure OpenAI is worth it
None of this makes Azure the wrong choice. It makes it a choice you should make for the right reasons. Azure OpenAI earns its place when:
- You need data residency. A Data Zone deployment keeps processing inside the EU or the US. For an EU business with a strict data protection officer, the 20% premium may be the cheapest way to get a yes.
- Your company already runs on Azure. One invoice, existing committed spend, Microsoft Entra ID for access, private networking and the compliance paperwork your security team already signed off.
- You want enterprise support and SLAs that a direct OpenAI API account at a small business won’t come with.
It’s a weaker choice when you’re a small site that just wants the cheapest fast answer. Then OpenAI direct (or GPT-6 Luna anywhere) wins on speed, and Global Standard on Azure saves nothing on price. If you’re already on AWS, our AWS Bedrock pricing test covers the same question for Amazon’s platform, and Bedrock was the fastest route in today’s test too.
How to cut an Azure OpenAI chatbot bill
- Use Global Standard unless you need residency. It’s the same price as OpenAI. A Data Zone is a 10% or 20% surcharge for a guarantee you may not need.
- Set the reasoning effort. Don’t let the platform default decide. Our GPT-6 Luna reasoning-effort test found the setting can halve a bill.
- Start with Luna. On short support answers it was correct every time at about 5% of Sol’s cost.
- Keep the system prompt stable. Put the fixed instructions first and the changing knowledge-base text after, so the cacheable prefix stays the same between questions.
- Skip Flex for live chat. Half price, but 8.8 seconds per answer in our test. Keep it for overnight jobs.
How to connect Azure OpenAI to a WordPress chatbot
MxChat talks to Azure OpenAI through its Custom (OpenAI-compatible) provider. In the MxChat settings, open the API Keys tab and fill in four fields:
- Base URL:
https://<resource>.openai.azure.com/openai/deployments/<deployment>, using your Azure resource name and the name you gave your model deployment. - API key: the key from your Azure OpenAI resource.
- Auth scheme: choose “api-key header (Azure OpenAI)”. Azure doesn’t use the Bearer header that OpenAI does.
- API version: required for Azure, for example
2024-08-01-preview. MxChat appends it to the request as?api-version=.
Then select “Custom (OpenAI-compatible)” as the chat model. If the deployment name is already in the Base URL, leave the model field empty. The full walkthrough is in the MxChat core documentation (Custom Provider section). The deployment type (Global, Data Zone or Provisioned) is chosen in Azure when you create the deployment, not in WordPress, so decide on residency before you deploy.
If you’d rather not manage an Azure resource at all, MxChat also connects to OpenAI directly and to OpenRouter, which can route to Azure for you. Our OpenRouter pricing test covers what that adds to the bill. Knowledge-base search, WooCommerce order lookups and human handoff come with MxChat Pro.
Which should you choose?
| If you want… | Use | Why |
|---|---|---|
| The cheapest good chatbot | GPT-6 Luna on OpenAI or Azure Global | $0.46 per 1,000 answers without caching, correct on every question |
| The fastest Sol answers | GPT-6.1 Sol on Amazon Bedrock or OpenAI | 2.5 to 2.7 s per answer, against about 5 s on Azure Global |
| EU data residency | Azure EU Data Zone | 20% over Global, and the EU route was faster than Azure Global from our server |
| Azure billing with no premium | Azure Global Standard, effort set explicitly | Same rates as OpenAI; the 4% to 24% gap we saw came from extra reasoning |
| The lowest Sol bill, speed no object | Flex (OpenAI or Azure Global) | Half price, but about 9 s per answer |
Frequently asked questions
How much does Azure OpenAI cost?
Azure OpenAI charges per token on pay-as-you-go deployments. On 17 October 2026, GPT-6.1 Sol on a Global deployment was $2 per million input tokens and $10 per million output, and GPT-6 Luna was $0.10 and $0.50. Data Zone deployments cost 10% more in the US and 20% more in the EU. In our WordPress chatbot test, 1,000 Sol answers cost about $9 without caching and 1,000 Luna answers about $0.46.
Is Azure OpenAI more expensive than OpenAI?
Not per token on a Global deployment: the rates are identical. Data Zone deployments carry a 10% or 20% premium. In our test the same Sol answers still cost 4% more on Azure Global without caching, because the model spent more hidden reasoning tokens there, and they took about twice as long.
What is the difference between Global and Data Zone on Azure?
A Global deployment lets Azure process your request in any region it chooses. A Data Zone deployment keeps processing inside a geographic zone, currently the US or the EU. Global is cheaper and is priced the same as OpenAI. Data Zone is for organisations with data residency requirements.
Does Azure OpenAI have a free tier?
No. Azure OpenAI has no free tier of its own. New Azure accounts may get general sign-up credit that can be spent on it, but once that’s used you pay the per-token rates above.
Does Azure OpenAI support prompt caching?
Yes. On GPT-6.1 Sol, cached input costs $0.10 per million tokens on Global, 5% of the normal input rate. The first send of a cacheable prompt is billed as a cache write at $2.50 per million, 1.25 times the input rate. Our test confirmed both: the first send of each request cost more than an uncached call, and the repeat cost about a tenth as much.
Is Azure OpenAI slower than OpenAI?
In our test from a US server, yes. GPT-6.1 Sol took a median 5.08 seconds per chatbot answer on Azure Global against 2.66 seconds on OpenAI, and GPT-6 Luna took 4.36 seconds against 2.48. Azure’s EU Data Zone and Amazon Bedrock were both faster than Azure Global. Your results will depend on region and load, so time your own deployment before going live.