
Get Batch API results
Get Batch API results
Results are available as soon as individual requests finish. You do not have to wait for the whole batch. Poll status with GET /v1/batches/{batch_id} until state.num_pending is 0, then page results. Create / add path: Run a Batch API job. JSONL upload: Add Batch API requests from a JSONL file.
Poll status
curl "https://api.x.ai/v1/batches/$BATCH_ID" \
-H "Authorization: Bearer $XAI_API_KEY"
Counters on state: num_requests, num_pending, num_success, num_error, num_cancelled. Per-request metadata: GET /v1/batches/{batch_id}/requests (pending, succeeded, failed, cancelled).
Page results
curl "https://api.x.ai/v1/batches/$BATCH_ID/results?limit=100" \
-H "Authorization: Bearer $XAI_API_KEY"
# next page: &pagination_token=...
import os
from xai_sdk import Client
client = Client(api_key=os.getenv("XAI_API_KEY"))
all_ok, all_fail = [], []
token = None
while True:
page = client.batch.list_batch_results(
batch_id=batch.batch_id, limit=100, pagination_token=token
)
all_ok.extend(page.succeeded)
all_fail.extend(page.failed)
if page.pagination_token is None:
break
token = page.pagination_token
for result in all_ok:
rid = result.batch_request_id
resp = result.proto.response
if resp.HasField("completion_response"):
print(rid, result.response.content[:120])
elif resp.HasField("image_response"):
print(rid, result.image_response.url)
elif resp.HasField("video_response"):
print(rid, result.video_response.url)
for result in all_fail:
print("FAIL", result.batch_request_id, result.error_message)
Match rows with the batch_request_id (or JSONL custom_id) you set when adding requests.
Cost
Batch cost_breakdown.total_cost_usd_ticks is in ticks (1e-10 USD). Divide by 1e10 for dollars. Per-result chat usage may also expose cost_in_usd_ticks. Pricing table: docs.x.ai/developers/pricing.
Pitfalls
- Image and video result URLs expire after 1 hour. Download promptly.
pagination_tokennull means the last page.- Completion within 24 hours is best effort only.
- Console API credits are a separate bill from SuperGrok's weekly pool on grok.com.