chain
J
JSON Schema Validator
SCHEMA
DOCUMENT
RESULT
// about this tool

JSON Schema Validator Online

Updated 2026-08-02

Validate JSON against a JSON Schema online for free, instantly in your browser. Paste a schema and a document, and SnapTools reports either a clean pass or every rule that failed — each with the exact path to the value responsible, so users[1].id — must be integer points you straight at the problem instead of leaving you to decode a pointer.

Draft 2020-12, 2019-09 and Draft-07 are all supported, including $ref/$defs, allOf/anyOf/ oneOf, conditional if/then/else, and format checks like email and date-time. The dialect is detected from your schema's own $schema keyword and shown with the result, because a schema validated under the wrong draft can give confidently wrong answers. Nothing is uploaded — schema and document both stay on your machine, which matters when the document is a real payload.

// how to use

  1. 1 Paste your JSON Schema into the left panel.
  2. 2 Paste the JSON document you want to check into the right panel.
  3. 3 Read the verdict below — either a single "valid" confirmation, or one line per failure with the exact path that broke the rule.

// examples

A document that fails several rules at once
Input
schema:   {"type":"object","required":["name","email"],
           "properties":{"email":{"type":"string","format":"email"},
                         "age":{"type":"integer","minimum":0}}}
document: {"name":"Ada","email":"not-an-email","age":-1}
Output
email — must match format "email"
age — must be >= 0
Errors inside an array report their index
Input
schema:   {"type":"object","properties":{"users":{"type":"array",
           "items":{"type":"object","required":["id"],
                    "properties":{"id":{"type":"integer"}}}}}}
document: {"users":[{"id":1},{"id":"x"},{}]}
Output
users[1].id — must be integer
users[2] — missing required property "id"
A valid document
Input
schema:   {"type":"object","required":["name"],"properties":{"name":{"type":"string"}}}
document: {"name":"Ada"}
Output
Valid — the document matches the schema.

// common uses

Checking an API response against the contract it is supposed to satisfy Validating config files in CI before a deploy reads them Debugging why a schema you wrote rejects a payload you expected to pass Confirming a hand-edited fixture still matches its schema

// faq

Which JSON Schema drafts are supported?
Draft 2020-12, 2019-09, and Draft-07 (plus draft-06 and draft-04 via the Draft-07 engine). The dialect is read from your schema's $schema keyword and shown next to the result, so you can confirm it was checked the way you intended. A schema with no $schema is treated as 2020-12.
Does it follow $ref and $defs?
Yes. Internal references like {"$ref":"#/$defs/tag"} are resolved, along with allOf, anyOf, oneOf, not, and if/then/else. Remote references over HTTP are not fetched, because nothing on this page leaves your browser.
Why do I get every error at once instead of just the first?
Because a partial list means fixing one thing and running again to discover the next. Every failing rule is reported in a single pass, each with the path to the exact value that broke it — like users[1].id rather than a JSON pointer you have to decode.
Are format rules like "email" or "date-time" actually checked?
Yes — format validation is on, covering email, uri, date, time, date-time, ipv4, ipv6, uuid, regex and more. Note that JSON Schema treats unknown formats as annotations, so a format the spec does not define will not fail a document.
Is my schema or data uploaded?
No. Validation runs entirely in your browser, so both the schema and the document stay on your machine — which matters when the document is a real API payload.

Use this via API

Get a free API key →
curl -X POST https://thesnaptools.com/api/v1/tools/json-schema-validator \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"schema":"schema: {\"type\":\"object\",\"required\":[\"name\",\"email\"], \"properties\":{\"email\":{..."}'
Esc
↑↓ navigate open Esc close