id : URI Reference

id

URI Reference

This keyword declares an identifier for the schema resource.

Value This keyword must be set to an absolute URI or a relative reference as defined by RFC 3986 Hint: Use the jsonschema metaschema and jsonschema lint commands to catch keywords set to invalid values
Kind Identifier
Applies To Any
Base Dialect Draft 4
Changed In None
Introduced In Draft 3
Vocabulary Core
Specification https://json-schema.org/draft-04/draft-zyp-json-schema-04#rfc.section.7.2
Metaschema http://json-schema.org/draft-04/schema#
Official Tests draft4/optional/id.json
Default None
Annotation None
Affected By None
Affects
Also See

The id keyword explicitly turns a schema into a schema resource (a schema that is associated with a URI). Relative URIs are resolved against the current base URI, which is either the closest parent id keyword (applicable in the case of compound schemas), or the base URI as determined by the context on which the schema is declared (i.e. serving a schema over HTTP may implicitly award it such URL as the base).

To debug the role of the id keyword on a schema (particularly schemas with embedded resources), try the jsonschema inspect command. This command prints detailed information about each schema resource, subschema, location, and reference present in the schema. For example:

$ jsonschema inspect schema.json
(RESOURCE) URI: https://example.com/schema
    Type              : Static
    Root              : https://example.com/schema
    Pointer           :
    Base              : https://example.com/schema
    Relative Pointer  :
    Dialect           : http://json-schema.org/draft-04/schema#
    Base Dialect      : http://json-schema.org/draft-04/schema#
    Parent            : <NONE>
    Instance Location :

...

(SUBSCHEMA) URI: https://example.com/schema#/properties/foo
    Type              : Static
    Root              : https://example.com/schema
    Pointer           : /properties/foo
    Base              : https://example.com/schema
    Relative Pointer  : /properties/foo
    Dialect           : http://json-schema.org/draft-04/schema#
    Base Dialect      : http://json-schema.org/draft-04/schema#
    Parent            :
    Instance Location : /foo

...

(REFERENCE) ORIGIN: /$schema
    Type              : Static
    Destination       : http://json-schema.org/draft-04/schema
    - (w/o fragment)  : http://json-schema.org/draft-04/schema
    - (fragment)      : <NONE>

Examples

A schema that declares a potentially resolvable HTTP absolute URL identifier Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "https://example.com/schemas/even-number.json",
  "type": "number",
  "multipleOf": 2
}
A schema that declares a non-resolvable Tag URI identifier Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "tag:example.com,2025:even-number",
  "type": "number",
  "multipleOf": 2
}
A schema that declares a non-resolvable URN example identifier Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "urn:example:even-number",
  "type": "number",
  "multipleOf": 2
}
A schema that uses fragment identifiers to create reusable anchors Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "https://example.com/schemas/user.json",
  "type": "object",
  "properties": {
    "name": { "$ref": "#nonEmptyString" },
    "email": { "$ref": "#nonEmptyString" }
  },
  "definitions": {
    "nonEmptyString": {
      "id": "#nonEmptyString",
      "type": "string",
      "minLength": 1
    }
  }
}
A compound schema that declares relative and absolute nested URIs Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "https://example.com/schemas/root.json",
  "properties": {
    "foo": {
      "id": "foo.json"
    },
    "bar": {
      "id": "/schemas/bar.json"
    },
    "baz": {
      "id": "https://absolute.example/baz.json",
      "items": {
        "id": "deep"
      }
    }
  }
}