JSON Schema

App · Utilities · 8 actions

Validate JSON data against JSON Schema, the standard for describing JSON. Check any value, or every item of a list, against a schema given as an object, text, a file or a link, in any dialect from Draft 3 to Draft 2020-12, and get each error in plain words. Check a schema for mistakes, create one from example data, look up keywords in json-schema.org's reference, and find JSON Schema tools and how much of the official test suite each validator passes. No account or API key required.

Actions

ActionWhat it does
Check a schemaCheck that a JSON Schema is valid: against its dialect's meta-schema, with every $ref followed, and for the mistakes validators pass over in silence, such as a misspelled keyword, a format that does not exist, keywords ignored beside $ref and limits nothing can meet.
Create a schema from examplesCreate a JSON Schema from example data, such as an API response or a few records: the types, properties, required fields and common formats it finds, ready to validate later data with.
Find JSON Schema toolsSearch json-schema.org's catalogue of JSON Schema tools (validators, code generators, editors, linters and more) by kind, programming language, dialect and words in the name or description, with which validators Bowtie tests.
Get a validator's complianceGet how much of the official JSON Schema Test Suite a validator passes, dialect by dialect, as Bowtie measures it, with its version, language and links.
List the keywords of a dialectList the keywords of a JSON Schema dialect, from Draft 3 to Draft 2020-12, with the vocabulary each belongs to, what kind of value it applies to and links to its documentation.
Look up a keywordLook up a JSON Schema keyword in json-schema.org's Understanding JSON Schema reference: what it does, its examples of valid and invalid values, its notes on older drafts, which dialects have it, and links to the reference, Learn JSON Schema and the specification.
Validate data against a schemaCheck data against a JSON Schema and get whether it is valid, with every error: where in the data it is, which keyword it broke and why, in plain words.
Validate each item in a listCheck each item of a list against a JSON Schema and split the list in two: the items that match, ready for the next step, and those that do not, each with its position and its errors.

Check a schema

Check that a JSON Schema is valid: against its dialect's meta-schema, with every $ref followed, and for the mistakes validators pass over in silence, such as a misspelled keyword, a format that does not exist, keywords ignored beside $ref and limits nothing can meet. No API key required.

Inputs

SchemaschematextRequired
The JSON Schema: an object from an earlier step, JSON text, an uploaded .json file, or the web address of one, such as https://json.schemastore.org/package.json. Its $ref links to other schemas on the web are followed.
Dialectdialecttext
Which version of JSON Schema to read the schema as. Leave it on the schema's own to follow its $schema, which is Draft 2020-12 when it has none; choose a draft to read it that way whatever it declares.One of: auto (The schema's own $schema (Draft 2020-12 if none)), 2020-12 (Draft 2020-12), 2019-09 (Draft 2019-09), draft-07 (Draft 7), draft-06 (Draft 6), draft-04 (Draft 4), draft-03 (Draft 3). Default: auto.
Most errors to listmax_errorsnumber
How many errors to list, from 1 to 1,000; 100 by default. All of them are counted either way.From 1 to 1000. Default: 100.

Outputs

dialecttext
The $schema URI of the dialect the schema was read as, e.g. 'https://json-schema.org/draft/2020-12/schema'.
dialect_nametext
That dialect's name, e.g. 'Draft 2020-12'.
dialect_notetext
Why the schema was read as a dialect other than the one it declares, such as a $schema this step does not know. Null when it was read as declared.
error_countnumber
How many errors the schema has.
errorslist
The errors, up to the most asked for.
summarytext
What happened, in a sentence or two.
validtrue/false
True when the schema passes its meta-schema and every $ref leads somewhere. Warnings do not count.
warning_countnumber
How many warnings there are.
warningslist
Mistakes validators pass over, one per keyword for keywords used more than once.
Example output
{
  "dialect": "https://json-schema.org/draft/2020-12/schema",
  "dialect_name": "Draft 2020-12",
  "dialect_note": null,
  "error_count": 1,
  "errors": [
    {
      "keyword": "$ref",
      "message": "A $ref points at #/$defs/tag, where the schema has nothing. Did you mean #/$defs/tags?",
      "schema_location": "/properties/tags/items/$ref"
    }
  ],
  "summary": "Not a valid Draft 2020-12 schema: 1 error. At /properties/tags/items/$ref: A $ref points at #/$defs/tag, where the schema has nothing. Did you mean #/$defs/tags? 2 warnings: At /properties/age/minimun: minimun is not a JSON Schema keyword, so validators ignore it. Did you mean minimum? At /properties/created/format: \"datetime\" is not a format Draft 2020-12 defines, so validators do not check it. Did you mean \"date-time\"?",
  "valid": false,
  "warning_count": 2,
  "warnings": [
    {
      "keyword": "minimun",
      "kind": "unknown_keyword",
      "message": "minimun is not a JSON Schema keyword, so validators ignore it. Did you mean minimum?",
      "occurrences": 1,
      "schema_location": "/properties/age/minimun"
    },
    {
      "keyword": "format",
      "kind": "unknown_format",
      "message": "\"datetime\" is not a format Draft 2020-12 defines, so validators do not check it. Did you mean \"date-time\"?",
      "occurrences": 1,
      "schema_location": "/properties/created/format"
    }
  ]
}

Create a schema from examples

Create a JSON Schema from example data, such as an API response or a few records: the types, properties, required fields and common formats it finds, ready to validate later data with. No API key required.

Inputs

Example dataexamplestextRequired
The data to describe, such as an API response, a webhook payload or some records from an earlier step: an object, a list or any JSON value, as JSON text too, or an uploaded .json file.
Each item is an examplelist_of_examplestrue/false
Turn on when the example data is a list of separate examples, such as several webhook payloads: the schema then describes one of them. Off, a list is one example, and the schema describes the whole list.Default: false.
Dialectdialecttext
Which version of JSON Schema to write the schema in; Draft 2020-12, the current one, by default. Choose an older draft for a tool that needs one, such as Draft 7.One of: 2020-12 (Draft 2020-12), 2019-09 (Draft 2019-09), draft-07 (Draft 7), draft-06 (Draft 6), draft-04 (Draft 4). Default: 2020-12.
Mark properties requiredmark_requiredtrue/false
List the properties every example has as required. On by default; turn it off to make every property optional.Default: true.
Allow no other propertiesno_additional_propertiestrue/false
Refuse objects with properties the examples did not have, by setting additionalProperties to false on every object. Off by default, so new properties still pass.Default: false.
Detect formatsdetect_formatstrue/false
Add a format where every example value has one: date-time, date, time, email, uuid or uri (a web address). On by default.Default: true.
Titletitletext
Optional. A title for the schema, such as 'Order'.
Descriptiondescriptiontext
Optional. A description for the schema, saying what it describes.

Outputs

example_countnumber
How many examples it was made from.
property_countnumber
How many properties it describes, at every depth.
schemaobject
The schema, with its $schema, ready to use as the schema of a validation step.
summarytext
What happened, in a sentence or two.
Example output
{
  "example_count": 2,
  "property_count": 6,
  "schema": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "created": {
        "format": "date-time",
        "type": "string"
      },
      "email": {
        "format": "email",
        "type": "string"
      },
      "id": {
        "format": "uuid",
        "type": "string"
      },
      "note": {
        "type": "null"
      },
      "tags": {
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "total": {
        "type": "number"
      }
    },
    "required": [
      "id",
      "email",
      "created",
      "total",
      "tags"
    ],
    "title": "Order",
    "type": "object"
  },
  "summary": "A Draft 2020-12 schema for an object with 6 properties, from 2 examples."
}

Find JSON Schema tools

Search json-schema.org's catalogue of JSON Schema tools (validators, code generators, editors, linters and more) by kind, programming language, dialect and words in the name or description, with which validators Bowtie tests. No API key required.

Inputs

Search forquerytext
Optional. Words that must all appear in a tool's name or description, such as 'typescript generator'.
Kind of tooltooling_typetext
Optional. Only one kind of tool, such as Validator or Schema to code.One of: validator, annotations, bundler, hyper-schema, benchmarks, documentation, LDO-utility (LDO utility), code-to-schema (Code to schema), data-to-schema (Data to schema), model-to-schema (Model to schema), and 15 more.
Languagelanguagetext
Optional. Only tools for one programming language, as the catalogue names it, such as Python, JavaScript, TypeScript, Java, Go, Rust, C# or .NET.
Supportsdialecttext
Optional. Only tools that say they support this dialect.One of: 2020-12 (Draft 2020-12), 2019-09 (Draft 2019-09), 7 (Draft 7), 6 (Draft 6), 5 (Draft 5), 4 (Draft 4), 3 (Draft 3).
Include obsolete toolsinclude_obsoletetrue/false
Also list tools the catalogue marks obsolete, which are no longer maintained. Off by default.Default: false.
Only tools Bowtie testsbowtie_onlytrue/false
Only the validators Bowtie runs against the official test suite, whose scores 'Get a validator's compliance' reads. Off by default.Default: false.
Ordersorttext
By name, as json-schema.org lists them, or the most recently updated first. A tool the catalogue gives no date comes last.One of: name (By name), last_updated (Most recently updated first). Default: name.
Most tools to returnlimitnumber
How many tools to return, from 1 to 300; 25 by default.From 1 to 300. Default: 25.

Outputs

catalogue_sizenumber
How many tools the catalogue has in all.
countnumber
How many tools are returned.
summarytext
What happened, in a sentence or two.
toolslist
The tools that match, up to the most asked for.
total_matchesnumber
How many tools match, however many are returned.
Example output
{
  "catalogue_size": 59,
  "count": 3,
  "summary": "4 tools of the 59 in json-schema.org's catalogue match: jschon, json-schema-utils, jsonschema, and 1 more.",
  "tools": [
    {
      "bowtie_id": "python-jschon",
      "bowtie_url": "https://bowtie.report/#/implementations/python-jschon",
      "compliance_note": null,
      "description": "An object-oriented JSON Schema implementation for Python.",
      "dialects": [
        "Draft 2020-12",
        "Draft 2019-09"
      ],
      "environments": [],
      "homepage": "https://jschon.readthedocs.io/",
      "languages": [
        "Python"
      ],
      "last_updated": "2022-08-31",
      "license": "MIT",
      "maintainers": [
        "Mark Joseph"
      ],
      "name": "jschon",
      "notes": null,
      "obsolete": false,
      "other_dialects": [],
      "source": "https://github.com/marksparkza/jschon",
      "tooling_types": [
        "validator"
      ]
    },
    {
      "bowtie_id": "python-jsu-compile",
      "bowtie_url": "https://bowtie.report/#/implementations/python-jsu-compile",
      "compliance_note": null,
      "description": "Random utilities to analyze and manipulate JSON Schema",
      "dialects": [
        "Draft 2020-12",
        "Draft 2019-09",
        "Draft 7",
        "Draft 6",
        "Draft 5",
        "Draft 4",
        "Draft 3",
        "Draft 2",
        "Draft 1"
      ],
      "environments": [],
      "homepage": "https://github.com/zx80/json-schema-utils",
      "languages": [
        "Python"
      ],
      "last_updated": null,
      "license": "Public Domain",
      "maintainers": [
        "zx80",
        "clairey-zx81"
      ],
      "name": "json-schema-utils",
      "notes": null,
      "obsolete": false,
      "other_dialects": [],
      "source": "https://github.com/zx80/json-schema-utils",
      "tooling_types": [
        "validator",
        "linter",
        "schema-to-types",
        "util-general-processing"
      ]
    },
    {
      "bowtie_id": "python-jsonschema",
      "bowtie_url": "https://bowtie.report/#/implementations/python-jsonschema",
      "compliance_note": null,
      "description": "An implementation of the JSON Schema specification for Python",
      "dialects": [
        "Draft 2020-12",
        "Draft 2019-09",
        "Draft 7",
        "Draft 6",
        "Draft 4",
        "Draft 3"
      ],
      "environments": [],
      "homepage": "https://python-jsonschema.readthedocs.io/",
      "languages": [
        "Python"
      ],
      "last_updated": "2022-11-09",
      "license": "MIT",
      "maintainers": [
        "Julian Berman"
      ],
      "name": "jsonschema",
      "notes": null,
      "obsolete": false,
      "other_dialects": [],
      "source": "https://github.com/python-jsonschema/jsonschema",
      "tooling_types": [
        "validator"
      ]
    }
  ],
  "total_matches": 4
}

Get a validator's compliance

Get how much of the official JSON Schema Test Suite a validator passes, dialect by dialect, as Bowtie measures it, with its version, language and links. Name it by its Bowtie id, its name or its repository. No API key required.

Inputs

ValidatorimplementationtextRequired
The validator, as Bowtie knows it: its Bowtie id such as 'python-jsonschema' or 'js-ajv' (which 'Find JSON Schema tools' returns), its name, or its repository's address.

Outputs

dialectslist
Each dialect Bowtie tests it on, newest first.
documentationtext
Its documentation, or null.
homepagetext
Its home page, or null.
idtext
Its id on Bowtie, e.g. 'python-jsonschema'.
issuestext
Where to report its bugs, or null.
languagetext
Its programming language, as Bowtie names it, e.g. 'python'.
nametext
Its name, e.g. 'jsonschema'.
report_urltext
Its full report on bowtie.report.
sourcetext
Its source repository, or null.
summarytext
What happened, in a sentence or two.
versiontext
The version Bowtie tested, or null.
Example output
{
  "dialects": [
    {
      "dialect": "Draft 2020-12",
      "passing_percent": 99,
      "uri": "https://json-schema.org/draft/2020-12/schema"
    },
    {
      "dialect": "Draft 2019-09",
      "passing_percent": 99,
      "uri": "https://json-schema.org/draft/2019-09/schema"
    },
    {
      "dialect": "Draft 7",
      "passing_percent": 100,
      "uri": "http://json-schema.org/draft-07/schema#"
    },
    {
      "dialect": "Draft 6",
      "passing_percent": 100,
      "uri": "http://json-schema.org/draft-06/schema#"
    },
    {
      "dialect": "Draft 4",
      "passing_percent": 100,
      "uri": "http://json-schema.org/draft-04/schema#"
    },
    {
      "dialect": "Draft 3",
      "passing_percent": 100,
      "uri": "http://json-schema.org/draft-03/schema#"
    }
  ],
  "documentation": "https://python-jsonschema.readthedocs.io/",
  "homepage": "https://python-jsonschema.readthedocs.io/",
  "id": "python-jsonschema",
  "issues": "https://github.com/python-jsonschema/jsonschema/issues",
  "language": "python",
  "name": "jsonschema",
  "report_url": "https://bowtie.report/#/implementations/python-jsonschema",
  "source": "https://github.com/python-jsonschema/jsonschema",
  "summary": "jsonschema 4.26.0 (python) passes this share of the official test suite on Bowtie: Draft 2020-12 99%, Draft 2019-09 99%, Draft 7 100%, Draft 6 100%, Draft 4 100%, Draft 3 100%.",
  "version": "4.26.0"
}

List the keywords of a dialect

List the keywords of a JSON Schema dialect, from Draft 3 to Draft 2020-12, with the vocabulary each belongs to, what kind of value it applies to and links to its documentation. No API key required.

Inputs

Dialectdialecttext
The dialect whose keywords to list; Draft 2020-12 by default.One of: 2020-12 (Draft 2020-12), 2019-09 (Draft 2019-09), draft-07 (Draft 7), draft-06 (Draft 6), draft-04 (Draft 4), draft-03 (Draft 3). Default: 2020-12.
Vocabularyvocabularytext
Optional. Only the keywords of one vocabulary, such as Validation. Vocabularies came with Draft 2019-09, so leave this empty for older drafts.One of: core, applicator, unevaluated (Unevaluated (Draft 2020-12)), validation, meta-data, format-annotation (Format Annotation (Draft 2020-12)), format (Format (Draft 2019-09)), content.

Outputs

countnumber
How many keywords there are.
dialecttext
The dialect's $schema URI.
dialect_nametext
That dialect's name, e.g. 'Draft 2020-12'.
keywordslist
The keywords, in alphabetical order.
summarytext
What happened, in a sentence or two.
Example output
{
  "count": 20,
  "dialect": "https://json-schema.org/draft/2020-12/schema",
  "dialect_name": "Draft 2020-12",
  "keywords": [
    {
      "applies_to": "any",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/const",
      "keyword": "const",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/const",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "object",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/conditionals#dependentRequired",
      "keyword": "dependentRequired",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/dependentrequired",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "any",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/enum",
      "keyword": "enum",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/enum",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "number",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/numeric#range",
      "keyword": "exclusiveMaximum",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/exclusivemaximum",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "number",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/numeric#range",
      "keyword": "exclusiveMinimum",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/exclusiveminimum",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "array",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/array#mincontains-maxcontains",
      "keyword": "maxContains",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/maxcontains",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "number",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/numeric#range",
      "keyword": "maximum",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/maximum",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "array",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/array#length",
      "keyword": "maxItems",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/maxitems/",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "string",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/string#length",
      "keyword": "maxLength",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/maxlength",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "object",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/object#size",
      "keyword": "maxProperties",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/maxproperties",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "array",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/array#mincontains-maxcontains",
      "keyword": "minContains",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/mincontains",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "number",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/numeric#range",
      "keyword": "minimum",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/minimum",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "array",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/array#length",
      "keyword": "minItems",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/minitems",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "string",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/string#length",
      "keyword": "minLength",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/minlength/",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "object",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/object#size",
      "keyword": "minProperties",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/minproperties",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "number",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/numeric#multiples",
      "keyword": "multipleOf",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/multipleof",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "string",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/string#regexp",
      "keyword": "pattern",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/pattern",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "object",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/object#required",
      "keyword": "required",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/required",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "any",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/type",
      "keyword": "type",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/type",
      "vocabulary": "Validation"
    },
    {
      "applies_to": "array",
      "docs_url": "https://json-schema.org/understanding-json-schema/reference/array#uniqueItems",
      "keyword": "uniqueItems",
      "learn_url": "https://www.learnjsonschema.com/2020-12/validation/uniqueitems",
      "vocabulary": "Validation"
    }
  ],
  "summary": "20 keywords in the Validation vocabulary of Draft 2020-12: const, dependentRequired, enum, exclusiveMaximum, exclusiveMinimum, maxContains, maximum, maxItems, maxLength, maxProperties, minContains, minimum, minItems, minLength, minProperties, multipleOf, pattern, required, type, uniqueItems."
}

Look up a keyword

Look up a JSON Schema keyword in json-schema.org's Understanding JSON Schema reference: what it does, its examples of valid and invalid values, its notes on older drafts, which dialects have it, and links to the reference, Learn JSON Schema and the specification. No API key required.

Inputs

KeywordkeywordtextRequired
The keyword to look up, such as minLength, required, unevaluatedProperties or $ref. The $ can be left off, and older names such as definitions lead to the keyword that replaced them.

Outputs

applies_totext
What it constrains: 'string', 'number', 'object', 'array' or 'any' value.
dialectslist
The dialects that have it, newest first.
docs_urltext
The section on json-schema.org.
exampleslist
The section's examples for the current dialect: a schema, and values checked against it.
explanationtext
The section's explanation, as plain text.
keywordtext
The keyword, as the reference names it today. For an older name, such as definitions, the keyword that replaced it, such as $defs.
learn_urltext
The keyword's page on Learn JSON Schema, or null.
notetext
For an older keyword, what became of it; otherwise null.
noteslist
What the section says about other drafts.
sectiontext
The reference section that explains it, e.g. 'Length'.
spec_urltext
Its section of the Draft 2020-12 specification, or null.
summarytext
What happened, in a sentence or two.
vocabularytext
The Draft 2020-12 vocabulary that defines it, e.g. 'Validation'.
Example output
{
  "applies_to": "string",
  "dialects": [
    "Draft 2020-12",
    "Draft 2019-09",
    "Draft 7",
    "Draft 6",
    "Draft 4",
    "Draft 3"
  ],
  "docs_url": "https://json-schema.org/understanding-json-schema/reference/string#length",
  "examples": [
    {
      "schema": {
        "maxLength": 3,
        "minLength": 2,
        "type": "string"
      },
      "values": [
        {
          "caption": null,
          "valid": false,
          "value": "A"
        },
        {
          "caption": null,
          "valid": true,
          "value": "AB"
        },
        {
          "caption": null,
          "valid": true,
          "value": "ABC"
        },
        {
          "caption": null,
          "valid": false,
          "value": "ABCD"
        }
      ]
    }
  ],
  "explanation": "The length of a string can be constrained using the `minLength` and `maxLength` keywords. For both keywords, the value must be a non-negative number.",
  "keyword": "minLength",
  "learn_url": "https://www.learnjsonschema.com/2020-12/validation/minlength/",
  "note": null,
  "notes": [],
  "section": "Length",
  "spec_url": "https://json-schema.org/draft/2020-12/json-schema-validation#name-minlength",
  "summary": "minLength applies to a string, in the Validation vocabulary (Draft 2020-12, Draft 2019-09, Draft 7, Draft 6, Draft 4, Draft 3). The length of a string can be constrained using the `minLength` and `maxLength` keywords. For both keywords, the value must be a non-negative number.",
  "vocabulary": "Validation"
}

Validate data against a schema

Check data against a JSON Schema and get whether it is valid, with every error: where in the data it is, which keyword it broke and why, in plain words. The schema can be an object, JSON text, a file or a link, in any dialect from Draft 3 to Draft 2020-12, and formats such as email and date-time are really checked. No API key required.

Inputs

SchemaschematextRequired
The JSON Schema: an object from an earlier step, JSON text, an uploaded .json file, or the web address of one, such as https://json.schemastore.org/package.json. Its $ref links to other schemas on the web are followed.
DatadatatextRequired
The data to check, usually from an earlier step: an object, a list, text, a number, true, false or null. Text holding a JSON object or list is read as JSON (see Read JSON text as JSON), and an uploaded .json file works too.
Dialectdialecttext
Which version of JSON Schema to read the schema as. Leave it on the schema's own to follow its $schema, which is Draft 2020-12 when it has none; choose a draft to read it that way whatever it declares.One of: auto (The schema's own $schema (Draft 2020-12 if none)), 2020-12 (Draft 2020-12), 2019-09 (Draft 2019-09), draft-07 (Draft 7), draft-06 (Draft 6), draft-04 (Draft 4), draft-03 (Draft 3). Default: auto.
Check formatscheck_formatstrue/false
Whether a value must really be what its format says: an email address, a date-time, a URI, a UUID and the rest. On by default. JSON Schema itself treats format as a label unless a validator is told to check it; turn this off to do the same.Default: true.
Read JSON text as JSONread_json_texttrue/false
When the data is text holding a JSON object or list, such as a pasted document or a response kept as text, read it as JSON first. On by default. Turn it off to check such text as a string.Default: true.
Most errors to listmax_errorsnumber
How many errors to list, from 1 to 1,000; 100 by default. All of them are counted either way.From 1 to 1000. Default: 100.

Outputs

dialecttext
The $schema URI of the dialect the schema was read as, e.g. 'https://json-schema.org/draft/2020-12/schema'.
dialect_nametext
That dialect's name, e.g. 'Draft 2020-12'.
dialect_notetext
Why the schema was read as a dialect other than the one it declares, such as a $schema this step does not know. Null when it was read as declared.
error_countnumber
How many errors the data has, however many are listed.
errorslist
The errors, in the order the schema's keywords run, up to the most asked for.
summarytext
What happened, in a sentence or two.
validtrue/false
True when the data matches the schema.
Example output
{
  "dialect": "https://json-schema.org/draft/2020-12/schema",
  "dialect_name": "Draft 2020-12",
  "dialect_note": null,
  "error_count": 3,
  "errors": [
    {
      "instance_location": "/email",
      "keyword": "format",
      "keyword_location": "/properties/email/format",
      "message": "\"ada.example.com\" is not a valid email."
    },
    {
      "instance_location": "/total",
      "keyword": "multipleOf",
      "keyword_location": "/properties/total/multipleOf",
      "message": "19.999 is not a multiple of 0.01."
    },
    {
      "instance_location": "/items",
      "keyword": "minItems",
      "keyword_location": "/properties/items/minItems",
      "message": "The list has 0 items, fewer than the minimum of 1."
    }
  ],
  "summary": "Not valid: 3 errors against the schema (Draft 2020-12). At /email: \"ada.example.com\" is not a valid email. At /total: 19.999 is not a multiple of 0.01. At /items: The list has 0 items, fewer than the minimum of 1.",
  "valid": false
}

Validate each item in a list

Check each item of a list against a JSON Schema and split the list in two: the items that match, ready for the next step, and those that do not, each with its position and its errors. Up to 50,000 items. No API key required.

Inputs

SchemaschematextRequired
The JSON Schema: an object from an earlier step, JSON text, an uploaded .json file, or the web address of one, such as https://json.schemastore.org/package.json. Its $ref links to other schemas on the web are followed.
ItemsitemstextRequired
The list to check item by item: a list from an earlier step, such as the rows of a sheet or the records an API returned, JSON text holding one, or an uploaded .json file of one. Up to 50,000 items.
Dialectdialecttext
Which version of JSON Schema to read the schema as. Leave it on the schema's own to follow its $schema, which is Draft 2020-12 when it has none; choose a draft to read it that way whatever it declares.One of: auto (The schema's own $schema (Draft 2020-12 if none)), 2020-12 (Draft 2020-12), 2019-09 (Draft 2019-09), draft-07 (Draft 7), draft-06 (Draft 6), draft-04 (Draft 4), draft-03 (Draft 3). Default: auto.
Check formatscheck_formatstrue/false
Whether a value must really be what its format says: an email address, a date-time, a URI, a UUID and the rest. On by default. JSON Schema itself treats format as a label unless a validator is told to check it; turn this off to do the same.Default: true.
Read JSON text as JSONread_json_texttrue/false
When the data is text holding a JSON object or list, such as a pasted document or a response kept as text, read it as JSON first. On by default. Turn it off to check such text as a string.Default: true.
Most errors per itemmax_errorsnumber
How many errors to list for each item that does not match, from 1 to 100; 10 by default. All of them are counted either way.From 1 to 100. Default: 10.

Outputs

dialecttext
The $schema URI of the dialect the schema was read as, e.g. 'https://json-schema.org/draft/2020-12/schema'.
dialect_nametext
That dialect's name, e.g. 'Draft 2020-12'.
dialect_notetext
Why the schema was read as a dialect other than the one it declares, such as a $schema this step does not know. Null when it was read as declared.
invalid_countnumber
How many items do not.
invalid_itemslist
The items that do not match, in order.
item_countnumber
How many items the list has.
summarytext
What happened, in a sentence or two.
validtrue/false
True when every item matches the schema.
valid_countnumber
How many items match.
valid_itemslist
The items that match, in order, as given.
Example output
{
  "dialect": "https://json-schema.org/draft/2020-12/schema",
  "dialect_name": "Draft 2020-12",
  "dialect_note": null,
  "invalid_count": 1,
  "invalid_items": [
    {
      "error_count": 2,
      "errors": [
        {
          "instance_location": "/sku",
          "keyword": "pattern",
          "keyword_location": "/properties/sku/pattern",
          "message": "\"abc-1\" does not match the pattern \"^[A-Z]{3}-[0-9]{3}$\"."
        },
        {
          "instance_location": "/qty",
          "keyword": "minimum",
          "keyword_location": "/properties/qty/minimum",
          "message": "0 is less than the minimum of 1."
        }
      ],
      "index": 1,
      "item": {
        "qty": 0,
        "sku": "abc-1"
      }
    }
  ],
  "item_count": 3,
  "summary": "2 items of 3 match the schema (Draft 2020-12) and 1 does not. The first that does not is item 1: At /sku: \"abc-1\" does not match the pattern \"^[A-Z]{3}-[0-9]{3}$\".",
  "valid": false,
  "valid_count": 2,
  "valid_items": [
    {
      "qty": 2,
      "sku": "ABC-123"
    },
    {
      "qty": 1,
      "sku": "XYZ-999"
    }
  ]
}

On this page