Skip to main content
This article contains a quick reference and a detailed description of the quotas and limits for Azure OpenAI.

Scope of quota

Quotas and limits aren’t enforced at the tenant level. Instead, the highest level of quota restrictions is scoped at the Azure subscription level.

Regional quota allocation

Tokens per minute (TPM) and requests per minute (RPM) limits are defined per region, per subscription, and per model or deployment type. For example, if the gpt-4.1 Global Standard model is listed with a quota of 5 million TPM and 5,000 RPM, then each region where that model or deployment type is available has its own dedicated quota pool of that amount for each of your Azure subscriptions. Within a single Azure subscription, it’s possible to use a larger quantity of total TPM and RPM quota for a given model and deployment type, as long as you have resources and model deployments spread across multiple regions.

Quota tiers

We are introducing Quota Tiers to improve the Foundry Models experience and reduce friction as workloads scale. Quotas will now increase automatically with usage, helping avoid rate limit errors while also creating a fairer environment for all users. Seven tiers will be made available: Free Tier and Tiers 1 through 6 - with Tier 6 offering the highest quotas. A customer’s initial assigned tier is based on their current usage of that model and their current relationship with Microsoft, such as Enterprise Agreement (EA or MCA-E) status. 

What’s changing for me?

Previously, Foundry offered only Default and Enterprise quota levels for pay as you go offer type, with a large gap between each level and a longer process to request increases. With Quota Tiers, all users are assigned a tier with quotas equal to or higher than their previous levels. Any previously approved quota increases are retained and will not be reduced. As usage grows, Foundry automatically increases quotas by moving users to higher tiers, and additional quota can still be requested through the quota form.

How will a customer automatically move from one tier to another, for example what are the tier change criteria? 

Automatic tier upgrades are based primarily on customer consumption trends across Foundry Models over time. If a customer’s usage increases such that their current quota tier is limiting their ability to use Foundry Models the system will automatically upgrade the customer to the next higher tier. A customer’s relationship with Microsoft is also taken into account. Customers with Enterprise relationships (including EA and MCA-E) with Microsoft are assigned higher quota tiers. In addition, Microsoft will also consider a customer’s payment history to determine eligibility for automatic upgrades. 

Can I opt out of auto upgrades?

Yes, you can opt out of auto upgrades and you’ll remain in your current tier regardless of changes in your consumption. We recognize that some of our customers use quota to manage their billing. This isn’t the Azure best practice, however, we understand that if your system is configured that way we don’t want to break it. You can learn more about billing management and best practices here: Cost Management. To opt out, you can set the following flag to NoAutoUpgrade:
curl -X PATCH \
  "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.CognitiveServices/quotaTiers/default?api-version=2025-10-01-preview" \
  -H "Authorization: Bearer <YOUR_ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "properties": {
      "tierUpgradePolicy": "NoAutoUpgrade"
    }
  }'
The opt out feature is preview and may be subject to change/removal in the future.

Can I request more quota?

Yes, using the quota request form you can always request more quota. If the request is approved, the current tier will remain the same, but with more quota assigned.

Quota tier reference

Tier 1

Model NameDeployment TypeRequests Per Minute (RPM)Tokens Per Minute (TPM)
codex-miniGlobalStandard1,0001,000,000
computer-use-previewGlobalStandard4,500450,000
gpt-4.1DataZoneStandard300300,000
gpt-4.1GlobalStandard1,0001,000,000
gpt-4.1-miniDataZoneStandard2,0002,000,000
gpt-4.1-miniGlobalStandard5,0005,000,000
gpt-4.1-miniStandard6,0006,000,000
gpt-4.1-nanoDataZoneStandard2,0002,000,000
gpt-4.1-nanoGlobalStandard5,0005,000,000
gpt-4oDataZoneStandard300 / 10s300,000
gpt-4o-audio-previewGlobalStandard30000 / 10s30,000,000
gpt-4o-miniDataZoneStandard10,0001,000,000
gpt-4o-miniGlobalStandard20,0002,000,000
gpt-4o-mini-audio-previewGlobalStandard30000 / 10s30,000,000
gpt-4o-mini-realtime-previewGlobalStandard366,000
gpt-4o-realtime-previewGlobalStandard366,000
gpt-5DataZoneStandard3,000300,000
gpt-5GlobalStandard10,0001,000,000
gpt-5-chatGlobalStandard1,0001,000,000
gpt-5-codexGlobalStandard1,0001,000,000
gpt-5-miniDataZoneStandard300300,000
gpt-5-miniGlobalStandard1,0001,000,000
gpt-5-nanoDataZoneStandard2,0002,000,000
gpt-5-nanoGlobalStandard5,0005,000,000
gpt-5-proGlobalStandard1,600160,000
gpt-5.1DataZoneStandard3,000300,000
gpt-5.1GlobalStandard10,0001,000,000
gpt-5.1-chatGlobalStandard10,0001,000,000
gpt-5.1-codexDataZoneStandard3,000300,000
gpt-5.1-codexGlobalStandard1,0001,000,000
gpt-5.1-codex-maxGlobalStandard10,0001,000,000
gpt-5.1-codex-miniGlobalStandard1,0001,000,000
gpt-5.2DataZoneStandard3,000300,000
gpt-5.2GlobalStandard10,0001,000,000
gpt-5.2-chatGlobalStandard10,0001,000,000
gpt-5.3-chatGlobalStandard1,0001,000,000
gpt-5.2-codexGlobalStandard10,0001,000,000
gpt-5.3-codexGlobalStandard10,0001,000,000
gpt-5.4DataZoneStandard300300,000
gpt-5.4GlobalStandard10,0001,000,000
gpt-5.4-proGlobalStandard160160,000
gpt-audioGlobalStandard30000 / 10s30,000,000
gpt-image-1GlobalStandard9-
gpt-image-1-miniGlobalStandard12-
gpt-image-1.5GlobalStandard9-
gpt-realtimeGlobalStandard200100,000
model-routerDataZoneStandard150150,000
o1DataZoneStandard100600,000
o1GlobalStandard5003,000,000
o3DataZoneStandard300300,000
o3GlobalStandard1,0001,000,000
o3-deep-researchGlobalStandard3,0003,000,000
o3-miniDataZoneStandard2002,000,000
o3-miniGlobalStandard5005,000,000
o3-proGlobalStandard1601,600,000
o4-miniDataZoneStandard300 / 10s300,000
o4-miniGlobalStandard1,0001,000,000
text-embedding-3-largeDataZoneStandard1,0001,000,000
text-embedding-3-largeGlobalStandard1000 / 10s1,000,000
text-embedding-3-smallDataZoneStandard1,0001,000,000
text-embedding-3-smallGlobalStandard1000 / 10s1,000,000

Quotas and limits reference

The following section provides you with a quick guide to the default quotas and limits that apply to Azure OpenAI:
Limit nameLimit value
Azure OpenAI resources per region, per Azure subscription30.
Default DALL-E 2 quota limits2 concurrent requests.
Default DALL-E 3 quota limits6 requests per minute
Default GPT-image-1 quota limits9 requests per minute
Default GPT-image-1-mini quota limits12 requests per minute
Default GPT-image-1.5 quota limits9 requests per minute
Default Sora quota limits60 requests per minute.
Default Sora 2 quota limits2 job requests1 per minute
Default speech-to-text audio API quota limits3 requests per minute.
Maximum prompt tokens per requestVaries per model. For more information, see Azure OpenAI models.
Maximum standard deployments per resource32.
Maximum fine-tuned model deployments10.
Total number of training jobs per resource100.
Maximum simultaneously running training jobs per resourceStandard and global training: 3;
Developer training: 5
Maximum training jobs queued20.
Maximum files per resource (fine-tuning)100.
Total size of all files per resource (fine-tuning)1 GB.
Maximum training job time (job fails if exceeded)720 hours.
Maximum training job size (tokens in training file) x (# of epochs)2 billion.
Maximum size of all files per upload (Azure OpenAI on your data)16 MB.
Maximum number of inputs in array with /embeddings2,048.
Maximum number of /chat/completions messages2,048.
Maximum number of /chat/completions functions128.
Maximum number of /chat/completions tools128.
Maximum number of provisioned throughput units per deployment100,000.
Maximum files per assistant or thread10,000 when using the API or the Microsoft Foundry portal.
Maximum file size for assistants and fine-tuning512 MB via the API

200 MB via the Foundry portal.
Maximum file upload requests per resource30 requests per second.
Maximum size for all uploaded files for assistants200 GB.
Assistants token limit2,000,000 token limit.
GPT-4o and GPT-4.1 maximum images per request (number of images in the messages array or conversation history)50.
GPT-4 vision-preview and GPT-4 turbo-2024-04-09 default maximum tokens16.

Increase the max_tokens parameter value to avoid truncated responses. GPT-4o maximum tokens defaults to 4,096.
Maximum number of custom headers in API requests210.
Message character limit1,048,576.
Message size for audio files20 MB.
1 The Sora 2 RPM quota only counts video job requests. Other types of requests aren’t rate-limited. 2 Our current APIs allow up to 10 custom headers, which are passed through the pipeline and returned. Some customers now exceed this header count, which results in HTTP 431 errors. There’s no solution for this error, other than to reduce header volume. In future API versions, we won’t pass through custom headers. We recommend that customers don’t depend on custom headers in future system architectures.
Quota limits are subject to change.

model-router rate limits

ModelDeployment TypeDefault RPMDefault TPMEnterprise and MCA-E RPMEnterprise and MCA-E TPM
model-router
(2025-11-18)
DataZoneStandard150150,000300300,000
model-router
(2025-11-18)
GlobalStandard250250,000400400,000

Batch limits

Limit nameLimit value
Maximum Batch input files - (no expiration)500
Maximum Batch input files - (expiration set)10,000
Maximum input file size200 MB
Maximum input file size - Bring your own storage (BYOS)1 GB
Maximum requests per file100,000
Batch file limits don’t apply to output files (for example, result.jsonl, and error.jsonl). To remove batch input file limits, use Batch with Azure Blob Storage.

Batch quota

The table shows the batch quota limit. Quota values for global batch are represented in terms of enqueued tokens. When you submit a file for batch processing, the number of tokens in the file is counted. Until the batch job reaches a terminal state, those tokens count against your total enqueued token limit.

Global batch

ModelEnterprise and MCA-EDefaultMonthly credit card-based subscriptionsMSDN subscriptionsAzure for Students, free trials
gpt-4.15B200M50M90KN/A
gpt-4.1 mini15B1B50M90KN/A
gpt-4.1-nano15B1B50M90KN/A
gpt-4o5B200M50M90KN/A
gpt-4o-mini15B1B50M90KN/A
gpt-4-turbo300M80M40M90KN/A
gpt-4150M30M5M100KN/A
o3-mini15B1B50M90KN/A
o4-mini15B1B50M90KN/A
gpt-55B200M50M90KN/A
gpt-5.15B200M50M90KN/A
B = billion | M = million | K = thousand

Data zone batch

ModelEnterprise and MCA-EDefaultMonthly credit card-based subscriptionsMSDN subscriptionsAzure for Students, free trials
gpt-4.1500M30M30M90KN/A
gpt-4.1-mini1.5B100M50M90KN/A
gpt-4o500M30M30M90KN/A
gpt-4o-mini1.5B100M50M90KN/A
o3-mini1.5B100M50M90KN/A
gpt-55B200M50M90KN/A
gpt-5.15B200M50M90KN/A

gpt-oss

ModelTokens per minute (TPM)Requests per minute (RPM)
gpt-oss-120b5 M5 K

Usage tiers

Global Standard deployments use the global infrastructure of Azure. They dynamically route customer traffic to the data center with the best availability for the customer’s inference requests. Similarly, Data Zone Standard deployments allow you to use the global infrastructure of Azure to dynamically route traffic to the data center within the Microsoft-defined data zone with the best availability for each request. This practice enables more consistent latency for customers with low to medium levels of traffic. Customers with high sustained levels of usage might see greater variability in response latency. Azure OpenAI usage tiers are designed to provide consistent performance for most customers with low to medium levels of traffic. Each usage tier defines the maximum throughput (tokens per minute) you can expect with predictable latency. When your usage stays within your assigned tier, latency remains stable and response times are consistent.

What happens if you exceed your usage tier?

  • If your request throughput exceeds your usage tier—especially during periods of high demand—your response latency may increase significantly.
  • Latency can vary and, in some cases, may be more than two times higher than when operating within your usage tier.
  • This variability is most noticeable for customers with high sustained usage or bursty traffic patterns.
If you encounter 429 errors or notice increased latency variability, here’s what you should do:
  • Request a quota increase: visit the Azure portal to request a higher quota for your subscription.
  • Consider upgrading to a premium offer (PTU): for latency-critical or high-volume workloads, upgrade to Provisioned Throughput Units (PTU). PTU provides dedicated resources, guaranteed capacity, and predictable latency—even at scale. This is the best choice for mission-critical applications that require consistent performance.
  • Monitor your usage: regularly review your usage metrics in the Azure portal to ensure you’re operating within your tier limits. Adjust your workload or deployment strategy as needed.
The usage limit determines the level of usage above which customers might see larger variability in response latency. A customer’s usage is defined per model. It’s the total number of tokens consumed across all deployments in all subscriptions in all regions for a given tenant.
Usage tiers apply only to Standard, Data Zone Standard, and Global Standard deployment types. Usage tiers don’t apply to global batch and provisioned throughput deployments.

Global Standard, Data Zone Standard, and Standard

ModelUsage tiers per month
gpt-532 billion tokens
gpt-5-mini160 billion tokens
gpt-5-nano800 billion tokens
gpt-5-chat32 billion tokens
gpt-4 + gpt-4-32k (all versions)6 billion tokens
gpt-4o12 billion tokens
gpt-4o-mini85 billion tokens
o3-mini50 billion tokens
o14 billion tokens
o4-mini50 billion tokens
o35 billion tokens
gpt-4.130 billion tokens
gpt-4.1-mini150 billion tokens
gpt-4.1-nano550 billion tokens

General best practices to remain within rate limits

To minimize issues related to rate limits, it’s a good idea to use the following techniques:
  • Implement retry logic in your application.
  • Avoid sharp changes in the workload. Increase the workload gradually.
  • Test different load increase patterns.
  • Increase the quota assigned to your deployment. Move quota from another deployment, if necessary.

Request quota increases

Submit the quota increase request form to request quota increases for Foundry Models sold directly by Azure, Azure OpenAI models, and Anthropic models. Except for Anthropic models, Models from partners and community don’t support quota increases. Quota increase requests are processed in the order they’re received, and priority goes to customers who actively use their existing quota allocation. Requests that don’t meet this condition might be denied.

Regional quota capacity limits

You can view quota availability by region for your subscription in the Foundry portal. To view quota capacity by region for a specific model or version, you can query the capacity API for your subscription. Provide a subscriptionId, model_name, and model_version and the API returns the available capacity for that model across all regions and deployment types for your subscription.
Currently, both the Foundry portal and the capacity API return quota/capacity information for models that are retired and no longer available.
See the API reference. Before you run the example:
  • Install dependencies: pip install azure-identity requests
  • Sign in with an Azure identity that can read model capacities for the subscription.
import requests
import json
from azure.identity import DefaultAzureCredential

subscriptionId = "Replace with your subscription ID" #replace with your subscription ID
model_name = "gpt-4o"     # Example value, replace with model name
model_version = "2024-08-06"   # Example value, replace with model version

token_credential = DefaultAzureCredential()
token = token_credential.get_token('https://management.azure.com/.default')
headers = {'Authorization': 'Bearer ' + token.token}

url = f"https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.CognitiveServices/modelCapacities"
params = {
    "api-version": "2024-06-01-preview",
    "modelFormat": "OpenAI",
    "modelName": model_name,
    "modelVersion": model_version
}

response = requests.get(url, params=params, headers=headers)
model_capacity = response.json()

print(json.dumps(model_capacity, indent=2))