{
  "$id": "http://raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/core.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "core",
  "description": "Common properties and behavior across all STIX Domain Objects and STIX Relationship Objects.",
  "type": "object",
  "properties": {
    "type": {
      "title": "type",
      "type": "string",
      "pattern": "^([a-z][a-z0-9]*)+(-[a-z0-9]+)*\\-?$",
      "minLength": 3,
      "maxLength": 250,
      "description": "The type property identifies the type of STIX Object (SDO, Relationship Object, etc). The value of the type field MUST be one of the types defined by a STIX Object (e.g., indicator).",
      "not": {
        "enum": [
          "action"
        ]
      }
    },
    "spec_version": {
      "type": "string",
      "enum": [
        "2.0",
        "2.1"
      ],
      "description": "The version of the STIX specification used to represent this object."
    },
    "id": {
      "$ref": "../common/identifier.json",
      "description": "The id property universally and uniquely identifies this object."
    },
    "created_by_ref": {
      "$ref": "../common/identifier.json",
      "description": "The ID of the Source object that describes who created this object."
    },
    "labels": {
      "type": "array",
      "description": "The labels property specifies a set of terms used to describe this object.",
      "items": {
        "type": "string"
      },
      "minItems": 1
    },
    "created": {
      "description": "The created property represents the time at which the first version of this object was created. The timstamp value MUST be precise to the nearest millisecond.",
      "allOf": [
        {
          "$ref": "../common/timestamp.json"
        },
        {
          "title": "timestamp_millis",
          "pattern": "T\\d{2}:\\d{2}:\\d{2}\\.\\d{3,}Z$"
        }
      ]
    },
    "modified": {
      "description": "The modified property represents the time that this particular version of the object was modified. The timstamp value MUST be precise to the nearest millisecond.",
      "allOf": [
        {
          "$ref": "../common/timestamp.json"
        },
        {
          "title": "timestamp_millis",
          "pattern": "T\\d{2}:\\d{2}:\\d{2}\\.\\d{3,}Z$"
        }
      ]
    },
    "revoked": {
      "type": "boolean",
      "description": "The revoked property indicates whether the object has been revoked."
    },
    "confidence": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100,
      "description": "Identifies the confidence that the creator has in the correctness of their data."
    },
    "lang": {
      "type": "string",
      "description": "Identifies the language of the text content in this object."
    },
    "external_references": {
      "type": "array",
      "description": "A list of external references which refers to non-STIX information.",
      "items": {
        "$ref": "../common/external-reference.json"
      },
      "minItems": 1
    },
    "object_marking_refs": {
      "type": "array",
      "description": "The list of marking-definition objects to be applied to this object.",
      "items": {
        "$ref": "../common/identifier.json"
      },
      "minItems": 1
    },
    "granular_markings": {
      "type": "array",
      "description": "The set of granular markings that apply to this object.",
      "items": {
        "$ref": "../common/granular-marking.json"
      },
      "minItems": 1
    },
    "extensions": {
      "description": "Specifies any extensions of the object, as a dictionary.",
      "type": "object",
      "minProperties": 1,
      "patternProperties": {
          "^([a-z][a-z0-9]*)+(-[a-z0-9]+)*\\-ext$": {
            "type": "object",
            "minProperties": 1,
            "allOf": [{ "$ref": "../common/properties.json" }]
          },
          "^extension-definition--[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$": {
            "allOf": [{ "$ref": "../common/extension.json" }]
          }
        },
        "additionalProperties": false
    }
  },
  "allOf": [{ "$ref": "../common/properties.json" }],
  "not": {
    "anyOf": [
      {
        "required": [
          "severity"
        ]
      },
      {
        "required": [
          "action"
        ]
      },
      {
        "required": [
          "username"
        ]
      },
      {
        "required": [
          "phone_numbers"
        ]
      }
    ]
  },
  "required": [
    "type",
    "spec_version",
    "id",
    "created",
    "modified"
  ]
}
