OpenRouter OpenAI Batch Endpoints Down: 3 Ways to Keep the 50% Discount

Published August 28, 2026By ABD Legacy LLC
OpenRouter batch API OpenAI batch pricing AI agency API costs batch discount routes

Is OpenAI batch API still available on OpenRouter?

Not through the :batch model suffixes — OpenRouter removed all 35 openai/*:batch slugs on Aug 26, 2026, and completions against them now return 404 "No endpoints found." The 50% batch discount is still reachable three ways: OpenRouter's beta Batch API (plain slug, 24-hour window, text-only), the openai/flex service tier (synchronous, explicit opt-in, GPT-5.6 family only), or OpenAI's own direct Batch API. The base models (openai/gpt-5, gpt-4o, o3) still route at standard pricing — you lost a pricing tier, not a model.

On August 26, 2026, every openai/*:batch model slug on OpenRouter stopped resolving to a provider — 35 of them, in one silent sweep. The slugs still answer metadata requests, so nothing looks broken until you send an actual completion and get a four-word answer: No endpoints found for openai/gpt-5:batch. If your agency runs nightly batch jobs for client work through OpenRouter, that is your production run failing at 3am with a message that points at your key, your billing, or your code — none of which is the problem.

For AI agencies, this is a pricing-path alert, not a model outage. Batch API pricing is how agencies price bulk client work (evals, data extraction, large content jobs) against realtime work, and the discount route is the difference between quoting a job at a sane margin and eating double the token cost. Here is what actually changed, the three routes that still hold the 50% discount, and how to check every model ID in your config before the next sweep bites you.

What "no endpoints found" actually means

OpenRouter separates two things most clients collapse into one. There is a model entry — a catalogue record with a description, a context length and a price sheet — and there are endpoints — the actual provider routes that can serve a request. Delete the routes and keep the record, and you get a slug that looks alive from the outside.

That is exactly the state openai/gpt-5:batch is in. Ask for its metadata and you get a full record back. Ask for its endpoints and you get an empty array:

GET https://openrouter.ai/api/v1/models/openai/gpt-5:batch/endpoints
{"data":{"id":"openai/gpt-5:batch","name":"OpenAI: GPT-5", ... ,"endpoints":[]}}

Send a completion and OpenRouter has nowhere to route you — the request comes back 404 with "No endpoints found for openai/gpt-5:batch." Swap in whichever slug you were calling and the string changes to match: gpt-4o:batch, o3:batch, all the way back to gpt-3.5-turbo:batch. The shape is identical either way, which is why regenerating a key or topping up credit changes nothing. Every variant of "OpenRouter batch API not working" traffic traces back to the same cause: an empty routing table behind a record that still exists.

The sweep: 35 OpenAI batch models, 42 departures total

The removal was not a quiet trim of two or three stale entries. OpenRouter's catalogue went from 422 models to 380 between the August 25 and August 26 snapshots, and 37 of the 42 departures carried the :batch suffix. Thirty-five of those 37 were OpenAI. The full list runs the length of the vendor's history on the platform:

Model familyBatch variants removedExamples
GPT-5.6 series6gpt-5.6-luna, -luna-pro, -terra, -terra-pro, -sol, -sol-pro
GPT-5.5 series2gpt-5.5, gpt-5.5-pro
GPT-5.4 series4+gpt-5.4, plus nano, mini and pro variants
GPT-5.2 series2gpt-5.2, gpt-5.2-pro
GPT-5.1 / GPT-56gpt-5.1, gpt-5, gpt-5-pro, gpt-5-mini, gpt-5-nano, gpt-5-codex
o-series5+the whole o-series back through o1
4-series and earlier5+gpt-4o and the 4-series down to gpt-3.5-turbo
Non-OpenAI batch casualties2z-ai/glm-5.2:batch, moonshotai/kimi-k2.7-code:batch

The other two were z-ai/glm-5.2:batch and moonshotai/kimi-k2.7-code:batch — so this was not an OpenAI-only event, it was mostly one. Anthropic kept 11 batch variants, Google kept 10, and Thinking Machines, NVIDIA and MiniMax kept one each. Call anthropic/claude-opus-5:batch today and it still bills at $2.50 per million input against $5.00 on the standard route — the same clean 50% the OpenAI variants used to give you.

Nobody announced any of this. There was no changelog entry, no deprecation banner on the model pages, no expiration_date field ticking down. The catalogue simply had 42 fewer rows the next morning. The pattern is familiar if you follow this space: it is the same silent-removal failure mode that hit DeepSeek model IDs on OpenRouter earlier, and the same one behind Kimi K2.5's deprecation.

The base models are fine — only the suffix died

Worth separating clearly, because the first instinct on seeing a 404 from openai/gpt-5:batch is to assume GPT-5 is down. It is not. OpenRouter's OpenAI vendor page still advertises 96 models with roughly 2.8 trillion tokens per week of volume through the platform, and openai/gpt-5 resolves to three live routes:

RouteInput / 1MOutput / 1M
OpenAI (standard)$1.25$10.00
Azure (standard)$1.25$10.00
Azure Sweden Central$1.375$11.00

So the outage is narrow and specific: you lost a pricing tier, not a model. Everything you were sending to openai/gpt-5:batch will run today against openai/gpt-5 at exactly double the token cost — which is the fastest possible unblock and the worst possible answer to leave in place. If you do not change anything, your next batch job quietly bills at 2x and your client margin takes the hit.

Route One: OpenRouter's beta Batch API takes the plain slug

The thing the :batch suffix used to do now lives at its own endpoint. OpenRouter ships a Batch API, marked Beta in the docs sidebar, at POST https://openrouter.ai/api/beta/batches. It bills batch requests "at 50% of the model's standard per-token pricing", supports a single completion window of 24 hours, and takes the ordinary model slug rather than a suffixed one:

{
  "endpoint": "/v1/chat/completions",
  "model": "openai/gpt-4o",
  "requests": [
    { "custom_id": "req-0001", "body": { "messages": [{"role": "user", "content": "Hello"}] } }
  ]
}

Two constraints will bite before the pricing does. The Batch API is text-only, so validation rejects any request carrying image, audio, video or file content parts — which rules it out if your batch was doing document extraction or multimodal work. And a successful submission returns 202 Accepted with status: "validating", meaning OpenRouter has queued your batch and nothing more; treating a 202 as completion is the single easiest way to ship a pipeline that silently drops work.

The 24-hour window is the part that quietly changes your infrastructure requirements. Submitting is a single call, but somebody has to poll for results and collect them, potentially most of a day later — a laptop that sleeps at 6pm is not that somebody. Budget the poll as part of the job, or the discount pays for itself in ops time.

Route Two: openai/flex keeps the discount without the wait

The early write-ups missed this part entirely. OpenAI's service tiers are still on OpenRouter; they moved from model slugs to provider endpoint tags. Ask openai/gpt-5.6-sol for its endpoints and three OpenAI routes come back, each with its own price sheet:

Service tier tagInput / 1MOutput / 1M
openai (standard)$2.00$10.00
openai/flex$1.00$5.00
openai/priority$4.00$20.00

Flex is exactly half of standard — the same discount :batch gave you — and it is synchronous. No 24-hour window, no polling, no collection step. For most workloads that were on batch purely for the price rather than the asynchrony, this is a straight upgrade.

The catch is that these tiers require explicit opt-in. OpenRouter's provider routing docs are direct about it: service tier endpoints are not matched by base slugs — they require explicit opt-in. You name the tag in the provider block:

{
  "model": "openai/gpt-5.6-sol",
  "messages": [{"role": "user", "content": "Hello"}],
  "provider": { "only": ["openai/flex"] }
}

The second catch is coverage, and it is the one that will decide this for you. Flex exists on the GPT-5.6 family. It does not exist on openai/gpt-5, openai/gpt-4o, openai/o3 or openai/gpt-4.1 — all of which came back with nothing but standard openai and azure tags when checked on August 28. If your batch pipeline was pinned to an older ID, there is no discounted tier left for it on OpenRouter at all, and your real choice is to move the workload forward a model generation or move it off the platform.

Route Three: OpenAI's own Batch API never went anywhere

OpenAI still runs batching directly, and the terms are unchanged: a 50% cost discount compared to synchronous APIs, a separate pool of higher rate limits that does not draw down your per-model limits, and batches that complete "within 24 hours (and often more quickly)". Per batch you get up to 50,000 requests and a 200MB input file, and you can create up to 2,000 batches an hour.

The cost of going direct is the thing you were on OpenRouter for. You give up the unified key, the fallback routing, and the ability to move a workload to Anthropic or Google by editing a string. If OpenAI is the only vendor in your batch pipeline, take the direct route and stop thinking about it. If you were batching across vendors, splitting one job across two APIs to save 50% on part of it is how you end up with reconciliation code nobody wants to own.

What the three routes cost per task

Run the math on a typical agency batch job — 10K input tokens, 2K output tokens per task, the shape of an eval or extraction workload:

RouteInput / 1MOutput / 1MPer-task cost (10K in / 2K out)Latency profile
openai/gpt-5.6-sol (standard)$2.00$10.00$0.04Realtime
openai/gpt-5.6-sol via flex$1.00$5.00$0.02Realtime (same 50%)
openai/gpt-4o via beta Batch API50% of standard50% of standard~half of realtimeUp to 24h window
OpenAI direct Batch API50% of sync50% of sync~half of realtimeUp to 24h window
openai/gpt-5:batch (dead slug)404 — will not runFails immediately

On a 100,000-task monthly delivery, the difference between standard and flex on GPT-5.6 Sol is about $2,000/month in raw token cost ($4,000 vs $2,000) before retries and overhead. That is exactly the line item the AI Agency Pricing Calculator exists to model — and exactly the line that silently doubles if a dead :batch slug falls back to standard pricing without anyone noticing.

How to check any model ID before it bites you

The check takes one call and no key. Ask for a model's endpoints and count the array:

curl -s https://openrouter.ai/api/v1/models/openai/gpt-5:batch/endpoints \
| python3 -c "import json,sys; print(len(json.load(sys.stdin)['data']['endpoints']))"

Zero means the ID is a headstone. Anything else means it routes. Run it against every model string in your config, not only the one that threw — the sweep took 42 entries and you may be holding more than one dead slug. Check at minimum: every :batch variant, every pinned model you quote to clients, and every fallback route in your provider block.

For the recurring version, diff the full /api/v1/models response daily and alert on any slug that disappears or gains a non-null expiration_date. There is no mailing list for this and no changelog to subscribe to; the catalogue is the announcement. Which means the alert only works if it runs every day whether or not you opened your laptop.

What to pin before the next OpenRouter sweep

The lesson from August 26 is not that OpenRouter is unreliable; catalogues change and 42 rows moving in a night is a normal Wednesday for an aggregator carrying 380 models. The lesson is that most of us pin the model and treat the price tier as scenery, when the tier is the part that gets deleted.

openai/gpt-5 survived. openai/gpt-5:batch did not — and the difference between them was six characters and 50% of your bill. A practical checklist for your agency's quoting and tooling:

Model your AI delivery costs against current market rates

Try the AI Agency Pricing Calculator →

Estimate setup fees, retainers, and margin in under a minute — then model per-agent workload costs with the AI Agent API Cost Calculator.

Frequently asked questions

Why does OpenRouter say no endpoints found for my OpenAI batch model?

Because the model entry still exists in the catalogue but has zero providers attached to it. OpenRouter removed all 35 openai/*:batch slugs from its routing table on Aug 26, 2026 while leaving the catalogue records in place — so metadata calls succeed and completion calls return 404 with "No endpoints found for openai/<model>:batch."

Is OpenAI batch API still available on OpenRouter?

Not through the :batch model suffixes — those are gone. The 50% batch discount is still reachable three ways: OpenRouter's beta Batch API (POST /api/beta/batches, takes the plain model slug, 24-hour window, text-only), the openai/flex service tier (synchronous, explicit opt-in, GPT-5.6 family only), or OpenAI's own direct Batch API.

Are the OpenAI batch models coming back?

Nothing in OpenRouter's docs or catalogue suggests they will. The :batch suffix is absent from the current Batch API documentation entirely, which reads like the suffix was the legacy mechanism and the beta endpoint is the replacement. OpenAI went first; the surviving 24 batch variants from other vendors are the ones to watch for the next sweep.

What is the cheapest way to run OpenAI batch jobs now?

If you are on a GPT-5.6 model, provider: {"only": ["openai/flex"]} gets you the same 50% discount synchronously (e.g. gpt-5.6-sol at $1.00/$5.00 per 1M instead of $2.00/$10.00). If you are on an older ID like gpt-5, gpt-4o, o3 or gpt-4.1, flex does not exist for them — use OpenRouter's beta Batch API or OpenAI's direct Batch API, both holding the 50% with a 24-hour window attached.

Did other vendors lose their batch variants too?

Two did: z-ai/glm-5.2:batch and moonshotai/kimi-k2.7-code:batch. Anthropic kept 11 batch variants, Google kept 10, and Thinking Machines, NVIDIA and MiniMax kept one each — 24 variants in total still route, including anthropic/claude-opus-5:batch at the same clean 50% discount.

How do I check whether a model slug still routes on OpenRouter?

One call, no key: curl https://openrouter.ai/api/v1/models/openai/gpt-5:batch/endpoints and count the array length. Zero means the ID is dead. Run it against every model string in your config — the sweep took 42 entries, so you may be holding more than one dead slug. For the recurring version, diff the full /api/v1/models response daily and alert on any slug that disappears.

Sources

Accuracy note: All catalogue numbers (422→380 models, 35 OpenAI :batch removals, 42 total departures, 24 surviving batch variants, flex tier pricing, GPT-5 route pricing) were read from OpenRouter's live /api/v1/models API on Aug 28, 2026 and documented by MoClaw's investigation the same day; verified again against OpenRouter's OpenAI vendor page. The 50% discount terms for OpenRouter's beta Batch API and OpenAI's direct Batch API are from the respective official docs. Batch pricing and model availability on an aggregator change without notice — re-run the endpoint check before quoting client work.