> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reducto.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Batch Queue

> Discounted async processing for non-urgent workloads

The batch queue is an opt-in lane for async jobs that don't need immediate turnaround. Jobs run when there's spare capacity and are guaranteed to complete within a published SLA. In return, they consume fewer credits than the standard lane.

## When to use the batch queue

| Approach                                     | Best for                                                                                       |
| -------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| **Batch queue** (this page)                  | Bulk uploads, backfills, overnight runs, anything where minutes-to-hours latency is acceptable |
| **[Async parse](/workflows/async-overview)** | Standard async: immediate processing, normal pricing                                           |
| **[Sync parse](/parse)**                     | Small documents, interactive flows: get the result back in one request                         |

Pick the batch queue when you can trade latency for cost.

[Webhooks](/workflows/svix-webhooks) work with both async lanes (standard and batch), and we generally recommend them over polling `/job/{id}`. You get the result pushed to you as soon as it's ready instead of paying for the round-trips.

## How to opt in

The batch queue currently works with **`/parse_async` only**. Set `queue_priority: "batch"` on a `/parse_async` request to use it. No other endpoint supports the batch queue today. `queue_priority` has no effect on synchronous `/parse` or on the other async endpoints (`/extract_async`, `/split_async`, `/edit_async`).

<CodeGroup>
  ```python Python theme={null}
  from reducto import AsyncReducto

  client = AsyncReducto()

  response = await client.parse.run_job(
      input="https://example.com/large-doc.pdf",
      queue_priority="batch",
  )
  ```

  ```javascript Node.js theme={null}
  import Reducto from "reductoai";

  const client = new Reducto();

  const response = await client.parse.runJob({
    input: "https://example.com/large-doc.pdf",
    queue_priority: "batch",
  });
  ```

  ```bash cURL theme={null}
  curl -X POST https://platform.reducto.ai/parse_async \
    -H "Authorization: Bearer $REDUCTO_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "document_url": "https://example.com/large-doc.pdf",
      "queue_priority": "batch"
    }'
  ```
</CodeGroup>

The response shape is identical to a regular `/parse_async` submission. You get back a `job_id` and poll `/job/{id}` for the result.

## SLA

Batch jobs are guaranteed to complete within **12 hours** of submission. The 12-hour window is the firm commitment.

## Credit Consumption

Batch jobs consume **20% fewer credits** than the same parse on the standard lane. The discount is applied to the number of credits used, not to the monetary cost of each credit. The credit usage returned in `/job/{id}` already reflects the reduced amount, so no separate invoicing step is needed.

Because the reduction applies to credit consumption, it stacks on top of any existing per-organisation credit rate. Customers on legacy or volume pricing keep their existing per-credit rate and additionally consume 20% fewer credits when they use the batch queue.

## Back-off and capacity limits

If the batch queue is saturated, `/parse_async` returns HTTP 503 with a `Retry-After: 300` header. Well-behaved clients will pause for the suggested interval before retrying; SDKs handle this automatically. The cap is a safety valve, and under normal operation you should never see it.

## Out of scope today

* The batch queue is supported on `/parse_async` only. It is not available on synchronous `/parse` or on the other async endpoints (`/extract_async`, `/split_async`, `/edit_async`); these do not honour `queue_priority` and run at standard priority and pricing.
* Per-customer batch-discount tiers are not available; the 20% is global.
