> ## 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, you get a discount on the credits they consume.

## 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`).

```python theme={null}
from reducto import AsyncReducto

client = AsyncReducto()

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

```bash 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"
  }'
```

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.

## Pricing

Batch jobs receive a **20% credit discount** on parsing. The credit usage returned in `/job/{id}` reflects the discounted amount directly — no separate invoicing step.

The discount applies on top of any existing per-organisation credit rate, so customers on legacy or volume pricing keep their existing rate and additionally get the 20% off 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 — 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.
