Compare asynchronous LLM batch contracts and fixed-job economics
LLM Batch APIs Compared — OpenAI, Anthropic, Gemini, and More
Batch APIs are asynchronous contracts, not automatic discounts or unlimited queues. Compare upload and result format, eligible endpoint and model, request and queue limits, completion or expiry, cancellation, result ordering, failures, and usage reconciliation for the exact job. A cost result is Unavailable when rates, usage, or request-result identity do not join. Verified 2026-09-02.
Compare asynchronous batch formats, eligibility, limits, completion, cancellation, result identity, and fixed-job economics. Qualitative demand: dedicated cross-provider batch API comparisons were reviewed 2026-09-02; exact US monthly volume is unavailable.
Evidence boards · verified 2026-09-02
Intent answer: Batch APIs are asynchronous contracts, not automatic discounts or unlimited queues. Compare upload and result format, eligible endpoint and model, request and queue limits, completion or expiry, cancellation, result ordering, failures, and usage reconciliation for the exact job. A cost result is Unavailable when rates, usage, or request-result identity do not join. Verified 2026-09-02.
Demand evidence: Qualitative demand: dedicated cross-provider batch API comparisons were reviewed 2026-09-02; exact US monthly volume is unavailable.
Scope boundary: Compare asynchronous batch formats, eligibility, limits, completion, cancellation, result identity, and fixed-job economics. Exact provider, seller, serving host, account/tier, endpoint, model/snapshot, region, feature, and evidence identity are required; unresolved joins render Unavailable.
Batch-contract normalizer
Deterministic formula / rule: batch eligible = exact provider/host/model/endpoint + accepted payload + limits + completion/expiry + result identity; undocumented fields stay unavailable.
Boundary: Owns asynchronous cross-provider contracts; syntax, provider rates, and generic adoption strategy remain with their owners.
| Frozen scenario | Exact identity and evidence fields | Result | State |
|---|---|---|---|
| JSONL upload | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=JSONL upload; provider/host/model/endpoint; submission/result format; request/byte/token/queue limits; completion/expiry; cancellation; ordering; prerequisite; source/date; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen batch-api fixture requires an exact source, identity, and result receipt | UNTESTED — module 1 rule is reproducible but no production observation is claimed |
| inline request list | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=inline request list; provider/host/model/endpoint; submission/result format; request/byte/token/queue limits; completion/expiry; cancellation; ordering; prerequisite; source/date; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen batch-api fixture requires an exact source, identity, and result receipt | UNTESTED — module 1 rule is reproducible but no production observation is claimed |
| file-backed job | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=file-backed job; provider/host/model/endpoint; submission/result format; request/byte/token/queue limits; completion/expiry; cancellation; ordering; prerequisite; source/date; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen batch-api fixture requires an exact source, identity, and result receipt | UNTESTED — module 1 rule is reproducible but no production observation is claimed |
| unsupported endpoint | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=unsupported endpoint; provider/host/model/endpoint; submission/result format; request/byte/token/queue limits; completion/expiry; cancellation; ordering; prerequisite; source/date; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — exact batch-api evidence join is not closed for “unsupported endpoint” | FAIL CLOSED — manual, probe, or source evidence required |
| oversized job | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=oversized job; provider/host/model/endpoint; submission/result format; request/byte/token/queue limits; completion/expiry; cancellation; ordering; prerequisite; source/date; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen batch-api fixture requires an exact source, identity, and result receipt | UNTESTED — module 1 rule is reproducible but no production observation is claimed |
| duplicate custom-ID | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=duplicate custom-ID; provider/host/model/endpoint; submission/result format; request/byte/token/queue limits; completion/expiry; cancellation; ordering; prerequisite; source/date; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — exact batch-api evidence join is not closed for “duplicate custom-ID” | FAIL CLOSED — manual, probe, or source evidence required |
First-party citation: OpenAI Batch API guide. Verified 2026-09-02; missing or conflicting joins fail closed.
Fixed batch-job eligibility and cost receipt
Deterministic formula / rule: total = Σ(input units × input rate + output units × output rate) for each eligible request; batch total is shown only with documented batch rates.
Boundary: Owns the six frozen jobs and fixed-job arithmetic, not cheapest-provider or arbitrary forecast claims.
| Frozen scenario | Exact identity and evidence fields | Result | State |
|---|---|---|---|
| 10K short classifications | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=10K short classifications; units; request/input/output shape; endpoint/model eligibility; standard/batch rate versions; formula; sync/batch total or Unavailable; turnaround; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen batch-api fixture requires an exact source, identity, and result receipt | UNTESTED — module 2 rule is reproducible but no production observation is claimed |
| 1K long summaries | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=1K long summaries; units; request/input/output shape; endpoint/model eligibility; standard/batch rate versions; formula; sync/batch total or Unavailable; turnaround; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen batch-api fixture requires an exact source, identity, and result receipt | UNTESTED — module 2 rule is reproducible but no production observation is claimed |
| 500 structured extractions | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=500 structured extractions; units; request/input/output shape; endpoint/model eligibility; standard/batch rate versions; formula; sync/batch total or Unavailable; turnaround; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen batch-api fixture requires an exact source, identity, and result receipt | UNTESTED — module 2 rule is reproducible but no production observation is claimed |
| 100 image requests | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=100 image requests; units; request/input/output shape; endpoint/model eligibility; standard/batch rate versions; formula; sync/batch total or Unavailable; turnaround; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen batch-api fixture requires an exact source, identity, and result receipt | UNTESTED — module 2 rule is reproducible but no production observation is claimed |
| 100 five-tool requests | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=100 five-tool requests; units; request/input/output shape; endpoint/model eligibility; standard/batch rate versions; formula; sync/batch total or Unavailable; turnaround; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen batch-api fixture requires an exact source, identity, and result receipt | UNTESTED — module 2 rule is reproducible but no production observation is claimed |
| mixed-model job | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=mixed-model job; units; request/input/output shape; endpoint/model eligibility; standard/batch rate versions; formula; sync/batch total or Unavailable; turnaround; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen batch-api fixture requires an exact source, identity, and result receipt | UNTESTED — module 2 rule is reproducible but no production observation is claimed |
First-party citation: Google Gemini batch API. Verified 2026-09-02; missing or conflicting joins fail closed.
Completion, failure, and reconciliation board
Deterministic formula / rule: reconciled = submitted IDs joined exactly once to result and usage state; missing, duplicate, or unbilled rows => hold/rebuild.
Boundary: Owns result-set integrity; billing and reliability claims require a closed joined receipt.
| Frozen scenario | Exact identity and evidence fields | Result | State |
|---|---|---|---|
| all-success | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=all-success; submitted/completed/failed/expired/cancelled counts; request-result identity; retry eligibility; duplicate protection; usage/billing state; action; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen batch-api fixture requires an exact source, identity, and result receipt | UNTESTED — module 3 rule is reproducible but no production observation is claimed |
| mixed validation errors | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=mixed validation errors; submitted/completed/failed/expired/cancelled counts; request-result identity; retry eligibility; duplicate protection; usage/billing state; action; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — frozen batch-api fixture requires an exact source, identity, and result receipt | UNTESTED — module 3 rule is reproducible but no production observation is claimed |
| provider failures | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=provider failures; submitted/completed/failed/expired/cancelled counts; request-result identity; retry eligibility; duplicate protection; usage/billing state; action; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — exact batch-api evidence join is not closed for “provider failures” | FAIL CLOSED — manual, probe, or source evidence required |
| expired job | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=expired job; submitted/completed/failed/expired/cancelled counts; request-result identity; retry eligibility; duplicate protection; usage/billing state; action; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — exact batch-api evidence join is not closed for “expired job” | FAIL CLOSED — manual, probe, or source evidence required |
| cancelled job | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=cancelled job; submitted/completed/failed/expired/cancelled counts; request-result identity; retry eligibility; duplicate protection; usage/billing state; action; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — exact batch-api evidence join is not closed for “cancelled job” | FAIL CLOSED — manual, probe, or source evidence required |
| missing result | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=missing result; submitted/completed/failed/expired/cancelled counts; request-result identity; retry eligibility; duplicate protection; usage/billing state; action; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — exact batch-api evidence join is not closed for “missing result” | FAIL CLOSED — manual, probe, or source evidence required |
| duplicate ID | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=duplicate ID; submitted/completed/failed/expired/cancelled counts; request-result identity; retry eligibility; duplicate protection; usage/billing state; action; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — exact batch-api evidence join is not closed for “duplicate ID” | FAIL CLOSED — manual, probe, or source evidence required |
| missing usage | route=/compare/llm-batch-api; owner=batch-api; provider/seller/host/account/tier/endpoint/model/snapshot/region/feature/request=batch-api; scenario=missing usage; submitted/completed/failed/expired/cancelled counts; request-result identity; retry eligibility; duplicate protection; usage/billing state; action; observed versus documented versus assumed inputs are labeled; artifact/schema/tool/job/result hashes and verification date=2026-09-02 | Unavailable — exact batch-api evidence join is not closed for “missing usage” | FAIL CLOSED — manual, probe, or source evidence required |
First-party citation: Anthropic Message Batches API. Verified 2026-09-02; missing or conflicting joins fail closed.
Method and limitations: this board exposes deterministic rules, first-party citations, and dated evidence identities. It does not invent volume, coverage, entitlement, retention, residency, quota, capacity, feature support, quality, price, reliability, or legal conclusions. Run the batch-api evidence flow →
