PDPArchive Calendar Event schema
{
"$id": "https://id.schemas.pub/o/DTI/PDPArchive/event",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Schema for Personal Data Portability Archive (pdparchive) Calendar Event",
"description": "A JSCalendar Event object as defined in RFC 8984, extended with the calendarIds property from JMAP for Calendars.",
"type": "object",
"required": ["@type", "uid", "updated", "calendarIds"],
"$defs": {
"LocalDateTime": {
"type": "string",
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$",
"$comment": "ISO 8601 date-time with no UTC offset; interpreted in the timeZone property"
},
"participant": {
"type": "object",
"properties": {
"@type": {
"type": "string",
"const": "Participant"
},
"name": {
"type": "string"
},
"email": {
"type": "string",
"format": "email"
},
"sendTo": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"kind": {
"type": "string",
"enum": ["individual", "group", "resource", "location"]
},
"roles": {
"type": "object",
"minProperties": 1,
"additionalProperties": {
"type": "boolean"
}
},
"participationStatus": {
"type": "string",
"enum": ["needs-action", "accepted", "declined", "tentative", "delegated"]
},
"participationComment": {
"type": "string"
},
"expectReply": {
"type": "boolean"
},
"delegatedTo": {
"type": "object",
"additionalProperties": {
"type": "boolean"
}
},
"delegatedFrom": {
"type": "object",
"additionalProperties": {
"type": "boolean"
}
},
"memberOf": {
"type": "object",
"additionalProperties": {
"type": "boolean"
}
}
}
},
"location": {
"type": "object",
"properties": {
"@type": {
"type": "string",
"const": "Location"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"coordinates": {
"description": "Geo URI as defined in RFC 5870",
"type": "string",
"format": "uri"
},
"timeZone": {
"type": "string"
},
"relativeTo": {
"type": "string",
"enum": ["start", "end"]
},
"links": {
"type": "object",
"additionalProperties": {
"$ref": "https://id.schemas.pub/o/DTI/PDPArchive/link"
}
}
}
},
"alert": {
"type": "object",
"required": ["@type", "trigger"],
"properties": {
"@type": {
"type": "string",
"const": "Alert"
},
"trigger": {
"oneOf": [
{
"description": "Offset-based trigger relative to event start or end",
"type": "object",
"required": ["@type", "offset"],
"properties": {
"@type": {
"type": "string",
"const": "OffsetTrigger"
},
"offset": {
"description": "ISO 8601 duration (may be negative for before-start alerts)",
"type": "string"
},
"relativeTo": {
"type": "string",
"enum": ["start", "end"]
}
}
},
{
"description": "Absolute date-time trigger",
"type": "object",
"required": ["@type", "when"],
"properties": {
"@type": {
"type": "string",
"const": "AbsoluteTrigger"
},
"when": {
"type": "string",
"format": "date-time"
}
}
}
]
},
"acknowledged": {
"type": "string",
"format": "date-time"
},
"action": {
"type": "string",
"enum": ["display", "email", "uri"]
}
}
},
"recurrenceRule": {
"description": "Recurrence rule as defined in RFC 8984 section 4.3.2",
"type": "object",
"required": ["frequency"],
"properties": {
"@type": {
"type": "string",
"const": "RecurrenceRule"
},
"frequency": {
"type": "string",
"enum": ["secondly", "minutely", "hourly", "daily", "weekly", "monthly", "yearly"]
},
"interval": {
"type": "integer",
"minimum": 1
},
"rscale": {
"type": "string"
},
"skip": {
"type": "string",
"enum": ["omit", "backward", "forward"]
},
"firstDayOfWeek": {
"type": "string",
"enum": ["mo", "tu", "we", "th", "fr", "sa", "su"]
},
"byDay": {
"type": "array",
"items": {
"type": "object",
"required": ["day"],
"properties": {
"@type": { "type": "string", "const": "NDay" },
"day": {
"type": "string",
"enum": ["mo", "tu", "we", "th", "fr", "sa", "su"]
},
"nthOfPeriod": {
"type": "integer"
}
}
}
},
"byMonthDay": {
"type": "array",
"items": { "type": "integer" }
},
"byMonth": {
"type": "array",
"items": { "type": "string" }
},
"byYearDay": {
"type": "array",
"items": { "type": "integer" }
},
"byWeekNo": {
"type": "array",
"items": { "type": "integer" }
},
"byHour": {
"type": "array",
"items": { "type": "integer", "minimum": 0, "maximum": 23 }
},
"byMinute": {
"type": "array",
"items": { "type": "integer", "minimum": 0, "maximum": 59 }
},
"bySecond": {
"type": "array",
"items": { "type": "integer", "minimum": 0, "maximum": 60 }
},
"bySetPosition": {
"type": "array",
"items": { "type": "integer" }
},
"count": {
"type": "integer",
"minimum": 1
},
"until": {
"description": "LocalDateTime giving the last allowed occurrence",
"$ref": "#/$defs/LocalDateTime"
}
}
}
},
"properties": {
"@type": {
"type": "string",
"const": "Event"
},
"uid": {
"description": "Globally unique identifier for this event; stable across recurrences",
"type": "string"
},
"id": {
"description": "JMAP server-set ID for the event",
"type": "string"
},
"created": {
"type": "string",
"format": "date-time"
},
"updated": {
"description": "Last-modified timestamp; MUST be included for synchronization",
"type": "string",
"format": "date-time"
},
"prodId": {
"type": "string"
},
"sequence": {
"description": "Monotonically increasing revision counter; SHOULD be included if available",
"type": "integer",
"minimum": 0
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"descriptionContentType": {
"type": "string"
},
"start": {
"$ref": "#/$defs/LocalDateTime"
},
"timeZone": {
"description": "IANA time zone identifier for the start time",
"type": "string"
},
"duration": {
"description": "ISO 8601 duration string",
"type": "string"
},
"status": {
"type": "string",
"enum": ["confirmed", "cancelled", "tentative"]
},
"priority": {
"type": "integer",
"minimum": 0,
"maximum": 9
},
"privacy": {
"type": "string",
"enum": ["public", "private", "secret"]
},
"freeBusyStatus": {
"type": "string",
"enum": ["free", "busy"]
},
"color": {
"description": "CSS color value for display purposes",
"type": "string"
},
"calendarIds": {
"type": "object",
"minProperties": 1,
"additionalProperties": {
"type": "boolean"
}
},
"participants": {
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/participant"
}
},
"locations": {
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/location"
}
},
"virtualLocations": {
"description": "Maps virtual location IDs to VirtualLocation objects (e.g. video conference links)",
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"@type": { "type": "string", "const": "VirtualLocation" },
"name": { "type": "string" },
"description": { "type": "string" },
"uri": { "type": "string", "format": "uri" }
}
}
},
"links": {
"description": "Maps link IDs to Link objects (attachments, references)",
"type": "object",
"additionalProperties": {
"$ref": "https://id.schemas.pub/o/DTI/PDPArchive/link"
}
},
"keywords": {
"type": "object",
"additionalProperties": {
"type": "boolean"
}
},
"categories": {
"type": "object",
"additionalProperties": {
"type": "boolean"
}
},
"alerts": {
"description": "Maps alert IDs to Alert objects",
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/alert"
}
},
"useDefaultAlerts": {
"type": "boolean"
},
"recurrenceRules": {
"type": "array",
"items": {
"$ref": "#/$defs/recurrenceRule"
}
},
"excludedRecurrenceRules": {
"type": "array",
"items": {
"$ref": "#/$defs/recurrenceRule"
}
},
"recurrenceOverrides": {
"type": "object",
"additionalProperties": {
"type": "object"
}
}
}
}
View source