JSONL Validator
Check every line of a JSONL file and see what is wrong and how to fix it. Profiles also check OpenAI batch, OpenAI fine-tuning and Anthropic batch rules before you submit.
Runs entirely in your browser. Your file is never uploaded. How this works
What each profile checks
| Profile | Checks |
|---|---|
| Plain JSONL | Every line is valid JSON; blank lines; common formatting mistakes |
| OpenAI Batch API | custom_id present and unique, method, url, body, one model, one endpoint, 50,000 requests, 200 MB |
| OpenAI fine-tuning | messages array, roles, content, an assistant message in each example, at least 10 examples |
| Anthropic batch | custom_id format and uniqueness, required params, 100,000 requests, 256 MB |
Anthropic’s API takes batch requests as a JSON body rather than a JSONL upload. This profile is for the common workflow of keeping those requests in a JSONL file.
Limits were last checked against OpenAI’s and Anthropic’s documentation on November 4, 2026. For explanations of each error, see how to fix common JSONL errors.
Frequently asked questions
- What does this check that a JSON linter does not?
- It checks each line separately, explains common mistakes such as a pretty-printed file or a JSON array, and applies provider rules such as unique custom_id values, one model per OpenAI batch, and file limits.
- What are the OpenAI Batch API limits?
- OpenAI allows up to 50,000 requests and 200 MB per batch input file, and each file can use only one model.
- What are the Anthropic Message Batches limits?
- Anthropic limits a batch to 100,000 requests or 256 MB, whichever comes first. Each custom_id must be 1 to 64 characters using letters, digits, hyphens and underscores.
- How many examples does OpenAI fine-tuning need?
- OpenAI requires at least 10 examples and suggests starting with around 50 well-crafted ones.
- Does a pass guarantee the provider will accept my file?
- No. This checks the file structure and documented limits. It does not check model-specific parameters or token limits, so a provider can still reject individual requests.