# What does anthropic.message_batch.all_succeeded prove?

> Prove that every request of the Message Batch succeeded. Version 1.0.0, certification Provisional.

Canonical: https://provely.sh/verify/anthropic/anthropic.message_batch.all_succeeded  
Last reviewed: 2026-09-05  
Skill version: 0.1.0  
Certification: provisional  

**Prove that every request of the Message Batch succeeded. A batch that ended is not a batch whose requests succeeded. The level reads request_counts and refuses a batch that holds an error, an expiry, or a cancellation.**

*Contract identity.*

| Fact | Value |
| --- | --- |
| Contract id | `anthropic.message_batch.all_succeeded` |
| Version | `1.0.0` |
| Hash | `84f423d28d2f9a93` |
| Completion level | `all_succeeded` |
| Publisher | Built and signed by Provely. |
| Certification | Provisional |
| Skill | [Anthropic Claude API 0.1.0](/verify/anthropic) |
| Valid for provider API versions | `2023-06-01` |

## What is the intent?

Submit the message requests as one batch and get a message for each one.

## What is the subject and the action?

| Member | Value |
| --- | --- |
| Subject type | `anthropic.message_batch` |
| Subject identity | message_batch_id = `$action.result.id` |
| Canonical effect | `ai.message_batch_start` |
| Provider operation | `POST /v1/messages/batches` |
| Idempotency | none, retry is not safe |

## How does the evidence correlate with this operation?

| Strategy | Assurance | Keys | Required |
| --- | --- | --- | --- |
| `resource_id` | strong | message_batch_id from `$action.result.id` | yes |

## Which evidence does the contract require?

Minimum evidence level `E2`. An independent channel is required. Minimum channels: 1.

| Channel | Level | Independence | Verifier | Description |
| --- | --- | --- | --- | --- |
| `message_batch_readback` | E2 | provider readback | `http` | Read the Message Batch from the provider. A condition path is $observed.message_batch_readback.request_counts.succeeded. The read states no provider API version, because Anthropic returns no version header. |

## Which conditions must all hold for VERIFIED?

| Condition | Meaning | Path | Operator | Expected | Evidence |
| --- | --- | --- | --- | --- | --- |
| `batch_present` | The provider holds the Message Batch with the returned identifier. | `$observed.message_batch_readback.id` | `eq` | `$action.result.id` | `message_batch_readback` |
| `batch_no_request_still_processing` | The member request_counts.processing is zero. Every terminal count is zero until the whole batch ends, so a count of successes alone proves nothing. | `$observed.message_batch_readback.request_counts.processing` | `eq` | `0` | `message_batch_readback` |
| `batch_every_request_succeeded` | The member request_counts.succeeded equals the request count of the intent. Every request of the batch has a message result. | `$observed.message_batch_readback.request_counts.succeeded` | `eq` | `$input.request_count` | `message_batch_readback` |
| `batch_no_request_errored` | The member request_counts.errored is zero. | `$observed.message_batch_readback.request_counts.errored` | `eq` | `0` | `message_batch_readback` |
| `batch_no_request_canceled` | The member request_counts.canceled is zero. A canceled batch also reports the status ended. | `$observed.message_batch_readback.request_counts.canceled` | `eq` | `0` | `message_batch_readback` |
| `batch_no_request_expired` | The member request_counts.expired is zero. A batch that reached the 24-hour expiration sent those requests to no model. | `$observed.message_batch_readback.request_counts.expired` | `eq` | `0` | `message_batch_readback` |
| `batch_ended_in_window` | The provider ended the batch after the operation started. | `$observed.message_batch_readback.ended_at` | `time_after` | `$operation.created_at` | `message_batch_readback` |
| `batch_created_in_window` | The provider created the batch after the operation started. | `$observed.message_batch_readback.created_at` | `time_after` | `$operation.created_at` | `message_batch_readback` |

## Which conditions give CONTRADICTED?

| Condition | Class | Reason | Path | Operator | Expected |
| --- | --- | --- | --- | --- | --- |
| `batch_predates_operation` | pre existing state | The Message Batch is older than the operation. It proves nothing. | `$observed.message_batch_readback.created_at` | `time_before` | `$operation.created_at` |
| `batch_completed_more_requests_than_intent` | wrong subject | The batch completed more requests than the intent named. It is not the batch that the intent described. | `$observed.message_batch_readback.request_counts.succeeded` | `gt` | `$input.request_count` |
| `batch_processing_count_exceeds_intent` | duplicate side effect | The batch holds more requests than the intent named. Anthropic bills each of them. Do not retry. | `$observed.message_batch_readback.request_counts.processing` | `gt` | `$input.request_count` |

## Which observed states map to a verdict before completion?

| Rule | Match | Verdict | Reason |
| --- | --- | --- | --- |
| `batch_canceled` | `$observed.message_batch_readback.request_counts.canceled` gt `0` | CONTRADICTED | A caller canceled the batch. Anthropic sent those requests to no model. |
| `batch_expired` | `$observed.message_batch_readback.request_counts.expired` gt `0` | FAILED | The batch reached the 24-hour expiration before Anthropic sent every request to a model. |
| `batch_errored` | `$observed.message_batch_readback.request_counts.errored` gt `0` | FAILED | A request of the batch encountered an error, and Anthropic created no message. |
| `still_processing` | `$observed.message_batch_readback.processing_status` in `["in_progress","canceling"]` | PENDING | The Message Batch has not ended. The runtime observes again later. |

## How long does the runtime observe?

| Timing member | Value |
| --- | --- |
| Initial delay | 1000 ms |
| Poll interval | 5000 ms |
| Backoff | exponential factor 2, max 60000 ms |
| Maximum attempts | 40 |
| Timeout | 90000000 ms |
| Stale read window | 20000 ms |
| On timeout | UNVERIFIABLE (`evidence_unavailable_before_timeout`), escalated to a person |

## Where do these rules come from?

- `anthropic.docs.batches#message-batches/the-result-types`: [anthropic.docs.batches](https://platform.claude.com/docs/en/build-with-claude/batch-processing), retrieved 2026-09-09
- `anthropic.docs.batches#message-batches/the-request-counts`: [anthropic.docs.batches](https://platform.claude.com/docs/en/build-with-claude/batch-processing), retrieved 2026-09-09
- `anthropic.docs.batch_object#the-batch-object/the-request-counts-member`: [anthropic.docs.batch_object](https://platform.claude.com/docs/en/api/retrieving-message-batches), retrieved 2026-09-09
- `anthropic.docs.batches#message-batches/expiry`: [anthropic.docs.batches](https://platform.claude.com/docs/en/build-with-claude/batch-processing), retrieved 2026-09-09
- `anthropic.docs.batch_object#the-batch-object/the-identifier`: [anthropic.docs.batch_object](https://platform.claude.com/docs/en/api/retrieving-message-batches), retrieved 2026-09-09
- `anthropic.docs.batches#message-batches/read-a-batch`: [anthropic.docs.batches](https://platform.claude.com/docs/en/build-with-claude/batch-processing), retrieved 2026-09-09
- `anthropic.docs.batch_object#the-batch-object/the-time-members`: [anthropic.docs.batch_object](https://platform.claude.com/docs/en/api/retrieving-message-batches), retrieved 2026-09-09
- `anthropic.docs.batches#message-batches/cancel-a-batch`: [anthropic.docs.batches](https://platform.claude.com/docs/en/build-with-claude/batch-processing), retrieved 2026-09-09

### Can anthropic.message_batch.all_succeeded return VERIFIED from the action response alone?

No. The minimum evidence level is E2. The action response is E1. The completion conditions read `message_batch_readback`.

### What happens after the timeout?

The verdict is UNVERIFIABLE with the reason `evidence_unavailable_before_timeout`. The operation goes to a person for review.

## Read next

- [Read the Anthropic Claude API verification page](https://provely.sh/verify/anthropic)
- [Read the anthropic.message_batch.ended contract](https://provely.sh/verify/anthropic/anthropic.message_batch.ended)
- [Read what a completion contract contains](https://provely.sh/contracts)
- [Read what a receipt proves](https://provely.sh/docs/receipts)
