{"slug": "gpt-5-6-luna-on-foundry-ptu-sizing-paygo-vs-ptu-spillover-pricing", "title": "GPT-5.6 Luna on Foundry: PTU Sizing, PayGo vs. PTU + Spillover Pricing", "summary": "Microsoft Foundry's provisioned throughput (PTU) sizing for GPT-5.6 Luna can be calculated using a formula that accounts for peak RPM, token sizes, and cache rate, as demonstrated in a developer's guide. The example shows that a workload with 1,000 RPM, 1,200 input tokens, and 200 output tokens requires 80 PTUs without caching, but only 60 PTUs with a 50% cache rate. The guide also compares PTU deployments with pay-as-you-go pricing for fluctuating traffic.", "body_md": "A quick note before we start: While this article focuses on GPT-5.6 Luna to make the pricing and PTU calculations concrete, the same methodology applies to other models when their model-specific throughput and pricing values are substituted.\n\nProvisioned Throughput provides a dedicated, fixed amount of processing capacity exclusively for your model deployment. Unlike Standard/PayGo, it provides a model-specific latency SLA, and its capacity is not shared across tenants.\n\n| Input | Description |\n|---|---|\nModel and Version |\nThe model determines which Input TPM per PTU and output-to-input ratio values to use. Each model has a\n|\nDeployment type |\nThe provisioned deployment type: Global Provisioned, Data Zone Provisioned, or Regional Provisioned. |\nPeak RPM |\nThe expected peak number of calls per minute sent to the model. |\nAverage prompt size |\nThe average number of input tokens per request. |\nAverage response size |\nThe average number of output tokens per request. |\nCache rate |\nThe percentage of input tokens served from the prompt cache. Cached tokens don't consume any PTU capacity. |\n\n| FORMULAS |\n|---|\n`Input TPM` = `Peak RPM` × `Average input tokens per request`\n|\n`Output TPM` = `Peak RPM` × `Average output tokens per request`\n|\n`Effective Input TPM` = `Input TPM` × (1 - `Cache rate` ) |\n`Normalized TPM` = `Effective Input TPM` + (`Output-to-input ratio` × `Output TPM` ) |\n`Estimated PTUs` = `Normalized TPM` / `Input TPM per PTU`\n|\n\nNote:`Input TPM`\n\nis the workload-specific calculated volume, whereas`Input TPM per PTU`\n\nis a model-specific sizing constant. For example, some listed`Input TPM per PTU`\n\nvalues are 30,000 for GPT-5.6 Luna, 3,000 for GPT-5.6 Terra, and 1,200 for GPT-5.6 Sol.\n\n**Representative sample:**\n\nLet's suppose your application sends requests at a peak rate of **1,000 RPM**, with an average prompt size of **1,200 tokens** and an average response size of **200 tokens**, using the **gpt-5.6-luna** model with a **Global Provisioned** deployment.\n\nBased on the [Microsoft Foundry PTU sizing table](https://learn.microsoft.com/en-us/azure/foundry/openai/how-to/provisioned-throughput-sizing#latest-azure-openai-models), `gpt-5.6-luna`\n\nhas these constants:\n\n| GPT-5.6 LUNA SIZING CONSTANT | VALUE |\n|---|---|\n| Input TPM per PTU | 30,000 |\n| Output-to-input ratio | 6 |\n| Minimum Global Provisioned deployment | 15 PTUs |\n| Global Provisioned scale increment | 5 PTUs |\n\n| CALCULATION |\n|---|\n`Input TPM` = 1,000 × 1,200 = 1,200,000\n|\n`Output TPM` = 1,000 × 200 = 200,000\n|\n`Normalized TPM` = 1,200,000 + (6 × 200,000) = 2,400,000\n|\n`Estimated PTUs` = 2,400,000 / 30,000 = 80 PTUs\n|\n`PTUs deployed` = 80 PTUs\n|\n\n| CALCULATION |\n|---|\n`Input TPM` = 1,000 × 1,200 = 1,200,000\n|\n`Effective Input TPM` = 1,200,000 × (1 - 0.50) = 600,000\n|\n`Output TPM` = 1,000 × 200 = 200,000\n|\n`Normalized TPM` = 600,000 + (6 × 200,000) = 1,800,000\n|\n`Estimated PTUs` = 1,800,000 / 30,000 = 60 PTUs\n|\n`PTUs deployed` = 60 PTUs\n|\n\n| Peak RPM | Prompt size | Response size | Cache rate | Effective Input TPM | Output TPM | Normalized TPM | Estimated PTUs | PTUs deployed |\n|---|---|---|---|---|---|---|---|---|\n| 1,000 | 1,200 | 200 | 0% | 1,200,000 | 200,000 | 2,400,000 | 80.00 | 80 |\n| 1,000 | 1,200 | 200 | 50% | 600,000 | 200,000 | 1,800,000 | 60.00 | 60 |\n\n**Representative sample:** Let's suppose traffic fluctuates between **0 and 2,500 RPM** over a typical 24-hour period, with an average input size of **1,200 tokens** and an average response size of **200 tokens**, using the **gpt-5.6-luna** model with a **Global Standard (pay-as-you-go)** deployment. For the 30-day estimate, this daily traffic profile is assumed to repeat every day.\n\nWe'll also assume that 50% of input tokens are cache reads and the remaining 50% are cache misses. Of all input tokens, 10 percentage points are cache writes, leaving 40 percentage points as regular input that is neither read from nor written to the cache. Prompt caching applies only to input tokens; output tokens are always charged at the regular output-token rate.\n\n```\nIllustrative RPM distribution over 24 hours\n(RPM changes every 4 hours)\n\n2500 ┤                         ██████\n2250 ┤                         ██████\n2000 ┤                         ██████  ██████\n1750 ┤                         ██████  ██████\n1500 ┤                         ██████  ██████\n1250 ┤                         ██████  ██████\n1000 ┤                 ██████  ██████  ██████  ██████\n 750 ┤                 ██████  ██████  ██████  ██████\n 500 ┤         ██████  ██████  ██████  ██████  ██████\n 250 ┤         ██████  ██████  ██████  ██████  ██████\n   0 ┼─────────────────────────────────────────────────\nHOUR │ 00–04 │ 04–08 │ 08–12 │ 12–16 │ 16–20 │ 20–24\n RPM │     0 │   500 │ 1,000 │ 2,500 │ 2,000 │ 1,000\n```\n\nFor Standard/PayGo rates, as of August 27, 2026, the [Azure OpenAI pricing page](https://azure.microsoft.com/pricing/details/cognitive-services/openai-service/) lists these USD rates for `gpt-5.6-luna`\n\nGlobal Standard:\n\n| Meter | Symbol | Price per 1M tokens |\n|---|---|---|\n| Regular input | `P_regular` |\n$0.20 |\n| Cached input | `P_cached` |\n$0.02 |\n| Cache writes | `P_write` |\n$0.25 |\n| Output | `P_output` |\n$1.20 |\n\n`50% cache reads + 10% cache writes + 40% regular input = 100%`\n\n| Symbol | Description |\n|---|---|\n`RPM` |\nRequests per minute |\n`a.i.T` , `a.o.T`\n|\nAverage input and output tokens per request |\n`Hours` |\nDuration of the batch in hours |\n`r_cached` , `r_write`\n|\nCache-read and cache-write rates |\n`C_batch` |\nTotal input-and-output token cost for one batch |\n\n| Formula | Calculation |\n|---|---|\n| Total input tokens |\n`T_input` = `RPM` × `a.i.T` × 60 × `Hours`\n|\n| Cached input tokens |\n`T_cached` = `T_input` × `r_cached`\n|\n| Cache-write input tokens |\n`T_write` = `T_input` × `r_write`\n|\n| Regular input tokens |\n`T_regular` = `T_input` - `T_cached` - `T_write`\n|\n| Total output tokens |\n`T_output` = `RPM` × `a.o.T` × 60 × `Hours`\n|\n| Batch cost |\n`C_batch` = (`T_regular` ·`P_regular` + `T_cached` ·`P_cached` + `T_write` ·`P_write` + `T_output` ·`P_output` ) / 1,000,000 |\n\nEach column represents one 4-hour batch on a typical day. The daily traffic profile is assumed to repeat itself for 30 days. Token values are shown in billions (B).\n\n| Metric | 00–04 | 04–08 | 08–12 | 12–16 | 16–20 | 20–24 | Total per day |\n|---|---|---|---|---|---|---|---|\nBatch duration |\n4 hours | 4 hours | 4 hours | 4 hours | 4 hours | 4 hours | 24 hours |\nRPM |\n0 | 500 | 1,000 | 2,500 | 2,000 | 1,000 | — |\n`T_regular` |\n0 | 0.05760B | 0.11520B | 0.28800B | 0.23040B | 0.11520B | 0.80640B |\n`T_cached` |\n0 | 0.07200B | 0.14400B | 0.36000B | 0.28800B | 0.14400B | 1.00800B |\n`T_write` |\n0 | 0.01440B | 0.02880B | 0.07200B | 0.05760B | 0.02880B | 0.20160B |\n`T_output` |\n0 | 0.02400B | 0.04800B | 0.12000B | 0.09600B | 0.04800B | 0.33600B |\n`C_4-hour batch` |\n$0.00 | $45.36 | $90.72 | $226.80 | $181.44 | $90.72 | $635.04 |\n\n30-day token totals:\n\n- Regular input (\n`T_regular`\n\n):24.19200B- Cached input (\n`T_cached`\n\n):30.24000B- Cache writes (\n`T_write`\n\n):6.04800B- Output (\n`T_output`\n\n):10.08000B\n\nEstimated pay-as-you-go cost per day: $635.04.\n\nEstimated cost per 30-day month: $19,051.20.\n\nEstimated cost per 365-day year: $231,789.60.\n\nThe following Sweden Central PTU rates were retrieved on August 27, 2026, using the [Azure Retail Prices API](https://learn.microsoft.com/en-us/rest/api/cost-management/retail-prices/azure-retail-prices). Sample queries and commands are included in the Appendix as a reference.\n\n| Tier | Retail API rate | Monthly equivalent per PTU |\n|---|---|---|\n| Hourly PTU | $1.00/PTU/hour | $720.00 |\n| Monthly reservation | $260.00/PTU/month | $260.00 |\n| One-year reservation | $2,652.00/PTU/year | $221.00 |\n\nThe hourly PTU monthly equivalent assumes 720 hours (30 days).\n\nWarning:Hourly, non-reserved PTU is best suited to temporary or uncertain workloads, such as testing, benchmarking, capacity validation, short pilots, or migration exercises.\n\nLet's take **250 RPM** as the provisioned baseline and use Standard/PayGo spillover for bursts above it.\n\n| CALCULATION |\n|---|\n`Input TPM` = 250 × 1,200 = 300,000\n|\n`Effective Input TPM` = 300,000 × (1 - 0.50) = 150,000\n|\n`Output TPM` = 250 × 200 = 50,000\n|\n`Normalized TPM` = 150,000 + (6 × 50,000) = 450,000\n|\n`Estimated PTUs` = 450,000 / 30,000 = 15 PTUs\n|\n`Provisioned baseline` = 15 PTUs\n|\n\n| Time | Incoming RPM | Normalized TPM Demand | 15-PTU Capacity (Normalized TPM) | Potential Spillover Demand |\n|---|---|---|---|---|\n| 00–04 | 0 | 0 | 450,000 | 0 |\n| 04–08 | 500 | 900,000 | 450,000 | 450,000 |\n| 08–12 | 1,000 | 1,800,000 | 450,000 | 1,350,000 |\n| 12–16 | 2,500 | 4,500,000 | 450,000 | 4,050,000 |\n| 16–20 | 2,000 | 3,600,000 | 450,000 | 3,150,000 |\n| 20–24 | 1,000 | 1,800,000 | 450,000 | 1,350,000 |\n\n```\nIncoming traffic ──▶ 15-PTU deployment (450,000 normalized TPM capacity)\n                  X\n                  X if throttled (HTTP 429)\n                  │\n                  └──▶ Automated Spillover to Standard/PayGo deployment if configured\n```\n\nImportant:Spillover is optional and must be configured either for the provisioned deployment or per request. Once configured, Microsoft Foundry automatically routes eligible requests that the provisioned deployment cannot serve—such as requests receiving HTTP 429, 500, or 503—to the associated Standard deployment. Without this configuration, the application must implement its own fallback logic.\n\n| Pricing option | Retail API rate | 1 PTU/month | 15 PTUs/month | 15 PTUs/day (approx.) |\n|---|---|---|---|---|\n| Hourly PTU | $1.00/PTU/hour | $720.00 | $10,800.00 | $360.00 |\n| Monthly reservation | $260.00/PTU/month | $260.00 | $3,900.00 | $130.00 |\n| One-year reservation | $2,652.00/PTU/year | $221.00 | $3,315.00 | $108.99 |\n\nMonthly cost of a\n\nyearly PTU reservationis an approximate equivalent calculated by dividing the annual price by 12.Daily cost of a\n\nyearly PTU reservationis an approximate equivalent calculated by dividing the annual price by 365.Daily cost of\n\nmonthly PTU reservationis a rough estimation calculated by dividing the monthly price by 30.\n\n| Metric | 00–04 | 04–08 | 08–12 | 12–16 | 16–20 | 20–24 | Daily total |\n|---|---|---|---|---|---|---|---|\nIncoming RPM |\n0 | 500 | 1,000 | 2,500 | 2,000 | 1,000 | — |\nEstimated spillover RPM |\n0 | 250 | 750 | 2,250 | 1,750 | 750 | — |\n`T_regular` |\n0 | 0.02880B | 0.08640B | 0.25920B | 0.20160B | 0.08640B | 0.66240B |\n`T_cached` |\n0 | 0.03600B | 0.10800B | 0.32400B | 0.25200B | 0.10800B | 0.82800B |\n`T_write` |\n0 | 0.00720B | 0.02160B | 0.06480B | 0.05040B | 0.02160B | 0.16560B |\n`T_output` |\n0 | 0.01200B | 0.03600B | 0.10800B | 0.08400B | 0.03600B | 0.27600B |\n`C_PTU reservation` |\n$21.67 | $21.67 | $21.67 | $21.67 | $21.67 | $21.67 | $130.00 |\n`C_PayGo spillover` |\n$0.00 | $22.68 | $68.04 | $204.12 | $158.76 | $68.04 | $521.64 |\n`C_PTU + spillover` |\n$21.67 |\n$44.35 |\n$89.71 |\n$225.79 |\n$180.43 |\n$89.71 |\n$651.64 |\n\nDaily estimate using a monthly reservation:The $3,900 monthly PTU reservation amortizes to$130.00 per dayover a 30-day month. Estimated PayGo spillover is$521.64 per day, for a combined daily estimate of$651.64.\n\n30-day estimate using a monthly reservation:PTU reservation$3,900.00; PayGo spillover$15,649.20; combined cost$19,549.20.\n\n365-day estimate using a one-year reservation:PTU reservation$39,780.00; PayGo spillover$190,398.60; combined cost$230,178.60.Interval amounts are rounded independently. Daily and longer-term totals are calculated using unrounded values. Actual throughput and costs can vary with request concurrency, token-length distribution, caching behavior, model version, regional pricing, and throttling characteristics.\n\nLet's take **500 RPM** as the provisioned baseline and use Standard/PayGo spillover for bursts above it.\n\n| CALCULATION |\n|---|\n`Input TPM` = 500 × 1,200 = 600,000\n|\n`Effective Input TPM` = 600,000 × (1 - 0.50) = 300,000\n|\n`Output TPM` = 500 × 200 = 100,000\n|\n`Normalized TPM` = 300,000 + (6 × 100,000) = 900,000\n|\n`Estimated PTUs` = 900,000 / 30,000 = 30 PTUs\n|\n`Provisioned baseline` = 30 PTUs\n|\n\n| Time | Incoming RPM | Normalized TPM Demand | 30-PTU Capacity (Normalized TPM) | Potential Spillover Demand |\n|---|---|---|---|---|\n| 00–04 | 0 | 0 | 900,000 | 0 |\n| 04–08 | 500 | 900,000 | 900,000 | 0 |\n| 08–12 | 1,000 | 1,800,000 | 900,000 | 900,000 |\n| 12–16 | 2,500 | 4,500,000 | 900,000 | 3,600,000 |\n| 16–20 | 2,000 | 3,600,000 | 900,000 | 2,700,000 |\n| 20–24 | 1,000 | 1,800,000 | 900,000 | 900,000 |\n\n```\nIncoming traffic ──▶ 30-PTU deployment (900,000 normalized TPM capacity)\n                  X\n                  X if throttled (HTTP 429)\n                  │\n                  └──▶ Automated Spillover to Standard/PayGo deployment if configured\n```\n\nImportant:Spillover is optional and must be configured either for the provisioned deployment or per request. Once configured, Microsoft Foundry automatically routes eligible requests that the provisioned deployment cannot serve—such as requests receiving HTTP 429, 500, or 503—to the associated Standard deployment. Without this configuration, the application must implement its own fallback logic.\n\n| Pricing option | Retail API rate | 1 PTU/month | 30 PTUs/month | 30 PTUs/day (approx.) |\n|---|---|---|---|---|\n| Hourly PTU | $1.00/PTU/hour | $720.00 | $21,600.00 | $720.00 |\n| Monthly reservation | $260.00/PTU/month | $260.00 | $7,800.00 | $260.00 |\n| One-year reservation | $2,652.00/PTU/year | $221.00 | $6,630.00 | $217.97 |\n\nMonthly cost of a\n\nyearly PTU reservationis an approximate equivalent calculated by dividing the annual price by 12.Daily cost of a\n\nyearly PTU reservationis an approximate equivalent calculated by dividing the annual price by 365.Daily cost of\n\nmonthly PTU reservationis a rough estimation calculated by dividing the monthly price by 30.\n\n| Metric | 00–04 | 04–08 | 08–12 | 12–16 | 16–20 | 20–24 | Daily total |\n|---|---|---|---|---|---|---|---|\nIncoming RPM |\n0 | 500 | 1,000 | 2,500 | 2,000 | 1,000 | — |\nEstimated spillover RPM |\n0 | 0 | 500 | 2,000 | 1,500 | 500 | — |\n`T_regular` |\n0 | 0 | 0.05760B | 0.23040B | 0.17280B | 0.05760B | 0.51840B |\n`T_cached` |\n0 | 0 | 0.07200B | 0.28800B | 0.21600B | 0.07200B | 0.64800B |\n`T_write` |\n0 | 0 | 0.01440B | 0.05760B | 0.04320B | 0.01440B | 0.12960B |\n`T_output` |\n0 | 0 | 0.02400B | 0.09600B | 0.07200B | 0.02400B | 0.21600B |\n`C_PTU reservation` |\n$43.33 | $43.33 | $43.33 | $43.33 | $43.33 | $43.33 | $260.00 |\n`C_PayGo spillover` |\n$0.00 | $0.00 | $45.36 | $181.44 | $136.08 | $45.36 | $408.24 |\n`C_PTU + spillover` |\n$43.33 |\n$43.33 |\n$88.69 |\n$224.77 |\n$179.41 |\n$88.69 |\n$668.24 |\n\nDaily estimate using a monthly reservation:The $7,800 monthly PTU reservation amortizes to$260.00 per dayover a 30-day month. Estimated PayGo spillover is$408.24 per day, producing a combined daily estimate of$668.24.\n\n30-day estimate using a monthly reservation:PTU reservation$7,800.00; PayGo spillover$12,247.20; combined cost$20,047.20.\n\n365-day estimate using a one-year reservation:PTU reservation$79,560.00; PayGo spillover$149,007.60; combined cost$228,567.60.Interval amounts are rounded independently. Daily and longer-term totals are calculated using unrounded values. Actual throughput and costs can vary with request concurrency, token-length distribution, caching behavior, model version, regional pricing, and throttling characteristics.\n\n| Period and pricing basis | PayGo only | 250-RPM baseline (15 PTUs) + spillover | Difference vs. PayGo | 500-RPM baseline (30 PTUs) + spillover | Difference vs. PayGo |\n|---|---|---|---|---|---|\n| Daily — monthly reservation | $635.04 | $651.64 | +$16.60 (+2.61%) |\n$668.24 | +$33.20 (+5.23%) |\n| 30-day month — monthly reservation | $19,051.20 | $19,549.20 | +$498.00 (+2.61%) |\n$20,047.20 | +$996.00 (+5.23%) |\n| 365-day year — one-year reservation | $231,789.60 | $230,178.60 | −$1,611.00 (−0.70%) |\n$228,567.60 | −$3,222.00 (−1.39%) |\n\nWith monthly reservation pricing, PayGo-only is the least expensive option. The 250-RPM baseline costs $498.00 more per 30-day month, while the 500-RPM baseline costs $996.00 more.\n\nWith one-year reservation pricing, the result reverses. The 250-RPM baseline saves $1,611.00 per year relative to PayGo-only, while the 500-RPM baseline saves $3,222.00 per year. Under this representative traffic profile, the 500-RPM baseline therefore provides the lowest annual cost of the three options.\n\nIf cost is the primary objective, use PTUs to cover the workload's stable, sustained baseline and route variable or burst traffic to PayGo. Avoid reserving PTUs for capacity that may remain idle; each additional PTU block should save more in PayGo charges than it costs to reserve.\n\nThat said, cost is not the only objective of PTUs. A correctly sized provisioned deployment also provides dedicated throughput, more predictable latency, a defined latency SLA, and more consistent benchmark results than shared PayGo capacity. The best choice therefore depends on both economics and performance requirements.\n\nYou are billed on PTUs deployed, not tokens processed: an idle deployment costs exactly the same as a saturated one. Deployments cannot be paused, so under hourly billing, charges stop only when the deployment is deleted.\n\nReservations and deployments are created independently, with two consequences:\n\nScaling down also releases capacity back to the regional pool with no guarantee of reclaiming it, so cycling a production deployment up and down is a poor cost-control strategy. A reservation on a steady deployment is usually cheaper and safer.\n\n```\n{\n    curl -s \"https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview&\\$filter=productName%20eq%20%27Azure%20OpenAI%27%20and%20armRegionName%20eq%20%27swedencentral%27\"\n\n    curl -s \"https://prices.azure.com/api/retail/prices?api-version=2023-01-01-preview&\\$filter=productName%20eq%20%27Azure%20AI%20Foundry%20Provisioned%20Throughput%20Reservation%27%20and%20armRegionName%20eq%20%27swedencentral%27\"\n} | jq -rs '\n    [\"Pricing option\", \"USD / PTU\", \"Reservation term\"],\n    (\n        .[].Items[]\n        | select(.skuName == \"Provisioned Managed Global\")\n        | [\n                (if .reservationTerm == null\n                 then \"Hourly\"\n                 else .reservationTerm\n                 end),\n                .retailPrice,\n                (.reservationTerm // \"None\")\n            ]\n    )\n    | @tsv'\n```\n\n", "url": "https://wpnews.pro/news/gpt-5-6-luna-on-foundry-ptu-sizing-paygo-vs-ptu-spillover-pricing", "canonical_source": "https://dev.to/mburakunuvar/gpt-56-luna-on-foundry-ptu-sizing-paygo-vs-ptu-spillover-pricing-55dk", "published_at": "2026-08-30 13:33:25+00:00", "updated_at": "2026-08-30 13:53:29.535145+00:00", "lang": "en", "topics": ["ai-infrastructure", "developer-tools", "large-language-models"], "entities": ["Microsoft Foundry", "GPT-5.6 Luna", "Azure OpenAI"], "alternates": {"html": "https://wpnews.pro/news/gpt-5-6-luna-on-foundry-ptu-sizing-paygo-vs-ptu-spillover-pricing", "markdown": "https://wpnews.pro/news/gpt-5-6-luna-on-foundry-ptu-sizing-paygo-vs-ptu-spillover-pricing.md", "text": "https://wpnews.pro/news/gpt-5-6-luna-on-foundry-ptu-sizing-paygo-vs-ptu-spillover-pricing.txt", "jsonld": "https://wpnews.pro/news/gpt-5-6-luna-on-foundry-ptu-sizing-paygo-vs-ptu-spillover-pricing.jsonld"}}