{
  "schemaVersion": 1,
  "title": "Batch API versus standard API evidence set",
  "sourceCheckedAt": "2026-08-22",
  "currency": "USD",
  "rateUnit": "per_1m_tokens",
  "publicationStatus": "article_approved",
  "articleApproval": {
    "status": "approved",
    "approvedAt": "2026-08-23T06:00:51+08:00",
    "approvedBy": "xiaofengzhang"
  },
  "scope": "Simulated text-token inference costs for independent asynchronous jobs. Tool charges, storage, taxes, long-context modifiers, prompt-cache writes, and engineering labor are excluded.",
  "formula": {
    "standardCost": "inputMTok * standardInputRate + outputMTok * standardOutputRate",
    "firstBatchCost": "inputMTok * batchInputRate + outputMTok * batchOutputRate",
    "acceptedResultRerunCost": "firstBatchCost * acceptedResultRerunRate",
    "batchCostWithReruns": "firstBatchCost * (1 + acceptedResultRerunRate)",
    "savings": "standardCost - batchCostWithReruns"
  },
  "rerunDefinition": "The rerun rate is a simulation of completed, billed results rejected by the application's quality gate and submitted again. It is not an assumption about how providers bill API validation errors, expired requests, or provider-side failures.",
  "providers": [
    {
      "provider": "OpenAI",
      "modelId": "gpt-5-6-sol",
      "model": "GPT-5.6 Sol",
      "batchSupport": "confirmed",
      "standardInputRate": 5,
      "standardOutputRate": 30,
      "batchInputRate": 2.5,
      "batchOutputRate": 15,
      "turnaround": "up_to_24h",
      "maxRequestsPerBatch": 50000,
      "maxInputFileMB": 200,
      "resultOrderGuaranteed": false,
      "notes": "Uses a separate batch rate-limit pool. Completed requests in an expired batch are billed; unfinished requests are cancelled.",
      "sourceUrls": [
        "https://developers.openai.com/api/docs/guides/batch",
        "https://developers.openai.com/api/docs/models/gpt-5.6-sol"
      ]
    },
    {
      "provider": "Anthropic",
      "modelId": "claude-haiku-4-5",
      "model": "Claude Haiku 4.5",
      "batchSupport": "confirmed",
      "standardInputRate": 1,
      "standardOutputRate": 5,
      "batchInputRate": 0.5,
      "batchOutputRate": 2.5,
      "turnaround": "most_under_1h_expires_at_24h",
      "maxRequestsPerBatch": 100000,
      "maxInputFileMB": 256,
      "resultAvailabilityDays": 29,
      "resultOrderGuaranteed": false,
      "notes": "Each request is independent. A single request failure does not fail the rest of the batch.",
      "sourceUrls": [
        "https://platform.claude.com/docs/en/build-with-claude/batch-processing",
        "https://platform.claude.com/docs/en/about-claude/pricing"
      ]
    },
    {
      "provider": "Google",
      "modelId": "gemini-3-7-flash",
      "model": "Gemini 3.7 Flash",
      "batchSupport": "confirmed",
      "standardInputRate": 0.75,
      "standardOutputRate": 3.75,
      "batchInputRate": 0.375,
      "batchOutputRate": 1.875,
      "turnaround": "target_24h",
      "maxRequestsPerBatch": null,
      "maxInputFileMB": 2048,
      "inlineRequestSizeLimitMB": 20,
      "createIsIdempotent": false,
      "rateValidThrough": "2026-12-31",
      "notes": "A duplicate create call produces a separate job. Check failedRequestCount and per-line results before retrying.",
      "sourceUrls": [
        "https://ai.google.dev/gemini-api/docs/batch-api?hl=en",
        "https://ai.google.dev/gemini-api/docs/pricing?hl=en"
      ]
    },
    {
      "provider": "DeepSeek",
      "modelId": "deepseek-v4-flash",
      "model": "DeepSeek V4 Flash",
      "batchSupport": "not_confirmed_in_reviewed_official_docs",
      "standardInputRate": 0.44,
      "standardOutputRate": 1.32,
      "batchInputRate": null,
      "batchOutputRate": null,
      "turnaround": null,
      "notes": "No direct DeepSeek Batch API endpoint or Batch rate was located in the official documentation reviewed on 2026-08-22. This is not a claim that support can never exist.",
      "sourceUrls": [
        "https://api-docs.deepseek.com/",
        "https://api-docs.deepseek.com/quick_start/pricing/"
      ]
    }
  ],
  "workloads": [
    {
      "id": "nightly-support-summaries",
      "name": "Nightly support summaries",
      "requests": 100000,
      "inputTokensPerRequest": 2000,
      "outputTokensPerRequest": 300,
      "acceptedResultRerunRate": 0.05,
      "whyBatchFits": "Independent summaries are collected overnight and do not block an interactive user request."
    },
    {
      "id": "offline-model-evaluation",
      "name": "Offline model evaluation",
      "requests": 50000,
      "inputTokensPerRequest": 5000,
      "outputTokensPerRequest": 1000,
      "acceptedResultRerunRate": 0.1,
      "whyBatchFits": "Evaluation cases are independent and the aggregate report can wait for the batch window."
    },
    {
      "id": "bulk-record-extraction",
      "name": "Bulk record extraction",
      "requests": 200000,
      "inputTokensPerRequest": 1200,
      "outputTokensPerRequest": 100,
      "acceptedResultRerunRate": 0.02,
      "whyBatchFits": "Records can be partitioned into multiple jobs and reconciled by a stable custom identifier."
    }
  ],
  "results": [
    { "workloadId": "nightly-support-summaries", "modelId": "gpt-5-6-sol", "inputMTok": 200, "outputMTok": 30, "standardCost": 1900, "firstBatchCost": 950, "rerunCost": 47.5, "batchCostWithReruns": 997.5, "savings": 902.5, "savingsPercent": 47.5 },
    { "workloadId": "nightly-support-summaries", "modelId": "claude-haiku-4-5", "inputMTok": 200, "outputMTok": 30, "standardCost": 350, "firstBatchCost": 175, "rerunCost": 8.75, "batchCostWithReruns": 183.75, "savings": 166.25, "savingsPercent": 47.5 },
    { "workloadId": "nightly-support-summaries", "modelId": "gemini-3-7-flash", "inputMTok": 200, "outputMTok": 30, "standardCost": 262.5, "firstBatchCost": 131.25, "rerunCost": 6.5625, "batchCostWithReruns": 137.8125, "savings": 124.6875, "savingsPercent": 47.5 },
    { "workloadId": "offline-model-evaluation", "modelId": "gpt-5-6-sol", "inputMTok": 250, "outputMTok": 50, "standardCost": 2750, "firstBatchCost": 1375, "rerunCost": 137.5, "batchCostWithReruns": 1512.5, "savings": 1237.5, "savingsPercent": 45 },
    { "workloadId": "offline-model-evaluation", "modelId": "claude-haiku-4-5", "inputMTok": 250, "outputMTok": 50, "standardCost": 500, "firstBatchCost": 250, "rerunCost": 25, "batchCostWithReruns": 275, "savings": 225, "savingsPercent": 45 },
    { "workloadId": "offline-model-evaluation", "modelId": "gemini-3-7-flash", "inputMTok": 250, "outputMTok": 50, "standardCost": 375, "firstBatchCost": 187.5, "rerunCost": 18.75, "batchCostWithReruns": 206.25, "savings": 168.75, "savingsPercent": 45 },
    { "workloadId": "bulk-record-extraction", "modelId": "gpt-5-6-sol", "inputMTok": 240, "outputMTok": 20, "standardCost": 1800, "firstBatchCost": 900, "rerunCost": 18, "batchCostWithReruns": 918, "savings": 882, "savingsPercent": 49 },
    { "workloadId": "bulk-record-extraction", "modelId": "claude-haiku-4-5", "inputMTok": 240, "outputMTok": 20, "standardCost": 340, "firstBatchCost": 170, "rerunCost": 3.4, "batchCostWithReruns": 173.4, "savings": 166.6, "savingsPercent": 49 },
    { "workloadId": "bulk-record-extraction", "modelId": "gemini-3-7-flash", "inputMTok": 240, "outputMTok": 20, "standardCost": 255, "firstBatchCost": 127.5, "rerunCost": 2.55, "batchCostWithReruns": 130.05, "savings": 124.95, "savingsPercent": 49 }
  ]
}
