$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 7
Changed In None
Introduced In Draft 6
Vocabulary Core
Specification https://json-schema.org/draft-07/draft-handrews-json-schema-01#rfc.section.8.2
Metaschema http://json-schema.org/draft-07/schema#
Official Tests draft7/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-07/schema#
    Base Dialect      : http://json-schema.org/draft-07/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-07/schema#
    Base Dialect      : http://json-schema.org/draft-07/schema#
    Parent            :
    Instance Location : /foo

...

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

Examples

A schema that declares a potentially resolvable HTTP absolute URL identifier Schema
{
  "$schema": "http://json-schema.org/draft-07/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-07/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-07/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-07/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-07/schema#",
  "$comment": "This is the root schema resource",
  "$id": "https://example.com/schemas/root.json",
  "properties": {
    "foo": {
      "$comment": "The resolved URI of this nested schema resource is https://example.com/schemas/foo.json",
      "$id": "foo.json"
    },
    "bar": {
      "$comment": "The resolved URI of this nested schema resource is https://example.com/schemas/bar.json",
      "$id": "/schemas/bar.json"
    },
    "baz": {
      "$comment": "The resolved URI of this nested schema resource is https://absolute.example/baz.json",
      "$id": "https://absolute.example/baz.json",
      "items": {
        "$comment": "The resolved URI of this nested schema resource is https://absolute.example/deep",
        "$id": "deep"
      }
    }
  }
}