Half your LLM bill might be paying real-time prices for work that doesn't run in real time. Nightly enrichment jobs, eval suites, bulk classification backfills — most teams route these through the same synchronous endpoint as their chat interface, by default, simply because that's how the first version got built. OpenAI's Batch API exists specifically to fix that, and the discount is bigger than most teams realize.

TL;DR

1. Flat 50% discount on input and output tokens, across every OpenAI model — no volume tiers, no minimums.
2. 24-hour completion guarantee; many batches finish well under that in practice.
3. The set of workloads that qualify is usually bigger than teams assume once they actually audit which endpoints need to be real-time.

The Discount, Precisely

OpenAI's Batch API gives a flat 50% off both input and output tokens for requests submitted asynchronously, with results guaranteed within 24 hours. Unlike volume-based enterprise discounts, this applies uniformly across every model in the lineup — there's no minimum spend and no tier to qualify for. Submit a batch of 10 requests or 10 million, the discount is the same 50%.

ModelStandard Rate (in/out)Batch Rate (in/out)
GPT-5 Mini$0.25 / $2.00$0.125 / $1.00
GPT-5 Nano$0.05 / $0.40$0.025 / $0.20
GPT-4o$2.50 / $10.00$1.25 / $5.00

Anthropic's Message Batches API matches the structure — the same flat 50% off input and output — and stacks with prompt caching discounts, so a batch job with a stable, cacheable system prompt can end up considerably cheaper than either discount alone.

What Actually Qualifies

Fits Batch

  • Overnight enrichment (data labeling, classification, tagging)
  • Eval suites and regression test runs
  • Bulk classification of historical data
  • Dataset labeling for fine-tuning
  • Embedding backfills
  • Scheduled report generation (weekly digests, monthly summaries)

Doesn't Fit Batch

  • Chat interfaces — anything a user is actively waiting on
  • Agent loops where output A feeds directly into input B
  • Any latency-sensitive workflow with a sub-minute expectation
  • Requests that depend on another batch's result in the same flow

The dividing line isn't "is this important" — it's "does a human need this response inside seconds." A lot of internal-facing, scheduled, or backend-only work clears that bar easily once you actually ask the question endpoint by endpoint, rather than assuming everything needs to be synchronous because the first version was built that way.

Not sure which of your endpoints qualify?

Preto tags requests by latency sensitivity, so you can see exactly which ones could move to batch pricing without touching your product experience.

Find Your Batch-Eligible Requests

Preto tags requests by latency sensitivity. See which qualify for batch.

A Real Public Example

Quora is publicly on record using Anthropic's Batches API for summarization and highlight-extraction features, describing the appeal directly: it's simpler to submit a batch and download results within 24 hours than to manage the complexity of running many parallel live queries at scale. That's the operational case for batch beyond the pricing — it's also less infrastructure to maintain for work that was never actually latency-sensitive in the first place.

The Implementation Pattern

Audit your top-cost endpoints and ask, for each one: does the user need this response within five seconds, or could it be queued and delivered later? The set of "could be batched" is almost always bigger than the first-pass answer suggests — internal analytics, recurring report generation, content moderation backlog processing, and anything that already runs on a cron schedule are common candidates that get missed because they were built as synchronous calls out of convenience, not necessity.

Once you've identified a batch-eligible endpoint, the migration is mechanical: collect requests into a JSONL file, submit as a batch job, poll or webhook for completion, and process results asynchronously instead of blocking on a response. The 24-hour window is a ceiling, not a target — most batches complete in a fraction of that time, so the user-facing latency cost of switching is usually smaller than it sounds.

Batch is one of five recurring patterns behind most cost-reduction results — see how it stacks with routing and caching for the full before/after picture. And if the caching side of your stack isn't set up yet, the response caching implementation guide covers the other big non-realtime win.

Frequently Asked Questions

How much does the OpenAI Batch API actually save?
A flat 50% discount on both input and output tokens, across every model. There's no volume threshold or tier structure; the discount applies from the first batch request.
How long does the OpenAI Batch API take to return results?
Requests are guaranteed to complete within 24 hours, though many batches complete well under that window in practice. This is the tradeoff for the discount — no synchronous response.
What kinds of LLM workloads qualify for batch processing?
Anything that doesn't need to return in real time: overnight enrichment, eval suites, bulk classification, dataset labeling, embedding backfills, and scheduled report generation. The common thread is no human staring at a loading spinner.
What doesn't fit the Batch API?
Anything user-facing in real time — chat interfaces, agent loops where one call feeds directly into the next, and latency-sensitive workflows. If it needs to return in seconds, batch isn't the right fit.

See which of your requests could be running at half price.

Preto tags every request by latency sensitivity, so you can find your batch-eligible traffic without manually auditing every endpoint.

Find Your Batch-Eligible Requests

Free forever up to 10K requests. No credit card required.

Gaurav Dagade
Gaurav Dagade

Founder of Preto.ai. 11 years engineering leadership. Previously Engineering Manager at Bynry. Building the cost intelligence layer for AI infrastructure.

LinkedIn · Twitter