Last reviewed: 2026-07-30
Direct answer
LLM API fallback capacity planning should reserve enough usable capacity for the traffic you have explicitly chosen to protect, plus a bounded allowance for probes and retries, while preserving a policy-defined safety margin. Calculate that margin separately for every enforced rate dimension and capacity pool. A standby route is not ready merely because it accepts a health-check request.
OpenAI’s rate-limit guide identifies several independent dimensions, including requests and tokens over minute and day windows. Anthropic’s rate-limit documentation likewise separates request, input-token, and output-token rates, and notes that short bursts can exceed a limit even when a minute-level average appears acceptable. Checking only requests per minute can therefore conceal the dimension that will actually stop a failover.
Use the following calculation for each relevant dimension, expressed in the same units, time window, model class, account scope, and region as the enforced limit:
required_capacity =
protected_peak_load x planned_failover_share
+ probe_load
+ bounded_retry_allowance
remaining_margin =
verified_limit
- standby_baseline
- required_capacity
The route passes the arithmetic gate only when every remaining margin meets its policy floor. The retry allowance is a planning input, not permission for unlimited retries. The protected peak should represent the demand expected during the incident conditions in which the route will be used, not an ordinary daily average.
A configured limit is also not automatically guaranteed throughput. Anthropic states that its listed limits are maximum allowed usage rather than guaranteed minimums. Where the service requirement justifies a reservation, Google Cloud’s Provisioned Throughput article describes reserved resources intended to guarantee capacity and predictable performance. More generally, AWS Well-Architected guidance recommends preserving a gap between normal usage and quotas, planning for the failover location, and considering unusually high peaks.
There is no universal safe headroom percentage. Set the floor from measured demand, the approved failover share, the reliability objective, the provider’s capacity model, and a controlled ramp test. If the evidence is missing or stale, treat the route as capacity-unknown rather than ready.
Who this is for
This guide is for platform engineers, SREs, and on-call owners who operate multi-provider or multi-model LLM routes. It is especially relevant when a standby route normally receives little traffic, shares limits with other workloads, or must protect only a defined subset of user actions during an incident.
It assumes the team can inspect its own current limits and traffic measurements, define which work is business-critical, and enforce a routing cap. It does not promise that a provider, model, or reservation will meet a particular workload. Account owners must verify the applicable commercial and technical terms for their own deployment.
Key takeaways
- Capacity readiness and functional readiness are separate gates. A successful probe establishes neither peak throughput nor response compatibility.
- Compute headroom for every enforced request, input, output, daily, and modality-specific dimension that applies to the route.
- Treat a quota as a ceiling unless the provider contract explicitly reserves usable capacity for the relevant model and scope.
- Ramp standby traffic gradually. A sudden incident-driven surge can encounter burst or acceleration controls before a long-window average looks full.
- Include only bounded probe and retry demand in the plan. Retries consume the same scarce capacity the fallback is meant to preserve.
- Predeclare the protected traffic share and the degradation action for excess demand. Do not discover that policy during an outage.
- Log the capacity decision and its evidence without recording customer content, full headers, account details, or sensitive values.
Sources checked
- OpenAI rate-limit guidance was checked for the independent request, token, daily, and modality-related limit dimensions that can constrain an API route.
- Anthropic rate-limit documentation was checked for organization-level limits, token-bucket replenishment, short-burst behavior, 429 responses, retry timing, and acceleration limits during sharp usage increases.
- AWS guidance on quota space for failover was checked for the general reliability practice of retaining quota headroom, planning capacity at the failover location, and accounting for abnormal peaks.
- Google Cloud’s Provisioned Throughput overview was checked for its description of reserved generative-AI resources, predictable performance, and proactive capacity planning.
Provider limits and product terms can change and may be specific to an account, model, or deployment. Use these sources to establish the planning method, then capture current evidence for the exact route being approved.
Contract details to verify
Create one capacity contract per fallback route and per independently enforced capacity pool. Do not merge routes merely because they use the same vendor. At minimum, record:
- The user actions and traffic classes the fallback protects.
- The maximum share of primary traffic the route may receive.
- The provider, endpoint class, model or model class, region, account scope, and shared pool boundaries.
- Every enforced rate dimension and time window, along with the evidence timestamp and source.
- Standby baseline usage, protected peak demand, expected diverted demand, probe allowance, bounded retry allowance, and remaining margin.
- The policy floor for each dimension and who may change it.
- Whether capacity is shared, on demand, contractually reserved, or still unknown.
- The ramp sequence, observation condition, stop condition, and rollback action.
- The user-facing degradation mode when the approved share cannot cover all demand.
- The owner, review date, and events that invalidate the evidence.
The following worksheet is illustrative arithmetic, not a set of provider defaults:
route_id: text-standby
capacity_snapshot_at: '2026-07-30T10:00:00Z'
protected_traffic_share: 0.60
dimensions:
requests_per_minute:
verified_limit: 1200
standby_baseline: 200
expected_diverted_load: 650
probe_and_retry_allowance: 50
remaining_margin: 300
policy_floor: 150
input_units_per_minute:
verified_limit: 240000
standby_baseline: 40000
expected_diverted_load: 155000
probe_and_retry_allowance: 10000
remaining_margin: 35000
policy_floor: 30000
reservation_mode: none
decision: eligible_for_controlled_ramp
The arithmetic in this example passes, but that result authorizes only a controlled ramp. It does not prove real acceptance capacity, latency, output quality, or endpoint compatibility.
Happy-path operator workflow
- Freeze the protected scope. Identify the user actions, peak demand window, and maximum traffic share the standby may receive. Bind the decision to a route and capacity pool rather than to a provider name alone.
- Capture current limit evidence. Record every relevant request and throughput limit, the scope in which it is enforced, the normal standby load, and the capture time. Mark any unclear dimension as unknown.
- Run the per-dimension calculation. Include expected diverted load, small probe demand, and only the retries permitted by policy. The smallest margin controls the route.
- Check functionality separately. Confirm authentication, endpoint behavior, model availability, and response compatibility. Use separate endpoint-health checks and response-contract evidence rather than treating capacity arithmetic as a substitute.
- Start with a small canary. Increase traffic through policy-defined steps instead of moving directly from idle to full failover. At each step, observe enough of the relevant enforcement window to detect bursts, replenishment behavior, throttling, errors, and unexpected baseline consumption.
- Compare observation with the contract. Confirm that accepted demand, measured usage, and remaining margin are consistent with the worksheet. Investigate unexplained differences before expanding.
- Promote only to the approved share. Keep a hard routing cap in place even after the drill succeeds. Record the decision, owner, evidence age, and next review condition.
- Repeat after invalidating changes. Recheck after a model, provider policy, account, region, reservation, traffic shape, prompt size, or shared workload changes.
Error-path operator workflow
- Stop the ramp. A 429 response, an unexpected server error, a breached policy floor, missing limit evidence, or a material mismatch between measured and expected consumption sets the route to not-ready or hold.
- Do not flood the standby. Keep the current safe share or reduce it. If the primary is already impaired, route only the preapproved protected traffic instead of sending all demand to an unproven pool.
- Classify the constraint. Identify the limiting dimension, enforcement window, pool scope, baseline contention, evidence age, and whether the failure occurred during a sharp traffic increase.
- Bound retry traffic. Follow provider retry timing when it is available, but keep attempts inside the user-action and route budget. Apply the retry-budget guidance before another attempt consumes scarce headroom.
- Activate the declared degradation. Queue eligible asynchronous work, reduce the protected share, select an approved lower-demand mode, or return the documented user-facing failure. Use only actions already accepted for the product.
- Preserve evidence. Record the response class, safe provider request identifier, limit dimension, retry delay, traffic share, margin calculation, and routing decision. Do not store full customer prompts or outputs in the capacity log.
- Remediate and revalidate. A limit increase, reservation, pool isolation, demand reduction, or retry-policy change invalidates the old result. Begin again with a small canary rather than resuming at the failed share.
When neither the primary nor the fallback has verified capacity, the correct response may be controlled degradation rather than another routing expansion. Define those limits in advance with brownout boundary guidance .
Sanitized logging fields
A capacity decision log should contain the timestamp, incident and user-action correlation identifiers, route, capacity pool, probe flag, traffic share, limiting dimension, verified limit, baseline, diverted-load estimate, retry allowance, remaining margin, policy floor, response class, retry delay, attempt count, decision, reason code, safe provider request identifier, and evidence age.
Use pseudonymous correlation values. Exclude customer text, generated output, complete request or response bodies, full headers, account and billing identifiers, and sensitive values. A sanitized record can look like this:
event: fallback_capacity_gate
timestamp: '2026-07-30T10:05:00Z'
incident_id: inc-24
user_action_id: act-41
route_id: text-standby
capacity_pool: provider-model-region
probe: true
traffic_share: 0.10
limit_dimension: input_units_per_minute
verified_limit: 240000
standby_baseline: 40000
estimated_diverted_load: 155000
probe_and_retry_allowance: 10000
remaining_margin: 35000
policy_floor: 30000
http_status: 200
retry_delay_seconds: null
attempt_count: 1
decision: hold
reason_code: observation_window_incomplete
provider_request_id: prov-82
sensitive_fields: '[REDACTED]'
Failure modes
- A configured limit is mistaken for reserved capacity. The spreadsheet passes, but the provider does not promise that the full ceiling is continuously usable. Keep the distinction explicit and require observed ramp evidence or an applicable reservation.
- Only request rate is modeled. Small requests pass while realistic prompts or outputs exhaust a throughput dimension. Calculate input, output, combined, daily, and modality-specific limits wherever they apply.
- The standby is cold-ramped. An abrupt shift from minimal usage to incident volume encounters short-window or acceleration controls. Exercise a gradual ramp and keep its stop conditions automated.
- Another workload drains a shared pool. The fallback appears healthy in isolation but shares capacity with batch jobs, experiments, another model, or another product. Include all baseline consumers or isolate the pool.
- Retries consume the reserve. Multiple layers retry the same failed action, so planned headroom disappears during the incident. Set one accountable retry budget and log attempts across the entire user action.
- The evidence is stale. A model migration, prompt expansion, account change, region change, or provider policy update makes the old limits and demand profile irrelevant. Give every snapshot an expiry and invalidation list.
- A reservation covers the wrong scope. Reserved capacity exists, but not for the model, region, term, or traffic class used by the fallback. Match the route contract to the exact reservation terms before counting it.
- A health check creates false confidence. One successful request proves reachability at that moment, not sustained acceptance under failover demand. Keep endpoint health, response compatibility, and capacity as distinct promotion gates.
- The fallback protects undefined traffic. Without a priority policy, every caller competes for limited standby capacity and critical work can be crowded out. Define the protected share and excess-demand behavior before routing is enabled.
FAQ
How much fallback headroom is enough?
There is no provider-independent percentage. Start with the protected peak load and planned routing share, add bounded probe and retry demand, subtract the standby baseline from each verified limit, and require a policy floor. Raise the floor when evidence is volatile, shared capacity is poorly understood, growth is rapid, or the business impact of rejection is high.
Does a successful probe prove the standby can take production traffic?
No. It proves that a particular request was accepted at a particular moment. A capacity decision also needs per-dimension arithmetic, a controlled ramp, an adequate observation condition, and separate functional checks.
Should a standby receive regular traffic?
A small, controlled exercise can reveal stale configuration, unexpected pool contention, and ramp behavior. It still does not prove that full incident volume will be available later. Keep the test share bounded, measure its capacity cost, and repeat it when the contract changes.
Can exponential backoff solve a capacity shortfall?
Backoff can space retry attempts, but it does not create quota or reserved throughput. Retried work also consumes capacity. Honor applicable provider timing, cap attempts across the user action, and stop when the route’s capacity gate is closed.
When should a team consider reserved throughput?
Consider it when the protected workload requires stronger capacity predictability than controlled tests of shared or on-demand capacity can establish, and when the commitment fits the workload and budget. Verify the exact model, region, term, units, scaling process, and failure behavior before counting a reservation in the fallback plan.
What if the fallback can cover only part of the primary load?
That is a valid operating state if it is explicit. Set the maximum fallback share, identify the user actions it protects, and declare how all other demand will be queued, reduced, redirected to an approved mode, or rejected. Enforce the share at the gateway instead of relying on an operator to estimate it during the incident.
Reader next step
Create a capacity contract for one real fallback route before enabling broader traffic. Record its current limits, baseline, protected peak, planned share, retry allowance, policy floors, pool scope, evidence time, and degradation action. Then run the happy-path canary and deliberately verify that the error path stops expansion when you lower a test threshold.
Do not mark the route ready until every rate dimension passes, the controlled ramp matches the worksheet, functional checks pass independently, and the routing cap is enforceable. If the drill fails, leave the route in hold, update the contract or capacity arrangement, and rerun from the smallest approved share.