JSON Schema keywords and types
This page is a practical reference for configuring validation rules using JSON Schema in the Schema tab.
Here you'll find:
Supported JSON Schema keywords and format options.
Quick-reference tables for core keywords and standardized string formats.
Note!
Advanced custom schemas edited directly in the Schema tab may not be fully editable in the visual rules UI.
See:
JSON Schema reference - For details about formal definitions, interoperability considerations, keyword behaviors, and advanced topics.
JSON Schema reference - For detailed JSON Schema examples.
Type/keyword reference table
This table shows which JSON Schema keywords apply to each data type.
Data type | Relevant keywords | Usage |
|---|---|---|
array | items, minItems, maxItems, uniqueItems | Control array content, length, and uniqueness |
number | minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf | Control allowed value ranges and divisibility |
object | properties, required, minProperties, maxProperties, patternProperties, additionalProperties, dependencies | Control object shape, requiredness, and property constraints |
string | minLength, maxLength, pattern, format | Control length, pattern, and semantic format |
grouping | allOf, anyOf, oneOf, not | Combine or negate multiple schemas/rules |
Common keywords
These are the most frequently used keywords for basic validation tasks.
Keyword | Description | Schema usage example |
|---|---|---|
type | Specifies the data type | { "type": "string" } |
*properties (see the warning below this table) | Defines properties for an object | { , "properties": { "name": { "type": "string" } } } |
required | Lists required properties | { "required": ["name", "email"] } |
enum | Restricts values to a set | { "type": "string", "enum": ["red", "green"] } |
format | Standardized format for a string | { "type": "string", "format": "email" } |
pattern | String must match a regex | { "type": "string", "pattern": "^[A-Z]{3}$" } |
minLength | Minimum string length | { "type": "string", "minLength": 2 } |
maxLength | Maximum string length | { "type": "string", "maxLength": 30 } |
minimum | Minimum numeric value | { "type": "number", "minimum": 10 } |
maximum | Maximum numeric value | { "type": "number", "maximum": 100 } |
items | Schema for array items | { "type": "array", "items": { "type": "string" } } |
additionalProperties | Allow/disallow unspecified object fields | { , "additionalProperties": false } |
Caution!
When defining validation rules for nested fields, do not use dot notation (e.g., "foo.bar") in the properties keyword.
JSON Schema treats "foo.bar" as a single, literal property name, not as a path to a nested value.
To validate nested fields, you must use nested properties blocks:
Incorrect
Does not validate nested fields; it only matches an object with a property literally named "foo.bar"
{
"properties": {
"foo.bar": { "minimum": 5 }
}
}Correct
Validates the nested "bar" field inside "foo"; this matches an object like { "foo": { "bar": 6 } } and applies the rule to the nested "bar" property.
{
"properties": {
"foo": {
"properties": {
"bar": { "minimum": 5 }
}
}
}
}Note!
The Rules section in the UI does not support dot notation for nested fields and will display an error if used in the schema block. Always use the correct nested structure for validating nested fields.
For details on structuring nested objects, see Creating your first schema.
Advanced keywords
Useful for more complex validation and precise control over data.
Keyword | Description | Schema usage example |
|---|---|---|
patternProperties | Properties matching a regex | { "patternProperties": { "^S_": { "type": "string" } } } |
minItems | Minimum array length | { "type": "array", "minItems": 2 } |
maxItems | Maximum array length | { "type": "array", "maxItems": 10 } |
uniqueItems | All items in the array must be unique | { "type": "array", "uniqueItems": true } |
minProperties | Minimum number of object properties | { , "minProperties": 1 } |
maxProperties | Maximum number of object properties | { , "maxProperties": 5 } |
dependencies | Require other properties based on the presence of one | { "dependencies": { "credit_card": ["billing_address"] } } |
multipleOf | The number must be a multiple of the value | { "type": "number", "multipleOf": 10 } |
exclusiveMinimum | Value must be strictly greater than the minimum | { "type": "number", "exclusiveMinimum": 0 } |
exclusiveMaximum | Value must be strictly less than the maximum | { "type": "number", "exclusiveMaximum": 100 } |
Grouping keywords
These keywords let you combine or negate multiple rules, useful for complex validation logic.
Keyword | Description | Schema usage example |
|---|---|---|
allOf | Must match all schemas in the array | { "allOf": [ { "type": "string" }, { "maxLength": 5 } ] } |
anyOf | Must match at least one schema in the array | { "anyOf": [ { "type": "string" }, { "type": "number" } ] } |
oneOf | Must match exactly one schema in the array | { "oneOf": [ { "type": "string" }, { "type": "number" } ] } |
not | Must not match the specified schema | { "not": { "type": "null" } } |
Format values
The format keyword adds semantic meaning to strings and can enforce well-known formats like email, date or uri.
Format | Description | Schema usage example | Valid data example |
|---|---|---|---|
date-time | RFC3339 Date & Time | { "type": "string", "format": "date-time" } | "2025-06-16T11:00:00Z" |
date | Calendar Date | { "type": "string", "format": "date" } | "2025-06-16" |
time | Time of Day | { "type": "string", "format": "time" } | "11:00:00" |
Email Address | { "type": "string", "format": "email" } | "user@example.com" | |
hostname | Internet Hostname | { "type": "string", "format": "hostname" } | "Example Domain" |
ipv4 | IPv4 Address | { "type": "string", "format": "ipv4" } | "192.168.1.1" |
ipv6 | IPv6 Address | { "type": "string", "format": "ipv6" } | "2001:db8::1" |
uri | URI | { "type": "string", "format": "uri" } | "Example Domain " |
uuid | UUID | { "type": "string", "format": "uuid" } | "3e4666bf-d5e5-4aa7-b8ce-cefe41c7568a" |