# What does openai.batch.all_requests_succeeded prove?

> Prove that every request of the batch job succeeded. Version 1.0.0, certification Provisional.

Canonical: https://provely.sh/verify/openai/openai.batch.all_requests_succeeded  
Last reviewed: 2026-09-05  
Skill version: 0.1.0  
Certification: provisional  

**Prove that every request of the batch job succeeded. A batch that reaches the status completed is not a batch in which every request succeeded. This level reads request_counts and refuses a batch with a failed count above zero.**

*Contract identity.*

| Fact | Value |
| --- | --- |
| Contract id | `openai.batch.all_requests_succeeded` |
| Version | `1.0.0` |
| Hash | `f7efcd09d699f148` |
| Completion level | `all_requests_succeeded` |
| Publisher | Built and signed by Provely. |
| Certification | Provisional |
| Skill | [OpenAI Platform API 0.1.0](/verify/openai) |
| Valid for provider API versions | `spec_2_3_0` |

## What is the intent?

Run every request of the input file as one batch job, and get a result for each one.

## What is the subject and the action?

| Member | Value |
| --- | --- |
| Subject type | `openai.batch` |
| Subject identity | batch_id = `$action.result.id` |
| Canonical effect | `ai.batch_job_start` |
| Provider operation | `POST /batches` |
| Idempotency | none, retry is not safe |

## How does the evidence correlate with this operation?

| Strategy | Assurance | Keys | Required |
| --- | --- | --- | --- |
| `resource_id` | strong | batch_id from `$action.result.id` | yes |
| `fingerprint` | weak | input_file_id from `$input.input_file_id`; endpoint from `$input.endpoint` | no |

## Which evidence does the contract require?

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

| Channel | Level | Independence | Verifier | Description |
| --- | --- | --- | --- | --- |
| `batch_readback` | E2 | provider readback | `http` | Read the batch from the provider. A condition path is $observed.batch_readback.status, and a second one is $observed.batch_readback.request_counts.failed. |
| `batch_completed_events` | E3 | provider event | `webhook` | The batch.completed events of this batch. The payload carries the identifier of the batch and no other member of it, so the count states the end of the job and never the result of one request. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}. |

## Which conditions must all hold for VERIFIED?

| Condition | Meaning | Path | Operator | Expected | Evidence |
| --- | --- | --- | --- | --- | --- |
| `batch_present` | The provider holds the batch with the returned identifier. | `$observed.batch_readback.id` | `eq` | `$action.result.id` | `batch_readback` |
| `batch_status_completed` | The batch reached the status completed. The published table states that the results are ready. | `$observed.batch_readback.status` | `eq` | `completed` | `batch_readback` |
| `batch_input_file_matches` | The batch reads the input file that the intent named. | `$observed.batch_readback.input_file_id` | `eq` | `$input.input_file_id` | `batch_readback` |
| `batch_created_in_window` | The provider created the batch after the operation started. OpenAI writes created_at in seconds since the epoch. | `$observed.batch_readback.created_at` | `time_after` | `$operation.created_at` | `batch_readback` |
| `batch_completed_event` | At least one batch.completed event names this batch. The payload carries the identifier only, so this condition states the end of the job and nothing about one request. | `$observed.batch_completed_events.count` | `gte` | `1` | `batch_completed_events` |
| `batch_no_request_failed` | No request of the batch failed. The published description of the member is the number of requests that have failed. | `$observed.batch_readback.request_counts.failed` | `eq` | `0` | `batch_readback` |
| `batch_holds_requests` | The batch holds at least one request. An empty batch has no failed request and proves no work. | `$observed.batch_readback.request_counts.total` | `gt` | `0` | `batch_readback` |
| `batch_completed_every_request` | The number of requests that completed successfully equals the number of requests in the batch. | `$observed.batch_readback.request_counts.completed` | `eq` | `$observed.batch_readback.request_counts.total` | `batch_readback` |

## Which conditions give CONTRADICTED?

| Condition | Class | Reason | Path | Operator | Expected |
| --- | --- | --- | --- | --- | --- |
| `batch_on_wrong_input_file` | wrong subject | The batch reads a different input file than the intent named. | `$observed.batch_readback.input_file_id` | `ne` | `$input.input_file_id` |
| `batch_on_wrong_endpoint` | wrong subject | The batch calls a different endpoint than the intent named. | `$observed.batch_readback.endpoint` | `ne` | `$input.endpoint` |
| `batch_predates_operation` | pre existing state | The batch is older than the operation. It proves nothing. | `$observed.batch_readback.created_at` | `time_before` | `$operation.created_at` |
| `batch_requests_failed` | partial completion | The batch finished, and requests inside it failed. Do not retry the batch: the requests that succeeded would run a second time. Ask a person. | `$observed.batch_readback.request_counts.failed` | `gt` | `0` |

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

| Rule | Match | Verdict | Reason |
| --- | --- | --- | --- |
| `completed_with_failed_requests` | (`$observed.batch_readback.status` eq `"completed"`) and (`$observed.batch_readback.request_counts.failed` gt `0`) | CONTRADICTED | The batch finished, and requests inside it failed. A retry would run the requests that succeeded a second time. Ask a person. |
| `terminal_failure` | `$observed.batch_readback.status` in `["failed","expired"]` | FAILED | The provider ended the batch without results. Read the errors of the input file. |
| `cancelled` | `$observed.batch_readback.status` eq `"cancelled"` | CONTRADICTED | A person or an agent cancelled the batch. Ask a person before a new batch runs. |
| `still_running` | `$observed.batch_readback.status` in `["validating","in_progress","finalizing","cancelling"]` | PENDING | The batch has not reached a terminal status. The runtime observes again later. |

## How long does the runtime observe?

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

## Where do these rules come from?

- `openai.openapi#/components/schemas/Batch/properties/request_counts`: [openai.openapi](https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml), retrieved 2026-09-09
- `openai.openapi#/components/schemas/BatchRequestCounts/properties/failed`: [openai.openapi](https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml), retrieved 2026-09-09
- `openai.docs.batch#batch-jobs/the-request-counts-of-a-batch`: [openai.docs.batch](https://platform.openai.com/docs/guides/batch), retrieved 2026-09-09
- `openai.docs.batch#batch-jobs/the-output-file-and-the-error-file`: [openai.docs.batch](https://platform.openai.com/docs/guides/batch), retrieved 2026-09-09
- `openai.openapi#/components/schemas/Batch/properties/id`: [openai.openapi](https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml), retrieved 2026-09-09
- `openai.openapi#/paths/~1batches~1{batch_id}/get/responses/200`: [openai.openapi](https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml), retrieved 2026-09-09
- `openai.openapi#/components/schemas/Batch/properties/status`: [openai.openapi](https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml), retrieved 2026-09-09
- `openai.docs.batch#batch-jobs/the-status-of-a-batch`: [openai.docs.batch](https://platform.openai.com/docs/guides/batch), retrieved 2026-09-09
- `openai.openapi#/components/schemas/Batch/properties/input_file_id`: [openai.openapi](https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml), retrieved 2026-09-09
- `openai.openapi#/components/schemas/CreateBatchRequest/properties/input_file_id`: [openai.openapi](https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml), retrieved 2026-09-09
- `openai.openapi#/components/schemas/Batch/properties/created_at`: [openai.openapi](https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml), retrieved 2026-09-09
- `openai.events#/events/batch.completed`: [openai.events](https://developers.openai.com/api/reference/resources/webhooks), retrieved 2026-09-09
- `openai.openapi#/components/schemas/WebhookBatchCompleted/properties/data`: [openai.openapi](https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml), retrieved 2026-09-09
- `openai.docs.webhooks#webhooks/the-event-types`: [openai.docs.webhooks](https://platform.openai.com/docs/guides/webhooks), retrieved 2026-09-09
- `openai.openapi#/components/schemas/BatchRequestCounts/properties/total`: [openai.openapi](https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml), retrieved 2026-09-09
- `openai.openapi#/components/schemas/BatchRequestCounts/properties/completed`: [openai.openapi](https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml), retrieved 2026-09-09

### Can openai.batch.all_requests_succeeded return VERIFIED from the action response alone?

No. The minimum evidence level is E2. The action response is E1. The completion conditions read `batch_readback` and `batch_completed_events`.

### 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 OpenAI Platform API verification page](https://provely.sh/verify/openai)
- [Read the openai.batch.completed contract](https://provely.sh/verify/openai/openai.batch.completed)
- [Read the openai.fine_tuning_job.succeeded contract](https://provely.sh/verify/openai/openai.fine_tuning_job.succeeded)
- [Read what a completion contract contains](https://provely.sh/contracts)
- [Read what a receipt proves](https://provely.sh/docs/receipts)
