PDPArchive Task schema
{
"$id": "https://id.schemas.pub/o/DTI/PDPArchive/task",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Schema for Personal Data Portability Archive (pdparchive) Task",
"description": "A JSCalendar Task object as defined in RFC 8984.",
"type": "object",
"required": ["@type", "uid", "updated"],
"$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" }
}
},
"alert": {
"type": "object",
"required": ["@type", "trigger"],
"properties": {
"@type": { "type": "string", "const": "Alert" },
"trigger": {
"oneOf": [
{
"type": "object",
"required": ["@type", "offset"],
"properties": {
"@type": { "type": "string", "const": "OffsetTrigger" },
"offset": { "type": "string" },
"relativeTo": { "type": "string", "enum": ["start", "end"] }
}
},
{
"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"] }
}
},
"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" }
}
}
},
"recurrenceRule": {
"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 },
"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" } },
"count": { "type": "integer", "minimum": 1 },
"until": {
"description": "LocalDateTime giving the last allowed occurrence",
"$ref": "#/$defs/LocalDateTime"
}
}
}
},
"properties": {
"@type": {
"type": "string",
"const": "Task"
},
"uid": {
"type": "string"
},
"id": {
"description": "JMAP server-set ID for the task",
"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": {
"type": "integer",
"minimum": 0
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"descriptionContentType": {
"type": "string"
},
"start": {
"$ref": "#/$defs/LocalDateTime"
},
"due": {
"$ref": "#/$defs/LocalDateTime"
},
"timeZone": {
"description": "IANA time zone identifier for the start and due times",
"type": "string"
},
"estimatedDuration": {
"description": "ISO 8601 duration string estimating time to complete",
"type": "string"
},
"percentComplete": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"progress": {
"description": "Task progress status per RFC 8984",
"type": "string",
"enum": ["needs-action", "in-progress", "completed", "failed", "cancelled"]
},
"progressUpdated": {
"type": "string",
"format": "date-time"
},
"priority": {
"type": "integer",
"minimum": 0,
"maximum": 9
},
"privacy": {
"type": "string",
"enum": ["public", "private", "secret"]
},
"color": {
"type": "string"
},
"participants": {
"type": "object",
"additionalProperties": { "$ref": "#/$defs/participant" }
},
"locations": {
"description": "Maps location IDs to Location objects",
"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" }
}
}
},
"relatedTo": {
"description": "Maps related object UIDs to Relation objects describing the relationship",
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"@type": { "type": "string", "const": "Relation" },
"relation": {
"description": "Maps relation type (e.g. parent, child, first, next) to true",
"type": "object",
"additionalProperties": { "type": "boolean" }
}
}
}
},
"links": {
"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": {
"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