All three major vendors sell the same deal. You submit a list of requests, collect the results within 24 hours and pay half the synchronous price. The vendors differ in their limits, their queue rules and the fate of a job that does not finish in time. Every price and limit below is as of October 2026, taken from the vendor page linked in its row.

A batch API takes work that nobody is waiting on and moves it to a queue the vendor drains when capacity is spare. The discount pays you for waiting. For a 500,000-document classification job, the saving runs from about $270 to $725 depending on the model. The arithmetic is further down.

Provider Discount Turnaround window Max requests per batch Max file size Result retention Models supported Source
OpenAI Batch API 50% 24h, the only value accepted; "often more quickly" 50,000 (also 50,000 embedding inputs) 200 MB input file Output file deleted 30 days after completion "Most models"; endpoints: responses, chat/completions, embeddings, completions, moderations, image generation and edits OpenAI batch guide
Anthropic Message Batches 50% on input and output Up to 24 hours; "most batches completing within 1 hour" 100,000 requests or 256 MB, whichever comes first 256 MB Results downloadable for 29 days All active models; not available for Fast mode Anthropic batch docs
Gemini Batch API 50% of standard cost Target 24 hours, "much quicker" in most cases; a job still pending or running after 48 hours expires Not stated Inline requests under 20 MB; JSONL input file up to 2 GB 6 weeks "A range of Gemini models"; embeddings via batches.create_embeddings Gemini batch docs

How a batch job flows

Batch flow: build requests, create the batch, wait in the vendor queue for up to 24 hours, download the results file, parse it; the queue step is billed at half price completion window: up to 24 h Build requests JSONL or a list Create batch one API call Vendor queue 50% off sync price Results file one line per request Parse results match by id Your code runs at both ends. Nothing happens on your side while the queue drains.
All three vendors share this flow, with a 24-hour window and the queue step billed at half price.

The flow is the same everywhere. The one structural difference is where the input lives. OpenAI reads a file you uploaded first. Anthropic takes the request list inside the API call. Gemini accepts either an inline list under 20 MB or an uploaded JSONL file.

Results can come back out of order. Every request therefore carries an id you choose (custom_id at OpenAI and Anthropic, key at Gemini), and your parser matches on it.

OpenAI Batch API

Each batch holds up to 50,000 requests in one JSONL file of at most 200 MB. The only completion window is 24h. At the deadline, OpenAI cancels any unfinished requests and moves the batch to the expired status. It still bills the requests that completed. OpenAI deletes the output file 30 days after the batch completes.

Batch traffic draws from its own rate-limit pool. Each model has a cap on enqueued prompt tokens. Your Settings page shows the cap; the docs do not. You can create up to 2,000 batches per hour, and batches have no output-token limit.

One JSONL line is one request. The snippet is illustrative and wrapped for reading; in the file it stays on one line.

{"custom_id": "doc-000001", "method": "POST", "url": "/v1/chat/completions",
 "body": {"model": "gpt-6.1-terra",
          "messages": [{"role": "system", "content": "Classify the document as invoice, contract, memo or other. Reply with the label only."},
                       {"role": "user", "content": "<document text>"}],
          "max_completion_tokens": 50}}
batch_input_file = client.files.create(file=open("batchinput.jsonl", "rb"), purpose="batch")
batch = client.batches.create(
    input_file_id=batch_input_file.id,
    endpoint="/v1/chat/completions",
    completion_window="24h",
)

OpenAI's GPT-6 Astra model page also lists Flex processing at the same price as batch. Flex takes requests one at a time instead of as a file. OpenRouter's listing shows the same Flex price for GPT-6.1 Terra.

Anthropic Message Batches

Anthropic caps a batch at 100,000 requests or 256 MB, whichever comes first. The docs say most batches complete within an hour. The hard limit is 24 hours, after which the batch expires. Results stay downloadable for 29 days after creation. All active models support batches, except in Fast mode. Each request needs max_tokens of at least 1.

Rate limits apply to the batch calls themselves and to the number of requests waiting in the queue. The rate-limits page prints them by tier: Start 1,000 batch requests per minute and 200,000 requests in the processing queue; Build 2,000 and 300,000; Scale 4,000 and 500,000. Batch usage does not count against the Messages API limits.

The request list goes inside the call. The snippet is illustrative and uses the model id from Anthropic's own example.

message_batch = client.messages.batches.create(
    requests=[
        {
            "custom_id": "doc-000001",
            "params": {
                "model": "claude-opus-5-5",
                "max_tokens": 50,
                "messages": [{"role": "user", "content": "<document text>"}],
            },
        },
        # ... up to 100,000 requests or 256 MB
    ]
)
Anthropic's October 2024 launch; the per-batch limit has since risen from 10,000 to 100,000 requests, while the 24-hour window and the 50% discount are unchanged.

Gemini Batch API

Gemini has two input modes. Inline requests go straight into the batches.create call and must total under 20 MB. Larger jobs upload a JSONL file of up to 2 GB. The rate-limits page adds limits of 20 GB of file storage and 100 concurrent batch jobs. The docs do not state a maximum request count. The turnaround target is 24 hours. A job still pending or running after 48 hours moves to JOB_STATE_EXPIRED. Google stores results for 6 weeks.

Gemini expresses rate limits as enqueued tokens per model per tier (see the next section). Embeddings have their own batch call, batches.create_embeddings.

Illustrative inline call, with the model id from Google's example:

inline_requests = [
    {"contents": [{"parts": [{"text": "Classify: <document text>"}], "role": "user"}]},
    # ... keep the whole list under 20 MB
]
inline_batch_job = client.batches.create(
    model="gemini-3.8-flash",
    src=inline_requests,
    config={"display_name": "classify-2026-10-31"},
)

A line of the file-based variant looks like {"key": "request-1", "request": {"contents": [{"parts": [{"text": "..."}]}]}}. Poll batch_job.state.name until it reaches a terminal state. Then read batch_job.dest.file_name and download it with client.files.download.

Google for Developers runs an evaluation dataset through the Gemini Batch API in a notebook, with the same submit, poll and download loop, in under three minutes.

Which workloads fit

A batch queue suits anything that is produced in bulk and consumed later:

Two kinds of work do not fit. The first is anything user-facing. The only promise is "within 24 hours", with nothing about the first minute. The second is anything with a deadline shorter than the window. A job that must finish by 09:00 cannot go into a queue that may legitimately take until tomorrow afternoon. Anthropic's "most batches completing within 1 hour" and Google's "much quicker in most cases" are observations. Neither vendor guarantees them.

The queue limits decide how much you can submit at once:

Provider Batch queue limit Source
OpenAI Per-model enqueued prompt tokens (value on the Settings page); 2,000 batches per hour; separate pool from standard limits OpenAI batch guide
Anthropic Start: 1,000 batch RPM, 200,000 queued requests. Build: 2,000 / 300,000. Scale: 4,000 / 500,000 Anthropic rate limits
Gemini, enqueued tokens for Argon / 3.8 Flash / 3.5 Flash-Lite / Embedding Tier 1: 5M / 3M / 10M / 500K. Tier 2: 500M / 400M / 500M / 5M. Tier 3: 1B / 1B / 1B / 10M Gemini rate limits

Gemini's Tier 1 cap of 3,000,000 enqueued tokens on 3.8 Flash is small. It holds roughly 2,500 documents of 1,200 tokens in the queue at a time. Tier 2 (after $100 paid and three days) raises it to 400,000,000. The Gemini free tier does not offer batch at all.

Beyond the big three, terms vary. Mistral's plan page says batch "reduces the price by 50%". xAI gives 20% on its listed Grok models. DeepSeek lists no batch discount and uses off-peak hours (50% of peak price) as its scheduling discount instead. Gemini also has service tiers for synchronous calls. Its flex tier bills at the batch price, and priority costs 1.8x standard.

Batch plus cache

The two discounts address different tokens. Batch halves the price of every token in the job, and caching cuts the price of a repeated prefix. Each vendor handles the combination differently.

For the structure of a cacheable prompt, see the prompt caching guide.

Classifying 500,000 documents

The job is to classify 500,000 documents with 1,200 input tokens and 50 output tokens each. Total input is 600,000,000 tokens (600M), and total output is 25,000,000 tokens (25M). The table uses one mid-tier model per vendor, with prices from the vendor pages. OpenAI's batch guide puts batch at 50% of the synchronous price, which gives $0.50 / $2.50 for GPT-6.1 Terra.

Model Sync price in / out Sync input cost Sync output cost Sync total Batch price in / out Batch total Saved
GPT-6.1 Terra $1.00 / $5.00 600 × $1.00 = $600.00 25 × $5.00 = $125.00 $725.00 $0.50 / $2.50 $300.00 + $62.50 = $362.50 $362.50
Claude Sonnet 5.5 $2.00 / $10.00 600 × $2.00 = $1,200.00 25 × $10.00 = $250.00 $1,450.00 $1.00 / $5.00 $600.00 + $125.00 = $725.00 $725.00
Gemini 3.8 Flash $0.75 / $3.75 600 × $0.75 = $450.00 25 × $3.75 = $93.75 $543.75 $0.375 / $1.875 $225.00 + $46.88 = $271.88 $271.88

Output is about 17% of each bill here. The job sends 1,200 tokens in and gets 50 out, and all three models price output at five times input. That ratio is typical of classification and extraction. It is why batch pays off most on long-input, short-output jobs. Per the pricing page, Gemini 3.8 Flash's listed prices rise on 1 January 2027 to $1.50 / $7.50 (batch $0.75 / $3.75).

The job also has to clear the queue limits above. OpenAI needs ten batches of 50,000 requests. Anthropic needs five batches of 100,000. A Start-tier account there holds only 200,000 queued requests, so the job goes in three waves; Scale tier takes it in one. Gemini's Tier 2 enqueued cap for 3.8 Flash is 400M, below the job's 600M input tokens. The job then needs either two waves or Tier 3.

For the same comparison across more models, see the October 2026 pricing snapshot.

What to do next

Sources