Missing Batch JSONL results?
Match by custom_id, not row order.
Batch API output rows are not guaranteed to follow input order, and failed requests can be placed in a separate error file. Map results by custom_id, then investigate missing and duplicate identifiers.
Open the free JSONL result matcherTry the workflow yourself
Download three fictional JSONL files and load them into the free matcher. No live API account, password, API token or production data is required.
Expected results for four fictional requests
All identifiers and response bodies here are invented. The fourth ID is only absent from the files you supplied, not proof that a real provider discarded the request.
| custom_id | Input line | Found in | Review status |
|---|---|---|---|
| fictional-201 | 1 | output line 2 | Succeeded · HTTP 200 |
| fictional-202 | 2 | output line 1 | Succeeded · HTTP 200 |
| fictional-203 | 3 | error line 1 | Provider error |
| fictional-204 | 4 | Not found | Absent from supplied files |
Seven steps to reconcile real Batch results
Read the Batch status first
Inspect the provider Batch object. Do not assume results are complete while validating, in_progress or finalizing. Even a completed job can contain individual request errors. Review expired, cancelled and failed statuses separately.
Keep the original input JSONL
Locate the exact input JSONL file that was uploaded. Each request line should have a unique custom_id, POST method, /v1/... path and JSON body. Also verify model and endpoint consistency.
Download output and error files
If output_file_id exists, download the output JSONL. If error_file_id exists, download the separate failed-request JSONL. A missing file ID during processing does not necessarily mean there are no errors.
Join records by custom_id
Never assume the first output row belongs to the first input row. The fictional output intentionally switches the first two successes. custom_id is the matching key.
Classify missing, duplicate and HTTP errors
Distinguish duplicate input IDs, duplicate result IDs, unexpected output IDs, HTTP 4xx/5xx response.status_code, and separate error fields. Do not label absent IDs as lost work until you verify which files you downloaded.
Export an offline CSV review
Use the free local matcher to download the per-ID matches and structural issues CSVs. Review input/output/error line references, and handle the custom_id values as potentially sensitive if you share the report.
Verify unresolved cases with the real API
A structural file matcher cannot confirm account billing, accepted requests, live job status or semantic correctness of model output. Use the official Batch docs and provider data for those checks.
Common troubleshooting questions
Why does output line 2 differ from input line 2?
The API documentation says output order may not match input order. Use custom_id to associate results with requests.
Is Batch broken when output_file_id is empty?
Not necessarily. The file may not be ready while the job is processing. Check the status of the Batch object first.
Does “missing” mean the model ignored my request?
No. It only means the ID is absent from the files supplied to this tool. Confirm the terminal job state and whether all files have been downloaded.
Are customer files uploaded to this site?
No. The downloadable examples are public fictional files and the matcher processes your inputs in browser memory without a file-upload API. Avoid pasting live secrets.
Do ads automatically load on this guide?
No. This informational guide requires its own explicit Allow choice. Declining does not limit downloads or the free matcher.
Download explicitly failed requests for careful offline review
The fictional sample has one definite provider error (fictional-203). The two successful IDs and missing-from-supplied-files fictional-204 must NOT be treated as automatic retries.
The free matcher now creates a failed-only original request JSONL after an explicit acknowledgment of real Batch terminal status, error cause, cost and duplicate-charge risk. It does not retry anything or call an API. The download can include your original prompts and request bodies: treat it as sensitive. Malformed lines or ambiguous duplicate mappings block export.
Large production Batch JSONL files: over the 8 MiB browser limit
The real Batch API accepts larger uploaded input files than this browser's 8 MiB / 25,000-line safety limit. To inspect a larger operation locally, use our free MIT-licensed Node.js 22+ streaming CLI with source, README and integration tests. It reads local files, matches input/output/error records by custom_id, and writes private CSVs. No API token, file upload, paid membership or advertising is required.
git clone https://github.com/livastic-vm3-primary-tmp-260920/localdev-bench.git
cd localdev-bench
node extras/batch-jsonl-reconcile/cli.mjs \
--input /private/requests.jsonl \
--output /private/output.jsonl \
--errors /private/errors.jsonl \
--report-dir ./new-batch-review
Replace these illustrative paths with your own downloaded JSONL files. You can omit either output or error option, but you cannot infer failed work when neither result file is available. Choose a new local report directory. The CLI does not verify terminal Batch status, account billing, output completeness or safe retriability. An optional failed-only original JSONL requires an explicit manual acknowledgment of actual provider state, cost and duplicate-charge risk; the export intentionally contains original prompts and must be treated as sensitive.
Optional advertising supports this free guide
One third-party Adsterra banner may load on this informational guide only if you explicitly choose Allow below. The ad provider and partners may process device/browser data or cookies. You can decline with no limitation on the samples or free tool. A prior homepage ad choice does not automatically apply here.
Independent, free developer education. Not provided, affiliated with or endorsed by OpenAI. We cannot verify provider billing, real users or advertising income.