Raw schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Event title/summary applied to every generated instance. Required, up to 200 characters.",
"examples": [
"Weekly team standup"
]
},
"description": {
"type": "string",
"description": "Longer free-text description applied to every generated instance. Up to 2000 characters."
},
"location": {
"type": "object",
"description": "Location applied to every generated instance. Set $type to 'Address' for physical (with line1-3, postalCode, countryCode) or 'OnlineLocation' for virtual (with url, notes).",
"properties": {
"$type": {
"type": "string",
"enum": [
"Address",
"OnlineLocation"
],
"description": "Location type discriminator"
},
"line1": {
"type": "string",
"description": "First line of the street address (Address type). At least one of line1-3/postalCode is required when $type is 'Address'.",
"examples": [
"221B Baker Street"
]
},
"line2": {
"type": "string",
"description": "Second line of the street address (Address type), e.g. building or suite."
},
"line3": {
"type": "string",
"description": "Third line of the street address (Address type)."
},
"postalCode": {
"type": "string",
"description": "Postal or ZIP code (Address type). Up to 20 characters.",
"examples": [
"NW1 6XE"
]
},
"countryCode": {
"type": "string",
"description": "Country code for the address (Address type).",
"examples": [
"GB"
]
},
"url": {
"type": "string",
"description": "URL for online locations (OnlineLocation type). Must be an absolute http/https URL.",
"examples": [
"https://meet.google.com/abc-defg-hij"
]
},
"notes": {
"type": "string",
"description": "Notes about the location, e.g. parking instructions or a meeting passcode. Up to 500 characters for OnlineLocation."
}
},
"required": [
"$type"
]
},
"startTime": {
"type": "string",
"description": "Time of day each instance starts, in HH:mm:ss format (local to timezone). Omit for an event with no fixed time.",
"examples": [
"09:00:00"
]
},
"duration": {
"type": "string",
"description": "Length of each instance, in ISO 8601 duration format.",
"examples": [
"PT30M"
]
},
"isAllDay": {
"type": "boolean",
"description": "True if generated instances are all-day events with no specific start/end time; false for timed instances.",
"examples": [
false
]
},
"notes": {
"type": "string",
"description": "Freeform notes applied to every generated instance. Up to 5000 characters."
},
"cronExpression": {
"type": "string",
"description": "Recurrence interval, NOT a cron expression despite the field name. Format is 'N Unit' where N is a positive integer and Unit is one of Day, Week, Month, Year (case-sensitive), e.g. '1 Day', '2 Week', '1 Month', '1 Year'. Instances recur every N of the given unit starting from startDate.",
"examples": [
"1 Week"
]
},
"startDate": {
"type": "string",
"description": "Anchor date the recurrence is calculated from, YYYY-MM-DD format. The first instance falls on this date (subject to startTime/timezone); later instances are startDate plus multiples of the cronExpression interval.",
"examples": [
"2026-08-03"
]
},
"endDate": {
"type": "string",
"description": "Last date on which instances may occur, YYYY-MM-DD format. Omit for no end date (bounded only by maxOccurrences, if set).",
"examples": [
"2026-12-31"
]
},
"maxOccurrences": {
"type": "integer",
"description": "Maximum number of instances to generate before recurrence stops. Omit for unlimited (bounded only by endDate, if set).",
"examples": [
20
]
},
"timezone": {
"type": [
"string",
"null"
],
"description": "IANA timezone id (e.g. 'Europe/London') that startTime is in. Each generated occurrence's UTC instant respects this zone's DST.",
"examples": [
"Europe/London"
]
}
},
"required": [
"title",
"cronExpression"
],
"examples": [
{
"title": "Weekly team standup",
"description": "Sync on sprint progress",
"startTime": "09:00:00",
"duration": "PT30M",
"isAllDay": false,
"notes": "Bring your laptop",
"cronExpression": "1 Week",
"startDate": "2026-08-03",
"endDate": "2026-12-31",
"maxOccurrences": 20,
"timezone": "Europe/London"
}
]
}