Free JSON validator API
Paste JSON and check its syntax. The answer says valid true or false at once, and a small report with the parser message is stored for 24 hours, for invalid JSON too. The form calls the same free API your code can call.
curl -s -X POST https://aisenseapi.com/services/v1/json_validate \
-H "Content-Type: application/json" \
-d '{"data":"{\"active\":true,}"}'
{
"storage_id": "ebcabcff-b3e7-46b1-8920-c27671deedb2",
"storage_url": "https://aisenseapi.com/services/v1/storage/ebcabcff-b3e7-46b1-8920-c27671deedb2",
"sha256_hash": "936d3fd69bca8892f601b7ab0cce7f3decd1bb11ee8b02a90009a0931b0bff02",
"bytes": 71,
"expire_timestamp": 1790760065,
"expire_datetime": "2026-09-30T09:21:05+00:00",
"content_type": "application/json",
"filename": "validation.json",
"operation": "json_validate",
"valid": false
}Try it in the browser
This form posts to the same endpoint and shows the stored result. What you enter is sent to aisenseapi.com, and the result is kept for 24 hours at a link that anyone with the link can open.
What is checked
The report stored for the example at the top of the page:
{"valid":false,"error":"Syntax error","input_bytes":16,"max_depth":128}
- Syntax only. The check answers whether the text is valid JSON. It is not a JSON Schema check and knows nothing about which fields you expect.
- Invalid JSON is a result, not an error. The call answers 200 with
validfalse and stores the report. Only a broken request, such asdatathat is not a string, answers 400. - The message is the parser's own, for example
Syntax error. It does not give a line or column. - Duplicate keys are valid JSON by this check. More than 127 nested lists or objects is invalid. The
max_depthof 128 in the report is the parser's limit, which counts the values inside the innermost list or object as one more level. - The report does not contain your JSON, only its size and the result.
The API
POST https://aisenseapi.com/services/v1/json_validate with Content-Type: application/json. The JSON to check goes in as text, in a string.
| Field | Required | Meaning |
|---|---|---|
data | yes | The JSON text, as a string. |
The answer adds valid to the Storage fields, so a client can act without reading the report. The report is stored as validation.json with valid, error, input_bytes and max_depth.
The answer is a Storage link
The endpoint never sends the converted file in its answer. It stores the result for 24 hours and answers with the same fields the Temporary Storage API answers with, plus what the result is:
| Field | Meaning |
|---|---|
storage_id, storage_url | Where the result is. A GET on the URL returns the bytes. |
sha256_hash, bytes | The digest and size of the stored bytes. |
expire_timestamp, expire_datetime | When the result is removed, 24 hours after it was stored. |
content_type, filename | What the result is and the name to save it under. |
operation | The endpoint that made it. |
The id and the expiry in the examples on this page come from a test run and are different on every call. The hash and the size are what the example request gives every time.
Anyone with the link can read the result until it expires, so do not send personal or confidential data. Stored results count against the Storage budget of 80 MB per IP address per day.
Limits
- The request body is at most 256 KB, and the JSON text, escaped inside
data, has to fit inside it. - More than 127 nested lists or objects is reported as invalid.
Errors
A refused request stores nothing and answers with error. The endpoint's own refusals also carry fix, a sentence saying what to send instead.
| Status | When |
|---|---|
400 | The body is not a JSON object, a field is missing, unknown or has the wrong type, or the input breaks the rules above. |
405 | The method is not POST. |
413 | The request, the rows or the result is over a limit. |
415 | The Content-Type is not application/json. |
429 | More than 5000 requests from one IP address in 24 hours, or the day's Storage budget is used up. |
503 | The result could not be stored. Try again later. |
Questions
Is the JSON validator API free?
Yes. No API key, no account and no sign up. The limit is 5000 requests per IP address per 24 hours, and stored reports count against the Storage budget of 80 MB per IP address per day.
Does it check against a JSON Schema?
No. It checks syntax only: whether the text is valid JSON.
Why is a report stored when the JSON is invalid?
Finding invalid JSON is a completed check. The answer says valid false, and the stored report with the parser message can be passed on as a link.
Does it tell me the line of the error?
No. The report carries the parser message, such as Syntax error, without a line or column.
Related tools
- JSON to CSV converter and CSV to JSON converter
- Table matching: compare two tables on key columns
- JSON formatter and JSON validator
- Image converter and image compression for JPEG, PNG and WebP
- Temporary Storage API, where every result is kept for 24 hours