{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://docs.deeta.app/deeta-file-standard/deeta-import-v1.schema.json",
  "title": "Deeta merge file (.deeta), format major 1",
  "description": "A file read by Import & Merge. See deeta-import-v1.md for the rules a schema cannot express.",
  "type": "object",
  "required": [
    "format",
    "formatVersion",
    "contacts"
  ],
  "additionalProperties": false,
  "properties": {
    "format": {
      "const": "deeta-data-export-v2"
    },
    "formatVersion": {
      "type": "string",
      "pattern": "^1(\\.[0-9]+){0,2}$"
    },
    "generator": {
      "type": "string",
      "maxLength": 200
    },
    "generatedAt": {
      "type": "string",
      "maxLength": 40
    },
    "accountMarker": {
      "type": "string",
      "maxLength": 128
    },
    "contacts": {
      "type": "array",
      "maxItems": 10000,
      "items": {
        "$ref": "#/$defs/contact"
      }
    },
    "deets": {
      "type": "array",
      "maxItems": 100000,
      "items": {
        "$ref": "#/$defs/deet"
      }
    },
    "tags": {
      "type": "array",
      "maxItems": 500,
      "items": {
        "$ref": "#/$defs/tag"
      }
    },
    "contact_tag_ids": {
      "type": "object",
      "propertyNames": {
        "$ref": "#/$defs/contactRef"
      },
      "additionalProperties": {
        "type": "array",
        "maxItems": 30,
        "items": {
          "$ref": "#/$defs/rowLabel"
        }
      }
    },
    "groups": {
      "type": "array",
      "maxItems": 100000,
      "items": {
        "$ref": "#/$defs/group"
      }
    },
    "group_members": {
      "type": "object",
      "propertyNames": {
        "$ref": "#/$defs/rowLabel"
      },
      "additionalProperties": {
        "type": "array",
        "maxItems": 10000,
        "items": {
          "$ref": "#/$defs/contactRef"
        }
      }
    },
    "self_profile": {
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/$defs/selfProfile"
        }
      ]
    },
    "self_deets": {
      "type": "array",
      "maxItems": 500,
      "items": {
        "$ref": "#/$defs/selfDeet"
      }
    },
    "deet_sets": {
      "type": "array",
      "maxItems": 50,
      "items": {
        "$ref": "#/$defs/deetSet"
      }
    },
    "relationships": {
      "type": "array",
      "maxItems": 0
    },
    "ai_preferences": true,
    "deletion_log": true,
    "core_field_writes": true,
    "core_field_set_members": true,
    "live_sync": true,
    "settings": true,
    "contact_apple_links": true,
    "contact_sync_state": true
  },
  "$defs": {
    "uuid": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
    },
    "newId": {
      "type": "string",
      "pattern": "^new(:[A-Za-z0-9_-]{1,64})?$"
    },
    "newRef": {
      "type": "string",
      "pattern": "^new:[A-Za-z0-9_-]{1,64}$"
    },
    "contactRef": {
      "oneOf": [
        {
          "$ref": "#/$defs/uuid"
        },
        {
          "$ref": "#/$defs/newRef"
        }
      ]
    },
    "rowLabel": {
      "oneOf": [
        {
          "$ref": "#/$defs/uuid"
        },
        {
          "$ref": "#/$defs/newRef"
        }
      ]
    },
    "importType": {
      "enum": [
        "additive",
        "update",
        "overwrite"
      ]
    },
    "ignored": true,
    "text": {
      "type": "string",
      "pattern": "^[^\\u0000-\\u001F\\u007F-\\u009F\\u202A-\\u202E\\u2066-\\u2069]*$"
    },
    "deetKey": {
      "allOf": [
        {
          "$ref": "#/$defs/text"
        },
        {
          "minLength": 1,
          "maxLength": 50
        }
      ]
    },
    "deetValue": {
      "allOf": [
        {
          "$ref": "#/$defs/text"
        },
        {
          "maxLength": 280
        }
      ]
    },
    "name50": {
      "allOf": [
        {
          "$ref": "#/$defs/text"
        },
        {
          "minLength": 1,
          "maxLength": 50
        }
      ]
    },
    "label": {
      "allOf": [
        {
          "$ref": "#/$defs/text"
        },
        {
          "minLength": 1,
          "maxLength": 50
        }
      ]
    },
    "personName": {
      "allOf": [
        {
          "$ref": "#/$defs/text"
        },
        {
          "maxLength": 150
        }
      ]
    },
    "notes": {
      "type": "string",
      "maxLength": 10000,
      "pattern": "^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F-\\u009F\\u202A-\\u202E\\u2066-\\u2069]*$"
    },
    "phoneEntry": {
      "type": "object",
      "required": [
        "label",
        "value"
      ],
      "additionalProperties": false,
      "properties": {
        "label": {
          "$ref": "#/$defs/label"
        },
        "value": {
          "allOf": [
            {
              "$ref": "#/$defs/text"
            },
            {
              "maxLength": 100
            }
          ]
        }
      }
    },
    "emailEntry": {
      "type": "object",
      "required": [
        "label",
        "value"
      ],
      "additionalProperties": false,
      "properties": {
        "label": {
          "$ref": "#/$defs/label"
        },
        "value": {
          "allOf": [
            {
              "$ref": "#/$defs/text"
            },
            {
              "maxLength": 254
            }
          ]
        }
      }
    },
    "urlEntry": {
      "type": "object",
      "required": [
        "label",
        "value"
      ],
      "additionalProperties": false,
      "properties": {
        "label": {
          "$ref": "#/$defs/label"
        },
        "value": {
          "allOf": [
            {
              "$ref": "#/$defs/text"
            },
            {
              "maxLength": 2048
            }
          ]
        }
      }
    },
    "addressPart": {
      "allOf": [
        {
          "$ref": "#/$defs/text"
        },
        {
          "maxLength": 200
        }
      ]
    },
    "addressEntry": {
      "type": "object",
      "required": [
        "label"
      ],
      "additionalProperties": false,
      "properties": {
        "label": {
          "$ref": "#/$defs/label"
        },
        "street": {
          "$ref": "#/$defs/addressStreet"
        },
        "city": {
          "$ref": "#/$defs/addressPart"
        },
        "state": {
          "$ref": "#/$defs/addressPart"
        },
        "postalCode": {
          "$ref": "#/$defs/addressPart"
        },
        "country": {
          "$ref": "#/$defs/addressPart"
        },
        "isoCountryCode": {
          "$ref": "#/$defs/countryCode"
        }
      }
    },
    "birthday": {
      "oneOf": [
        {
          "type": "null"
        },
        {
          "type": "object",
          "required": [
            "month",
            "day"
          ],
          "additionalProperties": false,
          "properties": {
            "month": {
              "type": "integer",
              "minimum": 1,
              "maximum": 12
            },
            "day": {
              "type": "integer",
              "minimum": 1,
              "maximum": 31
            },
            "year": {
              "oneOf": [
                {
                  "type": "null"
                },
                {
                  "type": "integer",
                  "minimum": 1900,
                  "maximum": 9999
                }
              ]
            }
          }
        }
      ]
    },
    "contact": {
      "oneOf": [
        {
          "$ref": "#/$defs/newContact"
        },
        {
          "$ref": "#/$defs/existingContact"
        }
      ]
    },
    "newContact": {
      "type": "object",
      "required": [
        "id",
        "contactType"
      ],
      "additionalProperties": false,
      "properties": {
        "id": {
          "$ref": "#/$defs/newId"
        },
        "contactType": {
          "enum": [
            "person",
            "organization"
          ]
        },
        "firstName": {
          "$ref": "#/$defs/personName"
        },
        "lastName": {
          "$ref": "#/$defs/personName"
        },
        "organization": {
          "$ref": "#/$defs/organizationName"
        },
        "phoneNumbers": {
          "type": "array",
          "maxItems": 50,
          "items": {
            "$ref": "#/$defs/phoneEntry"
          }
        },
        "emailAddresses": {
          "type": "array",
          "maxItems": 50,
          "items": {
            "$ref": "#/$defs/emailEntry"
          }
        },
        "physicalAddresses": {
          "type": "array",
          "maxItems": 50,
          "items": {
            "$ref": "#/$defs/addressEntry"
          }
        },
        "urlAddresses": {
          "type": "array",
          "maxItems": 50,
          "items": {
            "$ref": "#/$defs/urlEntry"
          }
        },
        "birthday": {
          "$ref": "#/$defs/birthday"
        },
        "notes": {
          "$ref": "#/$defs/notes"
        },
        "isFavorite": {
          "$ref": "#/$defs/ignored"
        },
        "createdAt": {
          "$ref": "#/$defs/ignored"
        },
        "updatedAt": {
          "$ref": "#/$defs/ignored"
        }
      }
    },
    "existingContact": {
      "type": "object",
      "required": [
        "id",
        "importType"
      ],
      "additionalProperties": false,
      "properties": {
        "id": {
          "$ref": "#/$defs/uuid"
        },
        "importType": {
          "$ref": "#/$defs/importType"
        },
        "contactType": {
          "enum": [
            "person",
            "organization"
          ]
        },
        "firstName": {
          "$ref": "#/$defs/ignored"
        },
        "lastName": {
          "$ref": "#/$defs/ignored"
        },
        "organization": {
          "$ref": "#/$defs/organizationName"
        },
        "phoneNumbers": {
          "type": "array",
          "maxItems": 50,
          "items": {
            "$ref": "#/$defs/phoneEntry"
          }
        },
        "emailAddresses": {
          "type": "array",
          "maxItems": 50,
          "items": {
            "$ref": "#/$defs/emailEntry"
          }
        },
        "physicalAddresses": {
          "type": "array",
          "maxItems": 50,
          "items": {
            "$ref": "#/$defs/addressEntry"
          }
        },
        "urlAddresses": {
          "type": "array",
          "maxItems": 50,
          "items": {
            "$ref": "#/$defs/urlEntry"
          }
        },
        "birthday": {
          "$ref": "#/$defs/birthday"
        },
        "notes": {
          "$ref": "#/$defs/notes"
        },
        "isFavorite": {
          "$ref": "#/$defs/ignored"
        },
        "createdAt": {
          "$ref": "#/$defs/ignored"
        },
        "updatedAt": {
          "$ref": "#/$defs/ignored"
        }
      }
    },
    "deet": {
      "type": "object",
      "required": [
        "id",
        "contactId",
        "key",
        "value"
      ],
      "additionalProperties": false,
      "properties": {
        "id": {
          "$ref": "#/$defs/rowLabel"
        },
        "contactId": {
          "$ref": "#/$defs/contactRef"
        },
        "relationshipId": {
          "type": "null"
        },
        "key": {
          "$ref": "#/$defs/deetKey"
        },
        "value": {
          "$ref": "#/$defs/deetValue"
        },
        "parentDeetId": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "$ref": "#/$defs/rowLabel"
            }
          ]
        },
        "sourceLinkId": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "$ref": "#/$defs/uuid"
            }
          ]
        },
        "source": {
          "$ref": "#/$defs/ignored"
        },
        "createdAt": {
          "$ref": "#/$defs/ignored"
        },
        "updatedAt": {
          "$ref": "#/$defs/ignored"
        },
        "archivedAt": {
          "$ref": "#/$defs/ignored"
        }
      }
    },
    "tag": {
      "type": "object",
      "required": [
        "id",
        "name"
      ],
      "additionalProperties": false,
      "properties": {
        "id": {
          "$ref": "#/$defs/rowLabel"
        },
        "name": {
          "$ref": "#/$defs/name50"
        },
        "createdAt": {
          "$ref": "#/$defs/ignored"
        },
        "updatedAt": {
          "$ref": "#/$defs/ignored"
        }
      }
    },
    "group": {
      "type": "object",
      "required": [
        "id",
        "name"
      ],
      "additionalProperties": false,
      "properties": {
        "id": {
          "$ref": "#/$defs/rowLabel"
        },
        "name": {
          "$ref": "#/$defs/name50"
        },
        "parentGroupId": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "$ref": "#/$defs/rowLabel"
            }
          ]
        },
        "createdAt": {
          "$ref": "#/$defs/ignored"
        },
        "updatedAt": {
          "$ref": "#/$defs/ignored"
        }
      }
    },
    "selfProfile": {
      "type": "object",
      "required": [
        "importType"
      ],
      "additionalProperties": false,
      "properties": {
        "id": {
          "$ref": "#/$defs/ignored"
        },
        "importType": {
          "$ref": "#/$defs/importType"
        },
        "firstName": {
          "$ref": "#/$defs/ignored"
        },
        "lastName": {
          "$ref": "#/$defs/ignored"
        },
        "organization": {
          "$ref": "#/$defs/organizationName"
        },
        "bio": {
          "allOf": [
            {
              "$ref": "#/$defs/text"
            },
            {
              "maxLength": 500
            }
          ]
        },
        "contactId": {
          "$ref": "#/$defs/ignored"
        },
        "createdAt": {
          "$ref": "#/$defs/ignored"
        },
        "updatedAt": {
          "$ref": "#/$defs/ignored"
        }
      }
    },
    "selfDeet": {
      "type": "object",
      "required": [
        "id",
        "key",
        "value"
      ],
      "additionalProperties": false,
      "properties": {
        "id": {
          "$ref": "#/$defs/rowLabel"
        },
        "key": {
          "$ref": "#/$defs/deetKey"
        },
        "value": {
          "$ref": "#/$defs/deetValue"
        },
        "parentDeetId": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "$ref": "#/$defs/rowLabel"
            }
          ]
        },
        "visibility": {
          "enum": [
            "always",
            "ask",
            "never"
          ]
        },
        "version": {
          "$ref": "#/$defs/ignored"
        },
        "notifySubscribers": {
          "$ref": "#/$defs/ignored"
        },
        "deetSource": {
          "$ref": "#/$defs/ignored"
        },
        "createdAt": {
          "$ref": "#/$defs/ignored"
        },
        "updatedAt": {
          "$ref": "#/$defs/ignored"
        }
      }
    },
    "cardVisibilityConfig": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "show_set_name": {
          "type": "boolean"
        },
        "show_deet_keys": {
          "type": "boolean"
        },
        "show_deet_values": {
          "type": "boolean"
        }
      }
    },
    "deetSet": {
      "oneOf": [
        {
          "$ref": "#/$defs/newDeetSet"
        },
        {
          "$ref": "#/$defs/existingDeetSet"
        }
      ]
    },
    "newDeetSet": {
      "type": "object",
      "required": [
        "id",
        "name"
      ],
      "additionalProperties": false,
      "properties": {
        "id": {
          "$ref": "#/$defs/newId"
        },
        "name": {
          "$ref": "#/$defs/name50"
        },
        "description": {
          "allOf": [
            {
              "$ref": "#/$defs/text"
            },
            {
              "maxLength": 140
            }
          ]
        },
        "liveSyncDefault": {
          "enum": [
            "always",
            "ask",
            "never"
          ]
        },
        "cardVisibilityConfig": {
          "$ref": "#/$defs/cardVisibilityConfig"
        },
        "memberSelfDeetIds": {
          "type": "array",
          "maxItems": 200,
          "items": {
            "$ref": "#/$defs/rowLabel"
          }
        },
        "isDefault": {
          "$ref": "#/$defs/ignored"
        },
        "defaultKind": {
          "$ref": "#/$defs/ignored"
        },
        "createdAt": {
          "$ref": "#/$defs/ignored"
        },
        "updatedAt": {
          "$ref": "#/$defs/ignored"
        }
      }
    },
    "existingDeetSet": {
      "type": "object",
      "required": [
        "id",
        "importType"
      ],
      "additionalProperties": false,
      "properties": {
        "id": {
          "$ref": "#/$defs/uuid"
        },
        "importType": {
          "$ref": "#/$defs/importType"
        },
        "name": {
          "$ref": "#/$defs/name50"
        },
        "description": {
          "allOf": [
            {
              "$ref": "#/$defs/text"
            },
            {
              "maxLength": 140
            }
          ]
        },
        "liveSyncDefault": {
          "enum": [
            "always",
            "ask",
            "never"
          ]
        },
        "cardVisibilityConfig": {
          "$ref": "#/$defs/cardVisibilityConfig"
        },
        "memberSelfDeetIds": {
          "type": "array",
          "maxItems": 200,
          "items": {
            "$ref": "#/$defs/rowLabel"
          }
        },
        "isDefault": {
          "$ref": "#/$defs/ignored"
        },
        "defaultKind": {
          "$ref": "#/$defs/ignored"
        },
        "createdAt": {
          "$ref": "#/$defs/ignored"
        },
        "updatedAt": {
          "$ref": "#/$defs/ignored"
        }
      }
    },
    "addressStreet": {
      "type": "string",
      "maxLength": 500,
      "pattern": "^[^\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F-\\u009F\\u202A-\\u202E\\u2066-\\u2069]*$"
    },
    "organizationName": {
      "allOf": [
        {
          "$ref": "#/$defs/text"
        },
        {
          "maxLength": 100
        }
      ]
    },
    "countryCode": {
      "allOf": [
        {
          "$ref": "#/$defs/text"
        },
        {
          "maxLength": 12
        }
      ]
    }
  }
}
