---
title: "Retrieve a Message Batch"
method: GET
path: "/v1/messages/batches/{message_batch_id}"
---

# Retrieve a Message Batch

`GET /v1/messages/batches/{message_batch_id}`

This endpoint is idempotent and can be used to poll for Message Batch completion. To access the results of a Message Batch, make a request to the `results_url` field in the response.

Learn more about the Message Batches API in our [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing)

## Path parameters

- `message_batch_id` string, required — ID of the Message Batch.

## Headers

- `anthropic-version` string — The version of the Claude API you want to use. Read more about versioning and our version history [here](https://platform.claude.com/docs/en/api/versioning).
- `x-api-key` string — Your unique API key for authentication. This key is required in the header of all API requests, to authenticate your account and access Anthropic's services. Get your API key through the [Console](https://console.anthropic.com/settings/keys). Each key is scoped to a Workspace.
- `anthropic-workspace-id` string

## Response `200`

Successful Response

- MessageBatch
  - `archived_at` string, date-time, nullable, required — RFC 3339 datetime string representing the time at which the Message Batch was archived and its results became unavailable.
  - `cancel_initiated_at` string, date-time, nullable, required — RFC 3339 datetime string representing the time at which cancellation was initiated for the Message Batch. Specified only if cancellation was initiated.
  - `created_at` string, date-time, required — RFC 3339 datetime string representing the time at which the Message Batch was created.
  - `ended_at` string, date-time, nullable, required — RFC 3339 datetime string representing the time at which processing for the Message Batch ended. Specified only once processing ends. Processing ends when every request in a Message Batch has either succeeded, errored, canceled, or expired.
  - `expires_at` string, date-time, required — RFC 3339 datetime string representing the time at which the Message Batch will expire and end processing, which is 24 hours after creation.
  - `id` string, required — Unique object identifier. The format and length of IDs may change over time.
  - `processing_status` 'in_progress' | 'canceling' | 'ended', required — Processing status of the Message Batch.
  - `request_counts` RequestCounts, required
    - `canceled` integer, required — Number of requests in the Message Batch that have been canceled. This is zero until processing of the entire Message Batch has ended.
    - `errored` integer, required — Number of requests in the Message Batch that encountered an error. This is zero until processing of the entire Message Batch has ended.
    - `expired` integer, required — Number of requests in the Message Batch that have expired. This is zero until processing of the entire Message Batch has ended.
    - `processing` integer, required — Number of requests in the Message Batch that are processing.
    - `succeeded` integer, required — Number of requests in the Message Batch that have completed successfully. This is zero until processing of the entire Message Batch has ended.
  - `results_url` string, nullable, required — URL to a `.jsonl` file containing the results of the Message Batch requests. Specified only once processing ends. Results in the file are not guaranteed to be in the same order as requests. Use the `custom_id` field to match results to requests.
  - `type` 'message_batch', required — Object type. For Message Batches, this is always `"message_batch"`.

## Other responses

- `400` — Invalid argument - The client specified an invalid argument
- `401` — Unauthenticated - The request does not have valid authentication credentials
- `403` — Permission denied - The caller does not have permission to execute the specified operation
- `404` — Not found - Some requested entity was not found
- `408` — Deadline exceeded - The deadline expired before the operation could complete
- `409` — Aborted - The operation was aborted due to concurrency issue
- `412` — Failed precondition - Operation was rejected because the system is not in required state
- `413` — Out of range - Operation was attempted past the valid range
- `429` — Resource exhausted - Some resource has been exhausted (rate limiting)
- `431` — Request header fields too large - Request metadata was too large
- `499` — Cancelled - The operation was cancelled by the client
- `500` — Internal - Internal server error
- `501` — Unimplemented - The operation is not implemented or supported
- `503` — Unavailable - The service is currently unavailable
- `504` — Deadline exceeded - Upstream service did not respond in time
- `529` — Overloaded - The service is temporarily overloaded

## Changes

- **2026-09-02** `4789294140a2` — 17 info
  - added the new optional `header` request parameter `anthropic-workspace-id`
  - added the non-success response with the status `400`
  - added the non-success response with the status `401`
  - added the non-success response with the status `403`
  - …13 more

[Change history](https://skmtc.dev/anthropics/apis/anthropic-api/changes/v1/messages/batches/:message_batch_id/get.md)

---

[API](https://skmtc.dev/anthropics/apis/anthropic-api.md) · [All operations](https://skmtc.dev/anthropics/apis/anthropic-api/llms.txt) · [OpenAPI document](https://skmtc.dev/anthropics/apis/anthropic-api/revisions/1bb7c7a0a4a9?raw)
