Service tiers

Trade latency for price in either direction with the flex and priority processing tiers

A service tier picks how a request is processed. flex trades latency for a lower price and is a good fit for background jobs, evals, and batch work that tolerates variable speed. priority trades price for faster, more consistent processing on latency-sensitive traffic. standard is the default and is used when you send nothing.

Gateway treats a tier as a vendor-route capability, the same way it treats caching. The same canonical model can offer flex on one vendor and only standard on another, so the tier follows the route, not the model name alone.

Service tiers fail closed. If the resolved route is not priced for the tier you asked for, Gateway rejects the request with a 400 before calling the provider. It never silently serves or bills a flex request at the standard rate, or the reverse.

How service tiers work

A route supports a tier only when that route is priced for it.

TierWhat it’s forPrice
standardDefault processingBase rate
flexLatency-tolerant work (batch, evals, background jobs)Discounted, around 50% of standard
priorityLatency-sensitive work that should not queue behind flex and standard trafficPremium, between 1.7x and 2x standard depending on the route

Support is defined by pricing presence: Gateway advertises a tier on a route only when that route has a price for it. That keeps billing honest, at the cost of requiring each route to be explicitly priced for every tier it offers.

Which routes price which tiers

Of the 438 vendor routes in the catalog, 396 are standard only. The rest break down as follows.

TierRoutesWhere
flex19OpenAI gpt-5.4, gpt-5.4-mini, gpt-5.4-nano, gpt-5.5, and the three gpt-5.6 routes on the openai vendor; Gemini 3.5-flash-lite, 3.6-flash, 3.7-flash, and 3.8-flash on both the google and vertexai vendors
priority32OpenAI only, on the openai vendor: the gpt-4o, gpt-4.1, gpt-5, gpt-5.1, gpt-5.2, gpt-5.4, gpt-5.5, gpt-5.6, o3, and o4-mini families

Nine routes price all three tiers, so a gpt-5.4 or gpt-5.6 request on the openai vendor can go either direction from standard. Two details worth knowing:

  • Gemini flex is served by both the direct google vendor and the ZDR-compliant vertexai vendor, so a flex request reaches Gemini flex on whichever route your policy or ZDR setting selects.
  • priority is an OpenAI-only tier today. A priority request that resolves to any other vendor fails closed, so pin the route when you need it.

Gemini flex under Zero Data Retention. ZDR is a vendor property. Both the direct google vendor and the ZDR-compliant vertexai vendor price Gemini flex, so ZDR organizations reach Gemini flex through vertexai, while non-ZDR traffic can use either route. OpenAI flex is unaffected. See Zero data retention.

Counts are as of the 2026-09-02 catalog and grow as routes are priced, so read the tiers a route offers from GET /models rather than hardcoding the list. Each vendor route reports a service_tiers list and per-tier pricing:

1{
2 "model": "openai/gpt-5.4",
3 "vendors": {
4 "openai": {
5 "service_tiers": ["standard", "flex"],
6 "pricing": {
7 "input_per_million": 2.5,
8 "output_per_million": 15,
9 "flex": { "input_per_million": 1.25, "output_per_million": 7.5 }
10 }
11 }
12 }
13}

A tier missing from service_tiers isn’t offered on that route; request it and you get the fail-closed 400.

Requesting a tier

Send service_tier on the request. Optionally set service_tier_fallback to true so a throttled flex request retries once at standard instead of returning an error.

$curl https://api-gateway.merge.dev/v1/responses \
> -H "Authorization: Bearer YOUR_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{
> "model": "openai/gpt-5.4",
> "vendor": "openai",
> "service_tier": "flex",
> "service_tier_fallback": true,
> "input": [
> {
> "type": "message",
> "role": "user",
> "content": [
> { "type": "input_text", "text": "Summarize this transcript: ..." }
> ]
> }
> ]
> }'

service_tier accepts standard, flex, and priority, plus the spellings the provider SDKs use for the same three tiers, so a request written against another vendor’s API parses unchanged:

You sendGateway serves
standard, default, auto, unspecified, standard_onlystandard
flexflex
priority, fastpriority

Any other value is rejected with 422. scale and PROVISIONED_THROUGHPUT stay rejected because no route prices them.

Fallback on throttling

flex is best-effort at the provider, so a busy provider can throttle it (429 / 503). What happens next depends on service_tier_fallback:

  • false (default): the throttle surfaces to you as the provider’s 429 / 503, and nothing is billed. Retry later, or resend at standard.
  • true: Gateway retries the request once on the same route at standard, billed at the standard rate. The service_tier in the response shows the tier that actually served, so a fallback shows standard even though you asked for flex.

Set service_tier_fallback: true when you would rather get a standard-priced answer than an error under load, and leave it off when a flex request must either run at the flex price or not at all.

Reading the served tier

Every response reports the tier that actually served the request, which is also the tier you were billed at. On a fallback this differs from what you requested.

Each surface reports it in its own SDK’s dialect, so read the field your surface uses:

SurfaceFieldNotes
POST /v1/responsestop-level service_tierCanonical spellings: standard, flex, priority
/v1/openai/chat/completions, /v1/openai/responsestop-level service_tierCanonical standard is reported as "default", since OpenAI’s enum has no standard member
/v1/ai-sdk/*, /v1/langchain/*top-level service_tierSame "default" spelling as the OpenAI surfaces
/v1/anthropic/v1/messagesusage.service_tierOmitted for flex, which has no Anthropic spelling. Non-streaming only

On a stream the tier lands on the terminal frame: the final chunk on the chat surfaces, and inside response.completed on the Responses surfaces. Interim chunks carry service_tier: null.

1{
2 "model": "openai/gpt-5.4",
3 "vendor": "openai",
4 "service_tier": "flex",
5 "usage": {
6 "input_tokens": 812,
7 "output_tokens": 180,
8 "total_tokens": 992
9 }
10}

Bill off service_tier, not the tier you sent: it reflects the rate charged, including the standard you land on after a throttle fallback. Track it across your traffic to measure flex savings.

Best practices

  • Use flex for latency-tolerant work. Batch scoring, evals, offline enrichment, and background agents are ideal; interactive, user-facing calls usually are not.
  • Reserve priority for traffic where the premium is worth it. At roughly double the standard rate, it pays off on user-facing paths with a latency budget, not on bulk traffic.
  • Add service_tier_fallback when an answer beats an error. For flex traffic that must still complete under load, fallback trades the discount for reliability on the throttled subset.
  • Pin model and vendor when the tier matters. A routing policy can land on a route that does not price the tier, which fails closed. Pin the route, or configure the policy with routes that all support the tier.
  • Discover support at runtime. Read service_tiers from GET /models instead of hardcoding which models offer flex, since the catalog changes.

Common errors

The resolved route is not priced for that tier. Check the service_tiers list for the route in GET /models, and pin a route that supports it, for example the google or vertexai vendor for Gemini flex, or a gpt-5.4 / 5.5 / 5.6 route for OpenAI flex.

The provider throttled the flex tier and you did not opt into fallback. Set service_tier_fallback: true to retry once at standard, or resend the request at standard.

service_tier accepts standard, flex, and priority, plus the provider SDK spellings listed above. Remove the field to use standard processing.

Next steps