JSON API Response Validator

Paste the expected schema and response to see a copyable validation report. The checker evaluates supported schema rules on captured data; it does not call an API.

Runs locally in your browser
Your schema and response are validated entirely in this browser. No payload, account data, or API credential leaves the page.
JSON Schema
Captured API response
Validation summary

Supported rules include local $ref, type, object properties, required fields, arrays, enums, const, formats, lengths, patterns, ranges, and common composition rules.

Validation results
  • Paste a JSON Schema and an API response to validate it.

Validate response contracts without a test runner

This is a browser-side contract helper for fixtures and captured responses. Review advanced JSON Schema vocabulary, remote references, and production integration behavior in your own API test suite.

How to validate an API response

Paste the JSON Schema your API promises and a captured JSON response, then press Validate response: the page lists every failed rule with a JSON Pointer path and shows three summary cards (result, schema error count, response type).

The schema and the response are parsed and checked by the page itself. No request carries them anywhere, the API under test is never called, and the checker implements a documented subset of JSON Schema instead of a full draft validator.

  1. Paste the expected JSON Schema into the left field, or press Load example to fill both fields with a small contract (required id, email and roles) and validate it immediately.
  2. Paste the captured JSON response into the right field. JSON is parsed before any rule runs, so a malformed payload is reported as a parse error instead of producing findings.
  3. Press Validate response. Each finding combines a level (good or error), a JSON Pointer path such as $/roles/0 and a sentence; the summary cards show Valid/Invalid, the number of errors and the response type.
  4. Use Copy report for the plain-text findings and Clear to empty both fields, the summary, the findings and the copy button; an empty field shows a prompt in your language.

What the checker evaluates, and what it skips

Rules that are enforced

Types (including integer), required properties, additionalProperties (false or a schema), enum and const compared with deep equality, the formats email, uuid, date, date-time, uri, uri-reference, hostname and ipv4, plus minLength/maxLength/pattern, minimum/maximum/exclusiveMinimum/exclusiveMaximum in numeric and draft-4 boolean form, multipleOf, minItems/maxItems/uniqueItems with a single items schema, minProperties/maxProperties, and allOf/anyOf/oneOf.

Local references are resolved inside the same document: #, #/$defs/... and #/definitions/... . Paths are JSON Pointers — $ is the root, /0 is the first array element, and / and ~ inside property names are escaped as ~1 and ~0. Unknown format names are ignored, and checking stops at 60 levels of nesting with an explicit message.

Rules that are not enforced

A $ref that does not start with # is reported as unresolved instead of fetched, so remote schemas are not loaded. Tuple-form items (an array of schemas), if/then/else, dependencies, patternProperties, propertyNames and content-encoding keywords are outside the implemented set, and unknown keywords are simply skipped.

The page never sends the payload to a server and never executes it; it is a review aid for fixtures and captured responses, not a conformance test. For draft-specific behaviour or production gating, run a full validator in your own test suite.

Reading and copying the report

The three cards count schema errors and show the JSON type of the response (object, array, string, number, integer, boolean, null). Findings are listed in the order they were found; when nothing fails the list shows a single good entry.

Copy report copies lines such as [ERROR] $/id — Expected string, received integer. so the report can be pasted into a ticket or a commit message. Nothing is stored: Clear resets the page, and reloading it starts from the empty workbench.

Recent tools: