{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/azure-ad/json-schema/azure-ad-microsoft-graph-synchronization-schema-schema.json",
  "title": "microsoft.graph.synchronizationSchema",
  "x-generated": "2026-11-05",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/azure-ad-applications-synchronization-api-openapi.yml#/components/schemas/microsoft.graph.synchronizationSchema",
  "allOf": [
    {
      "$ref": "#/$defs/microsoft.graph.entity"
    },
    {
      "title": "synchronizationSchema",
      "type": "object",
      "properties": {
        "synchronizationRules": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.synchronizationRule"
          },
          "description": "A collection of synchronization rules configured for the synchronizationJob or synchronizationTemplate."
        },
        "version": {
          "type": [
            "string",
            "null"
          ],
          "description": "The version of the schema, updated automatically with every schema change."
        },
        "directories": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.directoryDefinition"
          },
          "description": "Contains the collection of directories and all of their objects.",
          "x-ms-navigationProperty": true
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    }
  ],
  "$defs": {
    "microsoft.graph.attributeDefinition": {
      "title": "attributeDefinition",
      "type": "object",
      "properties": {
        "anchor": {
          "type": "boolean",
          "description": "true if the attribute should be used as the anchor for the object. Anchor attributes must have a unique value identifying an object, and must be immutable. Default is false. One, and only one, of the object's attributes must be designated as the anchor to support synchronization."
        },
        "apiExpressions": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.stringKeyStringValuePair"
          }
        },
        "caseExact": {
          "type": "boolean",
          "description": "true if value of this attribute should be treated as case-sensitive. This setting affects how the synchronization engine detects changes for the attribute."
        },
        "defaultValue": {
          "type": [
            "string",
            "null"
          ],
          "description": "The default value of the attribute."
        },
        "flowNullValues": {
          "type": "boolean",
          "description": "'true' to allow null values for attributes."
        },
        "metadata": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.attributeDefinitionMetadataEntry"
          },
          "description": "Metadata for the given object."
        },
        "multivalued": {
          "type": "boolean",
          "description": "true if an attribute can have multiple values. Default is false."
        },
        "mutability": {
          "$ref": "#/$defs/microsoft.graph.mutability"
        },
        "name": {
          "type": [
            "string",
            "null"
          ],
          "description": "Name of the attribute. Must be unique within the object definition. Not nullable."
        },
        "referencedObjects": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.referencedObject"
          },
          "description": "For attributes with reference type, lists referenced objects (for example, the manager attribute would list User as the referenced object)."
        },
        "required": {
          "type": "boolean",
          "description": "true if attribute is required. Object can not be created if any of the required attributes are missing. If during synchronization, the required attribute has no value, the default value will be used. If default the value was not set, synchronization will record an error."
        },
        "type": {
          "$ref": "#/$defs/microsoft.graph.attributeType"
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.attributeDefinitionMetadata": {
      "title": "attributeDefinitionMetadata",
      "enum": [
        "BaseAttributeName",
        "ComplexObjectDefinition",
        "IsContainer",
        "IsCustomerDefined",
        "IsDomainQualified",
        "LinkPropertyNames",
        "LinkTypeName",
        "MaximumLength",
        "ReferencedProperty"
      ],
      "type": "string"
    },
    "microsoft.graph.attributeDefinitionMetadataEntry": {
      "title": "attributeDefinitionMetadataEntry",
      "type": "object",
      "properties": {
        "key": {
          "$ref": "#/$defs/microsoft.graph.attributeDefinitionMetadata"
        },
        "value": {
          "type": [
            "string",
            "null"
          ],
          "description": "Value of the metadata property."
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.attributeFlowBehavior": {
      "title": "attributeFlowBehavior",
      "enum": [
        "FlowWhenChanged",
        "FlowAlways"
      ],
      "type": "string"
    },
    "microsoft.graph.attributeFlowType": {
      "title": "attributeFlowType",
      "enum": [
        "Always",
        "ObjectAddOnly",
        "MultiValueAddOnly",
        "ValueAddOnly",
        "AttributeAddOnly"
      ],
      "type": "string"
    },
    "microsoft.graph.attributeMapping": {
      "title": "attributeMapping",
      "type": "object",
      "properties": {
        "defaultValue": {
          "type": [
            "string",
            "null"
          ],
          "description": "Default value to be used in case the source property was evaluated to null. Optional."
        },
        "exportMissingReferences": {
          "type": "boolean",
          "description": "For internal use only."
        },
        "flowBehavior": {
          "$ref": "#/$defs/microsoft.graph.attributeFlowBehavior"
        },
        "flowType": {
          "$ref": "#/$defs/microsoft.graph.attributeFlowType"
        },
        "matchingPriority": {
          "maximum": 2147483647,
          "minimum": -2147483648,
          "type": "number",
          "description": "If higher than 0, this attribute will be used to perform an initial match of the objects between source and target directories. The synchronization engine will try to find the matching object using attribute with lowest value of matching priority first. If not found, the attribute with the next matching priority will be used, and so on a until match is found or no more matching attributes are left. Only attributes that are expected to have unique values, such as email, should be used as matching attributes.",
          "format": "int32"
        },
        "source": {
          "$ref": "#/$defs/microsoft.graph.attributeMappingSource"
        },
        "targetAttributeName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Name of the attribute on the target object."
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.attributeMappingSource": {
      "title": "attributeMappingSource",
      "type": "object",
      "properties": {
        "expression": {
          "type": [
            "string",
            "null"
          ],
          "description": "Equivalent expression representation of this attributeMappingSource object."
        },
        "name": {
          "type": [
            "string",
            "null"
          ],
          "description": "Name parameter of the mapping source. Depending on the type property value, this can be the name of the function, the name of the source attribute, or a constant value to be used."
        },
        "parameters": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.stringKeyAttributeMappingSourceValuePair"
          },
          "description": "If this object represents a function, lists function parameters. Parameters consist of attributeMappingSource objects themselves, allowing for complex expressions. If type isn't Function, this property is null/empty array."
        },
        "type": {
          "$ref": "#/$defs/microsoft.graph.attributeMappingSourceType"
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.attributeMappingSourceType": {
      "title": "attributeMappingSourceType",
      "enum": [
        "Attribute",
        "Constant",
        "Function"
      ],
      "type": "string"
    },
    "microsoft.graph.attributeType": {
      "title": "attributeType",
      "enum": [
        "String",
        "Integer",
        "Reference",
        "Binary",
        "Boolean",
        "DateTime"
      ],
      "type": "string"
    },
    "microsoft.graph.containerFilter": {
      "title": "containerFilter",
      "type": "object",
      "properties": {
        "includedContainers": {
          "type": "array",
          "items": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.directoryDefinition": {
      "allOf": [
        {
          "$ref": "#/$defs/microsoft.graph.entity"
        },
        {
          "title": "directoryDefinition",
          "type": "object",
          "properties": {
            "discoverabilities": {
              "$ref": "#/$defs/microsoft.graph.directoryDefinitionDiscoverabilities"
            },
            "discoveryDateTime": {
              "pattern": "^[0-9]{4,}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]([.][0-9]{1,12})?(Z|[+-][0-9][0-9]:[0-9][0-9])$",
              "type": [
                "string",
                "null"
              ],
              "description": "Represents the discovery date and time using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z.",
              "format": "date-time"
            },
            "name": {
              "type": [
                "string",
                "null"
              ],
              "description": "Name of the directory. Must be unique within the synchronization schema. Not nullable."
            },
            "objects": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/microsoft.graph.objectDefinition"
              },
              "description": "Collection of objects supported by the directory."
            },
            "readOnly": {
              "type": "boolean",
              "description": "Whether this object is read-only."
            },
            "version": {
              "type": [
                "string",
                "null"
              ],
              "description": "Read only value that indicates version discovered. null if discovery hasn't yet occurred."
            }
          },
          "additionalProperties": {
            "type": "object"
          }
        }
      ]
    },
    "microsoft.graph.directoryDefinitionDiscoverabilities": {
      "title": "directoryDefinitionDiscoverabilities",
      "enum": [
        "None",
        "AttributeNames",
        "AttributeDataTypes",
        "AttributeReadOnly",
        "ReferenceAttributes",
        "UnknownFutureValue"
      ],
      "type": "string",
      "x-ms-enum-flags": {
        "isFlags": true
      }
    },
    "microsoft.graph.entity": {
      "title": "entity",
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "The unique identifier for an entity. Read-only."
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.filter": {
      "title": "filter",
      "type": "object",
      "properties": {
        "categoryFilterGroups": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.filterGroup"
          },
          "description": "*Experimental* Filter group set used to decide whether given object belongs and should be processed as part of this object mapping. An object is considered in scope if ANY of the groups in the collection is evaluated to true."
        },
        "groups": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.filterGroup"
          },
          "description": "Filter group set used to decide whether given object is in scope for provisioning. This is the filter which should be used in most cases. If an object used to satisfy this filter at a given moment, and then the object or the filter was changed so that filter isn't satisfied any longer, such object will get deprovisioned'. An object is considered in scope if ANY of the groups in the collection is evaluated to true."
        },
        "inputFilterGroups": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.filterGroup"
          },
          "description": "*Experimental* Filter group set used to filter out objects at the early stage of reading them from the directory. If an object doesn't satisfy this filter, then it will not be processed further. Important to understand is that if an object used to satisfy this filter at a given moment, and then the object or the filter was changed so that filter is no longer satisfied, such object will NOT get deprovisioned. An object is considered in scope if ANY of the groups in the collection is evaluated to true."
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.filterClause": {
      "title": "filterClause",
      "type": "object",
      "properties": {
        "operatorName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Name of the operator to be applied to the source and target operands. Must be one of the supported operators. Supported operators can be discovered."
        },
        "sourceOperandName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Name of source operand (the operand being tested). The source operand name must match one of the attribute names on the source object."
        },
        "targetOperand": {
          "$ref": "#/$defs/microsoft.graph.filterOperand"
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.filterGroup": {
      "title": "filterGroup",
      "type": "object",
      "properties": {
        "clauses": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.filterClause"
          },
          "description": "Filter clauses (conditions) of this group. All clauses in a group must be satisfied in order for the filter group to evaluate to true."
        },
        "name": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable name of the filter group."
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.filterOperand": {
      "title": "filterOperand",
      "type": "object",
      "properties": {
        "values": {
          "type": "array",
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": "Collection of values."
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.groupFilter": {
      "title": "groupFilter",
      "type": "object",
      "properties": {
        "includedGroups": {
          "type": "array",
          "items": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.mutability": {
      "title": "mutability",
      "enum": [
        "ReadWrite",
        "ReadOnly",
        "Immutable",
        "WriteOnly"
      ],
      "type": "string"
    },
    "microsoft.graph.objectDefinition": {
      "title": "objectDefinition",
      "type": "object",
      "properties": {
        "attributes": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.attributeDefinition"
          },
          "description": "Defines attributes of the object."
        },
        "metadata": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.objectDefinitionMetadataEntry"
          },
          "description": "Metadata for the given object."
        },
        "name": {
          "type": [
            "string",
            "null"
          ],
          "description": "Name of the object. Must be unique within a directory definition. Not nullable."
        },
        "supportedApis": {
          "type": "array",
          "items": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": "The API that the provisioning service queries to retrieve data for synchronization."
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.objectDefinitionMetadata": {
      "title": "objectDefinitionMetadata",
      "enum": [
        "PropertyNameAccountEnabled",
        "PropertyNameSoftDeleted",
        "IsSoftDeletionSupported",
        "IsSynchronizeAllSupported",
        "ConnectorDataStorageRequired",
        "Extensions",
        "BaseObjectName"
      ],
      "type": "string"
    },
    "microsoft.graph.objectDefinitionMetadataEntry": {
      "title": "objectDefinitionMetadataEntry",
      "type": "object",
      "properties": {
        "key": {
          "$ref": "#/$defs/microsoft.graph.objectDefinitionMetadata"
        },
        "value": {
          "type": [
            "string",
            "null"
          ],
          "description": "Value of the metadata property."
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.objectFlowTypes": {
      "title": "objectFlowTypes",
      "enum": [
        "None",
        "Add",
        "Update",
        "Delete"
      ],
      "type": "string",
      "x-ms-enum-flags": {
        "isFlags": true
      }
    },
    "microsoft.graph.objectMapping": {
      "title": "objectMapping",
      "type": "object",
      "properties": {
        "attributeMappings": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.attributeMapping"
          },
          "description": "Attribute mappings define which attributes to map from the source object into the target object and how they should flow. A number of functions are available to support the transformation of the original source values."
        },
        "enabled": {
          "type": "boolean",
          "description": "When true, this object mapping will be processed during synchronization. When false, this object mapping will be skipped."
        },
        "flowTypes": {
          "$ref": "#/$defs/microsoft.graph.objectFlowTypes"
        },
        "metadata": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.objectMappingMetadataEntry"
          },
          "description": "Additional extension properties. Unless mentioned explicitly, metadata values should not be changed."
        },
        "name": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-friendly name of the object mapping."
        },
        "scope": {
          "$ref": "#/$defs/microsoft.graph.filter"
        },
        "sourceObjectName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Name of the object in the source directory. Must match the object name from the source directory definition."
        },
        "targetObjectName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Name of the object in target directory. Must match the object name from the target directory definition."
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.objectMappingMetadata": {
      "title": "objectMappingMetadata",
      "enum": [
        "EscrowBehavior",
        "DisableMonitoringForChanges",
        "OriginalJoiningProperty",
        "Disposition",
        "IsCustomerDefined",
        "ExcludeFromReporting",
        "Unsynchronized"
      ],
      "type": "string"
    },
    "microsoft.graph.objectMappingMetadataEntry": {
      "title": "objectMappingMetadataEntry",
      "type": "object",
      "properties": {
        "key": {
          "$ref": "#/$defs/microsoft.graph.objectMappingMetadata"
        },
        "value": {
          "type": [
            "string",
            "null"
          ],
          "description": "Value of the metadata property."
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.referencedObject": {
      "title": "referencedObject",
      "type": "object",
      "properties": {
        "referencedObjectName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Name of the referenced object. Must match one of the objects in the directory definition."
        },
        "referencedProperty": {
          "type": [
            "string",
            "null"
          ],
          "description": "Currently not supported. Name of the property in the referenced object, the value for which is used as the reference."
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.stringKeyAttributeMappingSourceValuePair": {
      "title": "stringKeyAttributeMappingSourceValuePair",
      "type": "object",
      "properties": {
        "key": {
          "type": [
            "string",
            "null"
          ],
          "description": "The name of the parameter."
        },
        "value": {
          "$ref": "#/$defs/microsoft.graph.attributeMappingSource"
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.stringKeyStringValuePair": {
      "title": "stringKeyStringValuePair",
      "type": "object",
      "properties": {
        "key": {
          "type": [
            "string",
            "null"
          ],
          "description": "Key."
        },
        "value": {
          "type": [
            "string",
            "null"
          ],
          "description": "Value."
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    },
    "microsoft.graph.synchronizationRule": {
      "title": "synchronizationRule",
      "type": "object",
      "properties": {
        "containerFilter": {
          "$ref": "#/$defs/microsoft.graph.containerFilter"
        },
        "editable": {
          "type": "boolean",
          "description": "true if the synchronization rule can be customized; false if this rule is read-only and shouldn't be changed."
        },
        "groupFilter": {
          "$ref": "#/$defs/microsoft.graph.groupFilter"
        },
        "id": {
          "type": [
            "string",
            "null"
          ],
          "description": "Synchronization rule identifier. Must be one of the identifiers recognized by the synchronization engine. Supported rule identifiers can be found in the synchronization template returned by the API."
        },
        "metadata": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.stringKeyStringValuePair"
          },
          "description": "Additional extension properties. Unless instructed explicitly by the support team, metadata values shouldn't be changed."
        },
        "name": {
          "type": [
            "string",
            "null"
          ],
          "description": "Human-readable name of the synchronization rule. Not nullable."
        },
        "objectMappings": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/microsoft.graph.objectMapping"
          },
          "description": "Collection of object mappings supported by the rule. Tells the synchronization engine which objects should be synchronized."
        },
        "priority": {
          "maximum": 2147483647,
          "minimum": -2147483648,
          "type": "number",
          "description": "Priority relative to other rules in the synchronizationSchema. Rules with the lowest priority number will be processed first.",
          "format": "int32"
        },
        "sourceDirectoryName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Name of the source directory. Must match one of the directory definitions in synchronizationSchema."
        },
        "targetDirectoryName": {
          "type": [
            "string",
            "null"
          ],
          "description": "Name of the target directory. Must match one of the directory definitions in synchronizationSchema."
        }
      },
      "additionalProperties": {
        "type": "object"
      }
    }
  }
}