Work that runs without a person waiting for it
Upload a JSONL file of up to 50,000 requests and let them run in the background against your routing rules, your spend limits and your guardrails. The right home for backfills and nightly enrichment.
- 50K
- requests per batch
- 16 MB
- maximum file size
- Same rate
- as a live call — no batch discount
- Ceiling
- priced before it runs
What it actually does
Submit a JSONL file
The same request bodies you would send synchronously, one per line, with your own `custom_id` on each so results can be joined back. Chat completions or embeddings, one endpoint per file.
Priced as a ceiling first
Before a job starts, every line is costed at its worst legal outcome — full prompt, full `max_tokens` — and checked against your balance and your key's spend limit. A batch that could blow the limit is refused up front, not at 4am.
Routed like everything else
Your presets, your fallbacks, your guardrails. A batch item becomes an ordinary gateway request, so it is traceable in Activity by its request id.
Retries absorbed
The worker takes the 429s and retries them, which is most of what makes running 50,000 requests by hand unpleasant.
Progress while it runs
Completed, failed and pending counts update as the job moves, and finished rows are downloadable before the whole job is.
Cancellable
Stop a job and anything still queued is cancelled with it. What already completed stays billed and stays downloadable.
Fair questions
Is batch cheaper than a live call?
No. Every item runs through the same gateway against the same catalogue rate, and there is no batch discount — claiming one would be a marketing number with nothing behind it. What batch buys you is scheduling, retry absorption and a cost ceiling agreed before the job starts, not a lower rate.
What is the completion window for, then?
It records how long you are willing to wait, and it is informational — it does not change the price and it is not an SLA. It exists so a job that has plainly stalled can be told apart from one that is merely long.
What am I charged if I cancel?
Whatever had already run. Items are billed as they complete, so cancelling stops future spend but does not undo work that really happened at a provider.
Works with the rest of the platform
Name a model, name the ones to try if it cannot be served, and set which providers you prefer. Multigrid retries transient failures on each provider and moves down the list when it runs out of attempts.
Add your own provider keys and Multigrid routes through them — your rates, your billing relationship. We charge nothing on that traffic and it does not touch your credit balance.
Every request writes a row: model, provider, tokens, cost, latency, attempts, cache outcome and your own tags. No prompt text, no completion text — the schema has nowhere to put them.
Bring your own provider keys and pay us nothing for that traffic
Requests served on your own key are not charged and do not touch your credit balance. You still get the routing, the logging and the cost record.