Outlook 日历 REST API 参考(版本 2.0)
适用于:Exchange Online | Office 365 | Hotmail.com | Live.com | MSN.com | Outlook.com | Passport.com** **
日历 API 可用于访问 Office 365 中的 Azure Active Directory 保护的事件、日历和日历组数据,以及特定于以下域中的 Microsoft 帐户的类似数据:Hotmail.com、Live.com、MSN.com、Outlook .com 和 Passport.com。
备注
- 例外的是查找会议时间的 API,它仅适用于 Office 365 邮箱(在 Azure AD 上)而不适用于 Microsoft 帐户。
- 为简便起见,本文的其余部分使用 Outlook.com 来指代这些 Microsoft 帐户域。
对 API 的 v2.0 不感兴趣? 在左侧的目录中,转到 Office 365 REST API 参考部分,然后选择所需的版本。
所有日历 API 操作
事件操作
事件表示用户日历上的约会或会议。 事件可以是一个系列主事件(定期事件)、一个执行、一个单个实例或一次异常。
日历操作
日历用作事件容器。 用户可以拥有多个日历。 在 Office 365 中,每个日历都可以分配给一个日历组。
日历组操作
日历组是组织多个日历的一种方式。 用户可以将多个日历添加到 Outlook 或 Outlook Web 应用中的单个日历组中。 这使用户更容易快速查看此组内的所有日历。
备注
Outlook.com 仅支持可通过 ../me/calendars
快捷方式访问的默认日历组。 不能删除该日历组,或者创建另一个日历组。
另请参阅
使用日历 REST API
身份验证
像其他 Outlook REST API 那样,对 Calendar API 的每个请求,都应该包含有效的访问令牌。 获取访问令牌需要注册和识别应用,并获得相应的授权。
你可以了解更多有关简化注册和授权选项的信息。 在 Calendar API 中继续执行特定操作时,请记住这一点。
访问共享日历的范围
Office 365 和 Outlook.com 日历支持共享。 创建日历的用户可以与其他用户共享日历。 要访问与该用户已共享日历,以下范围是必需项:
- 对于读取访问:
https://outlook.office.com/calendars.read.shared
- 对于读取/写入访问:
https://outlook.office.com/calendars.readwrite.shared
API 版本
所有版本的 Outlook REST API 都支持日历 REST API。 功能可能因具体版本而异。
目标用户
始终代表当前用户执行 Calendar API 请求。
有关 Outlook REST API 所有子集所共有的更多信息,请参阅 使用 Outlook REST API。
获取事件
获取事件集合或事件。
事件正文可以是文本或 HTML。
你可以使用 Prefer: outlook.body-content-type
标头指定 GET 请求的正文属性中所返回的所需的格式:
- 指定
Prefer: outlook.body-content-type="text"
获取以文本格式返回的事件正文。 - 指定
Prefer: outlook.body-content-type="html"
,或者直接跳过标头,以 HTML 格式返回事件正文。
如果你指定了任一标头,则响应将包含相应的 Preference-Applied
标头作为确认:
- 对于文本格式请求:
Preference-Applied: outlook.body-content-type="text"
- 对于 HTML 格式请求:
Preference-Applied: outlook.body-content-type="html"
所有获取日历事件的操作都可以使用 Prefer: outlook.timezone HTTP 标头来指定响应中开始和结束时间的时区。 例如,下面的 Prefer: outlook.timezone 标头将响应中的开始和结束时间设置为东部标准时间。
Prefer: outlook.timezone="Eastern Standard Time"
如果未指定 Prefer: outlook.timezone 标头,则返回用 UTC 表示的响应中的开始和结束时间。 请参阅此列表了解支持的时区名称。
可以使用_事件_资源中的 OriginalStartTimeZone 和 OriginalEndTimeZone 属性来查找创建事件时使用的时区。
获取日历视图
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.read
- wl.calendars
- wl.contacts_日历
从用户的主日历 (../me/calendarview
) 或其他日历中,获取由时间范围定义的日历视图中事件的执行、异常和单一实例。
GET https://outlook.office.com/api/v2.0/me/calendarview?startDateTime={start_datetime}&endDateTime={end_datetime}
GET https://outlook.office.com/api/v2.0/me/calendars/{calendar_id}/calendarview?startDateTime={start_datetime}&endDateTime={end_datetime}
必需的参数 | 类型 | 说明 |
---|---|---|
标头参数 | ||
Prefer: | outlook.timezone | 事件在响应中的默认时区。 |
URL 参数 | ||
calendar_id | 字符串 | 日历 ID(如果从特定日历获取日历视图)。 |
start_datetime | datetimeoffset | 事件开始的日期和时间。 |
end_datetime | datetimeoffset | 事件结束的日期和时间。 |
使用 Prefer: outlook.timezone 标头来指定响应中事件开始和结束时间要使用的时区。 如果该事件是在不同的时区中创建的,则开始和结束时间将调整到指定的时区。
请参阅此列表了解支持的时区名称。 如果未指定 Prefer: outlook.timezone 标头,则返回用 UTC 表示的开始和结束时间。
备注
默认情况下,响应中的每个事件都包含其所有属性。 使用 $select
只指定那些你需要的最佳性能的属性。 始终返回该 ID 属性。 请参阅 OData 查询参数 了解筛选、排序和分页参数。
例如,获取 10 月份的日历视图,仅返回每个事件的“主题”属性。 假设 Prefer: outlook.timezone 标头未包含在请求中,时区则为 UTC。
GET https://outlook.office.com/api/v2.0/me/calendarview?startDateTime=2014-10-01T01:00:00&endDateTime=2014-10-31T23:00:00&$select=Subject
响应类型
指定时间范围内的扩展事件。
获取系列主事件和单个事件
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.read
- wl.calendars
- wl.contacts_日历
从用户的主日历 (../me/events
) 或其他日历获取系列主事件和单个实例事件的集合。 要获取扩展的事件实例,可以获取日历视图,或者获取事件的实例。
GET https://outlook.office.com/api/v2.0/me/events
GET https://outlook.office.com/api/v2.0/me/calendars/{calendar_id}/events
必需的参数 | 类型 | 说明 |
---|---|---|
标头参数 | ||
Prefer: | outlook.timezone | 事件在响应中的默认时区。 |
URL 参数 | ||
calendar_id | 字符串 | 日历 ID(如果从特定日历获取事件)。 |
使用 Prefer: outlook.timezone 标头来指定响应中事件开始和结束时间要使用的时区。 如果该事件是在不同的时区中创建的,则开始和结束时间将调整到指定的时区。
请参阅此列表了解支持的时区名称。 如果未指定 Prefer: outlook.timezone 标头,则返回用 UTC 表示的开始和结束时间。
备注
响应中的每个事件都包含其所有属性。 使用 $select
只指定那些你需要的最佳性能的属性。 始终返回该 ID 属性。 请参阅下个示例。 请参阅 OData 查询参数 了解筛选、排序和分页参数。
以下示例显示如何使用 $select
来指定只返回响应中每个事件的主题、组织者、开始和结束属性。 请参阅 获取事件 (REST) 中的第一个示例响应,了解当你不使用 $select
时,某事件返回的完整属性列表。
示例请求
GET https://outlook.office.com/api/v2.0/me/events?$select=Subject,Organizer,Start,End
示例响应
{
"@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/Events(Subject,Organizer,Start,End)",
"value": [
{
"@odata.id": "https://outlook.office.com/api/beta/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGI28tEyDAAA=')",
"@odata.etag": "W/\"nfZyf7VcrEKLNoU37KWlkQAA/LpDWw==\"",
"Id": "AAMkAGI28tEyDAAA=",
"Subject": "Scrum",
"Start": {
"DateTime": "2015-11-02T17:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2015-11-02T17:30:00",
"TimeZone": "Pacific Standard Time"
},
"Organizer": {
"EmailAddress": {
"Name": "user0TestUser",
"Address": "user0@a830edad9050849NDA1.onmicrosoft.com"
}
}
},
{
"@odata.id": "https://outlook.office.com/api/beta/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGI28tEyCAAA=')",
"@odata.etag": "W/\"nfZyf7VcrEKLNoU37KWlkQAA/LpDWg==\"",
"Id": "AAMkAGI28tEyCAAA=",
"Subject": "team lunch",
"Start": {
"DateTime": "2015-11-02T00:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2015-11-03T00:00:00",
"TimeZone": "Pacific Standard Time"
},
"Organizer": {
"EmailAddress": {
"Name": "user0TestUser",
"Address": "user0@a830edad9050849NDA1.onmicrosoft.com"
}
}
},
{
"@odata.id": "https://outlook.office.com/api/beta/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGI2ADTG93AAA=')",
"@odata.etag": "W/\"nfZyf7VcrEKLNoU37KWlkQAAA0x49w==\"",
"Id": "AAMkAGI2G93AAA=",
"Subject": "Weekly Meeting on Contoso Project",
"Start": {
"DateTime": "2014-10-13T21:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2014-10-13T22:00:00",
"TimeZone": "Pacific Standard Time"
},
"Organizer": {
"EmailAddress": {
"Name": "Alex D",
"Address": "alexd@a830edad9050849NDA1.onmicrosoft.com"
}
}
},
{
"@odata.id": "https://outlook.office.com/api/beta/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGI2TG92AAA=')",
"@odata.etag": "W/\"nfZyf7VcrEKLNoU37KWlkQAAA0x49g==\"",
"Id": "AAMkAGI2TG92AAA=",
"Subject": "Daily Team Meeting",
"Start": {
"DateTime": "2014-10-13T18:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2014-10-13T18:30:00",
"TimeZone": "Pacific Standard Time"
},
"Organizer": {
"EmailAddress": {
"Name": "Alex D",
"Address": "alexd@a830edad9050849NDA1.onmicrosoft.com"
}
}
},
{
"@odata.id": "https://outlook.office.com/api/beta/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGI2TG91AAA=')",
"@odata.etag": "W/\"nfZyf7VcrEKLNoU37KWlkQAAA0x47Q==\"",
"Id": "AAMkAGI2TG91AAA=",
"Subject": "Rob:Alex 1:1",
"Start": {
"DateTime": "2014-10-15T16:30:00",
"TimeZone": "Pacific Standard Time"
},
"End": "2014-10-15T17:30:00Z",
"Organizer": {
"EmailAddress": {
"Name": "Alex D",
"Address": "alexd@a830edad9050849NDA1.onmicrosoft.com"
}
}
},
{
"@odata.id": "https://outlook.office.com/api/beta/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGI2TG90AAA=')",
"@odata.etag": "W/\"nfZyf7VcrEKLNoU37KWlkQAAA0x46g==\"",
"Id": "AAMkAGI2TG90AAA=",
"Subject": "Thanksgiving Holiday",
"Start": {
"DateTime": "2015-11-26T00:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2015-11-27T00:00:00",
"TimeZone": "Pacific Standard Time"
},
"Organizer": {
"EmailAddress": {
"Name": "Alex D",
"Address": "alexd@a830edad9050849NDA1.onmicrosoft.com"
}
}
},
{
"@odata.id": "https://outlook.office.com/api/beta/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGI2TG9zAAA=')",
"@odata.etag": "W/\"nfZyf7VcrEKLNoU37KWlkQAAA0x46Q==\"",
"Id": "AAMkAGI2TG9zAAA=",
"Subject": "Thanksgiving Holiday",
"Start": {
"DateTime": "2014-11-27T00:00:00"
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2014-11-28T00:00:00",
"TimeZone": "Pacific Standard Time"
},
"Organizer": {
"EmailAddress": {
"Name": "Alex D",
"Address": "alexd@a830edad9050849NDA1.onmicrosoft.com"
}
}
},
{
"@odata.id": "https://outlook.office.com/api/beta/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGI2TG9yAAA=')",
"@odata.etag": "W/\"nfZyf7VcrEKLNoU37KWlkQAAA0x49Q==\"",
"Id": "AAMkAGI2TG9yAAA=",
"Subject": "New Year's Day Holiday",
"Start": {
"DateTime": "2015-01-01T00:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2015-01-02T00:00:00",
"TimeZone": "Pacific Standard Time"
},
"Organizer": {
"EmailAddress": {
"Name": "Alex D",
"Address": "alexd@a830edad9050849NDA1.onmicrosoft.com"
}
}
},
{
"@odata.id": "https://outlook.office.com/api/beta/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGI2TG9xAAA=')",
"@odata.etag": "W/\"nfZyf7VcrEKLNoU37KWlkQAAA0x45w==\"",
"Id": "AAMkAGI2TG9xAAA=",
"Subject": "Christmas Holiday",
"Start": {
"DateTime": "2014-12-25T00:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2014-12-26T00:00:00",
"TimeZone": "Pacific Standard Time"
},
"Organizer": {
"EmailAddress": {
"Name": "Alex D",
"Address": "alexd@a830edad9050849NDA1.onmicrosoft.com"
}
}
}
]
}
获取事件实例
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.read
- wl.calendars
- wl.contacts_日历
可以获取指定时间范围内某事件的实例(执行)。 如果该事件是 SeriesMaster 类型,则会返回指定时间范围内该事件的执行和异常。
GET https://outlook.office.com/api/v2.0/me/events/{event_id}/instances?startDateTime={start_datetime}&endDateTime={end_datetime}
必需的参数 | 类型 | 说明 |
---|---|---|
标头参数 | ||
Prefer: | outlook.timezone | 事件在响应中的默认时区。 |
URL 参数 | ||
event_id | 字符串 | 字符串 |
start_datetime | datetimeoffset | 事件开始的 UTC 日期和时间。 |
end_datetime | datetimeoffset | 事件结束的 UTC 日期和时间。 |
使用 Prefer: outlook.timezone 标头来指定响应中事件开始和结束时间要使用的时区。 如果该事件是在不同的时区中创建的,则开始和结束时间将调整到指定的时区。
请参阅此列表了解支持的时区名称。 如果未指定 Prefer: outlook.timezone 标头,则返回用 UTC 表示的开始和结束时间。
响应类型
请求的事件集合。
备注
默认情况下,响应中的每个事件都包含其所有属性。 使用 $select
只指定那些你需要的最佳性能的属性。 始终返回该 ID 属性。 请参阅 OData 查询参数 了解筛选、排序和分页参数。
例如,获取 10 月份的特定事件的实例,仅包含每个实例的主题、开始和结束属性:
GET https://outlook.office.com/api/v2.0/me/events/AAMkAGE0MGM1Y2M5LWEAAA=/instances?startDateTime=2014-10-01T01:00:00Z&endDateTime=2014-10-31T23:00:00Z&$select=Subject,Start,End
获取事件
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.read
- wl.calendars
- wl.contacts_日历
通过 ID 获取事件。
GET https://outlook.office.com/api/v2.0/me/events/{event_id}
必需的参数 | 类型 | 说明 |
---|---|---|
标头参数 | ||
Prefer: | outlook.timezone | 事件在响应中的默认时区。 |
URL 参数 | ||
event_id | 字符串 | 字符串 |
使用 Prefer: outlook.timezone 标头来指定响应中事件开始和结束时间要使用的时区。 如果该事件是在不同的时区中创建的,则开始和结束时间将调整到指定的时区。
请参阅此列表了解支持的时区名称。 如果未指定 Prefer: outlook.timezone 标头,则返回用 UTC 表示的开始和结束时间。
示例请求
GET https://outlook.office.com/api/v2.0/me/events/AAMkAGI2TG93AAA=
示例响应
{
"@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/Events/$entity",
"@odata.id": "https://outlook.office.com/api/beta/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGI2TG93AAA=')",
"@odata.etag": "W/\"nfZyf7VcrEKLNoU37KWlkQAAA0x48w==\"",
"Id": "AAMkAGI2TG93AAA=",
"ChangeKey": "nfZyf7VcrEKLNoU37KWlkQAAA0x48w==",
"Categories": [],
"CreatedDateTime": "2014-10-19T23:13:47.3959685Z",
"LastModifiedDateTime": "2014-10-19T23:13:47.6772234Z",
"Subject": "Weekly Meeting on Contoso Project",
"BodyPreview": "Setting up some time to review the budget and planning on the Contoso Project",
"Body": {
"ContentType": "HTML",
"Content": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n</head>\r\n<body>\r\nSetting up some time to review the budget and planning on the Contoso Project\r\n</body>\r\n</html>\r\n"
},
"Importance": "Normal",
"HasAttachments": false,
"Start": {
"DateTime": "2014-10-13T21:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2014-10-13T22:00:00",
"TimeZone": ""Pacific Standard Time"
},
"Location": {
"DisplayName": "Alex's Office",
"Address": null
},
"ShowAs": "Busy",
"IsAllDay": false,
"IsCancelled": false,
"IsOrganizer": true,
"ResponseRequested": true,
"Type": "SeriesMaster",
"SeriesMasterId": null,
"Attendees": [
{
"EmailAddress": {
"Address": "janets@a830edad9050849NDA1.onmicrosoft.com",
"Name": "Janet Schorr"
},
"Status": {
"Response": "None",
"Time": "0001-01-01T00:00:00Z"
},
"Type": "Required"
},
{
"EmailAddress": {
"Address": "pavelb@a830edad9050849NDA1.onmicrosoft.com",
"Name": "Pavel Bansky"
},
"Status": {
"Response": "None",
"Time": "0001-01-01T00:00:00Z"
},
"Type": "Required"
}
],
"Recurrence": {
"Pattern": {
"Type": "Weekly",
"Interval": 1,
"Month": 0,
"Index": "First",
"FirstDayOfWeek": "Sunday",
"DayOfMonth": 0,
"DaysOfWeek": [
"Monday"
]
},
"RecurrenceTimeZone": "Pacific Standard Time",
"Range": {
"Type": "NoEnd",
"StartDate": "2014-10-13",
"EndDate": "2014-11-13",
"NumberOfOccurrences": 0
}
},
"OriginalEndTimeZone": "Pacific Standard Time",
"OriginalStartTimeZone": "Pacific Standard Time",
"Organizer": {
"EmailAddress": {
"Address": "alexd@a830edad9050849NDA1.onmicrosoft.com",
"Name": "Alex D"
},
"OnlineMeetingUrl": null
}
}
响应类型
请求的事件。
备注
默认情况下,响应包含事件的所有属性。 使用 $select
只指定那些你需要的最佳性能的属性。 始终返回该 ID 属性。 请参阅 OData 查询参数 了解筛选、排序和分页参数。
以下示例显示如何使用 $select
来指定只返回事件的主题、组织者、开始和结束属性。
示例请求
GET https://outlook.office.com/api/v2.0/me/events/AAMkAGI2TG93AAA=?$select=Subject,Organizer,Start,End
示例响应
{
"@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/Events/$entity",
"@odata.id": "https://outlook.office.com/api/beta/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGI2TG93AAA=')",
"@odata.etag": "W/\"nfZyf7VcrEKLNoU37KWlkQAAA0x48w==\"",
"Id": "AAMkAGI2TG93AAA=",
"Subject": "Weekly Meeting on Contoso Project",
"Start": {
"DateTime": "2014-10-13T21:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2014-10-13T22:00:00",
"TimeZone": ""Pacific Standard Time"
},
"Organizer": {
"EmailAddress": {
"Address": "alexd@a830edad9050849NDA1.onmicrosoft.com",
"Name": "Alex D"
}
}
}
同步事件
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.read
- wl.calendars
- wl.contacts_日历
从用户的主日历 (../me/calendarview
) 或其他日历同步并获取指定时间范围内新的、已更新的或已删除的事件。 一段时间范围内的这类事件集也称为日历视图。 返回的事件可能包括一个定期系列以及单个实例的执行和异常。
同步日历视图通常需要一轮两个或更多同步请求,其中每个同步请求都是 GET 调用。 要同步日历视图,请使用与你获取日历视图十分类似的 GET 方法,区别在于应包含特定的请求标头和 deltaToken 或者 skipToken(视具体情况)。
请求标头
你必须在所有同步请求中指定 "Prefer: odata.track-changes" 标头,但包含从上个同步请求返回的
skipToken
的请求除外。 在第一个响应中,查找 Preference-Applied: odata.track-changes 标头,在继续之前确认资源支持同步。 (以下是有关示例第二响应数据中skipToken
的详细信息。)可以指定 "Prefer: odata.maxpagesize={x}" 标头,以指示同步请求返回的最多事件数。
以下是日历视图中的一轮典型同步事件:
使用强制性 Prefer: odata.track-changes 标头发出初始 GET 请求。 对同步请求的初始响应始终返回 deltaToken。 (第二个 GET 请求和后续 GET 请求与第一个 GET 请求不同,不同之处在于该请求包括在前一个响应中收到的 deltaToken 或 skipToken。)
如果第一个响应返回 Preference-Applied: odata.track-changes 标头,则可以继续进行同步。
进行第二次 GET 请求。 指定 Prefer: odata.track-changes 标头和从第一个 GET 返回的 deltaToken,以确定是否有任何其他事件。 第二个请求将返回其他事件,且如果有更多可用的事件,则返回 skipToken,如果最后一个事件已经同步,则返回 deltaToken(在这种情况下可以停止)。
通过发送 GET 调用并包括前一次调用中返回的 skipToken,继续进行同步。 在再次使用 deltaToken 获得包含 @odata.deltaLink 标头的最终响应(指明同步已完成)时停止。
看一看一轮同步中的初始和后续调用的语法。
要在默认日历中同步
初始请求:
GET https://outlook.office.com/api/v2.0/{user_context}/calendarview?startDateTime={start_datetime}&endDateTime={end_datetime}
第二个请求,或后续轮次中的第一个请求:
GET https://outlook.office.com/api/v2.0/{user_context}/calendarview?startDateTime={start_datetime}&endDateTime={end_datetime}&$deltatoken={delta_token}
同一轮循中的第三个或后续请求:
GET https://outlook.office.com/api/v2.0/{user_context}/calendarview?startDateTime={start_datetime}&endDateTime={end_datetime}&$skiptoken={skip_token}
要在特定日历中同步
初始请求:
GET https://outlook.office.com/api/v2.0/{user_context}/calendars('{calendar_id}')/calendarview?startDateTime={start_datetime}&endDateTime={end_datetime}
第二个请求,或后续轮次中的第一个请求:
GET https://outlook.office.com/api/v2.0/{user_context}/calendars('{calendar_id}')/calendarview?startDateTime={start_datetime}&endDateTime={end_datetime}&$deltatoken={delta_token}
同一轮循中的第三个或后续请求:
GET https://outlook.office.com/api/v2.0/{user_context}/calendars('{calendar_id}')/calendarview?startDateTime={start_datetime}&endDateTime={end_datetime}&$skiptoken={skip_token}
参数
参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
user_context | 字符串 | 用户上下文。 可以使用值 "me" 来指示当前用户的上下文。 还可以使用 users/{upn} 的格式,其中 upn 为用户主体名称,通常是用户的电子邮件地址。 |
calendar_id | 字符串 | 日历 ID(如果从特定日历获取日历视图)。 |
start_datetime | datetimeoffset | 事件开始的日期和时间。 |
end_datetime | datetimeoffset | 事件结束的日期和时间。 |
delta_token | 字符串 | 作为前一个同步响应中 @odata.deltaLink 值的一部分返回的 deltaToken 字符串。 |
skip_token | 字符串 | 作为前一个同步响应中 @odata.nextLink 值的一部分返回的 skipToken 字符串。 |
备注
- 在初始请求中指定 "Prefer: odata.track-changes" 时,如果响应支持同步,则响应将在标头中包含 "Preference-applied: odata.track-changes"。
- 如果尝试同步不支持的资源,或者如果这不是初始同步请求,则你将不会在响应中看到 "Preference-applied" 标头。
- 可以通过更改 startdatetime 和 enddatetime 查询参数来改变更改时间窗口。
- 响应中的每个事件都包含其所有属性。
- 对于定期系列,同步响应包含定期主事件和异常事件等整个事件。
- 定期系列的实例为缩写形式,且仅包含开始和结束属性。 可以从定期主事件捕获发生事件信息的剩余部分。 有关参考信息,请参阅事件资源。
- 不能使用
$filter
、$count
、$select
、$skip
、$top
和$search
查询参数。
响应类型
指定时间范围内的扩展事件和缩略事件。
示例
以下示例显示了用于同步用户的默认日历的初始和第二个同步请求。 每个请求指定一次只返回一个完整事件:
- 初始响应返回一个事件、一个
deltaLink
和deltaToken
。 - 第二个请求使用那个
deltatoken
。 第二个响应返回一个事件、一个nextLink
和skipToken
。
要完成同步,请使用从前一个同步请求返回的 skipToken
,直到同步响应返回一个 deltaLink
和 deltaToken
,此时这一轮的同步完成。 保存 deltaToken
供下一轮同步使用。
有关更多信息,请参阅在 Outlook 日历视图中同步事件。
示例:初始请求
GET https://outlook.office.com/api/v2.0/me/calendarview?startdatetime=2015-01-01T00:00:00Z&enddatetime=2015-04-10T00:00:00Z HTTP/1.1
Authorization: Bearer <token>
Prefer: odata.track-changes
Prefer: odata.maxpagesize=1
示例初始响应数据
Preference-Applied: odata.track-changes
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/CalendarView",
"value": [
{
"@odata.id": "https://outlook.office.com/api/v2.0/Users('user0@contoso.com')/Events('asdas==')",
"@odata.etag": "W/\"L8Z+4Y4u7k+97uRKg==\"",
"Id": "AQMkANJAAAAA==",
"ChangeKey": "L8Z+AAAAARKg==",
"Categories": [
],
"DateTimeCreated": "2015-04-10T17:54:49.2725912Z",
"DateTimeLastModified": "2015-04-10T17:54:49.3038538Z",
"Subject": "Discuss the Calendar REST API",
"BodyPreview": "I think it will meet our requirements!",
"Body": {
"ContentType": "HTML",
"Content": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n</head>\r\n<body>\r\nI think it will meet our requirements!\r\n</body>\r\n</html>\r\n"
},
"Importance": "Normal",
"HasAttachments": false,
"Start": {
"DateTime": "2015-04-05T18:00:00",
"TimeZone": "Pacific Standard Time"
}
"End": {
"DateTime": "2015-04-05T19:00:00",
"TimeZone": "Pacific Standard Time"
}
"ReminderMinutesBeforeStart": "15",
"IsReminderOn": "true",
"Location": {
"DisplayName": "",
"Address": null
},
"ResponseStatus": {
"Response": "Organizer",
"Time": "0001-01-01T00:00:00Z"
},
"ShowAs": "Busy",
"IsAllDay": false,
"IsCancelled": false,
"IsOrganizer": true,
"ResponseRequested": true,
"Type": "SingleInstance",
"SeriesMasterId": null,
"Attendees": [
],
"Recurrence": null,
"OriginalEndTimeZone": "Pacific Standard Time",
"OriginalStartTimeZone": "Pacific Standard Time",
"Organizer": {
"EmailAddress": {
"Address": "user0@contoso.com",
"Name": "user0"
}
},
"iCalUId": "040000008200E9888E07599CCFA23",
"WebLink": "https://outlook.office.com/owa/?ItemID=AAAINJAAAAA%3D%3D&exvsurl=1&viewmodel=ICalendarItemDetailsViewModelFactory",
"OnlineMeetingUrl": null
}
],
"@odata.deltaLink": "https://outlook.office.com/api/v2.0/me/calendarview/?startdatetime=2015-01-01T00%3a00%3a00Z&enddatetime=2015-04-10T00%3a00%3a00Z&%24deltatoken=v2%2cH4roCAAA%3d%2c1.0%2cFalse%2cA00%2c"
}
示例第二个请求
GET https://outlook.office.com/api/v2.0/me/calendarview?startdatetime=2015-01-01T00:00:00Z&enddatetime=2015-04-10T00:00:00Z&$deltatoken=v2%2cH4roCAAA%3d%2c1.0%2cFalse%2cA00%2c
Authorization: Bearer <token>
Prefer: odata.track-changes
Prefer: odata.maxpagesize=1
示例第二个响应数据
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/CalendarView/$delta",
"value": [
{
"@odata.id": "https://outlook.office.com/api/v2.0/Users('user0@contoso.com')/Events('AAMkAD0jAAA=')",
"@odata.etag": "W/\"P2fd7QAAAAAVFA==\"",
"Id": "AAMkADNkNmVlOTITVAAAAAA0jAAA=",
"ChangeKey": "P2fdmIU1QAAAAAVFA==",
"Categories": [
],
"DateTimeCreated": "2015-04-15T18:59:11.0226221Z",
"DateTimeLastModified": "2015-04-15T18:59:11.0694979Z",
"Subject": "1 hour",
"BodyPreview": "\u200b",
"Body": {
"ContentType": "HTML",
"Content": "<html><body>content</body></html>"
},
"Importance": "Normal",
"HasAttachments": false,
"Start": {
"DateTime": "2015-04-16T18:00:00",
"TimeZone": "Pacific Standard Time"
}
"End": {
"DateTime": "2015-04-16T19:00:00",
"TimeZone": Pacific Standard Time"
}
"ReminderMinutesBeforeStart": "15",
"IsReminderOn": "true",
"Location": {
"DisplayName": "",
"Address": {
"Street": "",
"City": "",
"State": "",
"CountryOrRegion": "",
"PostalCode": ""
}
},
"ResponseStatus": {
"Response": "Organizer",
"Time": "0001-01-01T00:00:00Z"
},
"ShowAs": "Busy",
"IsAllDay": false,
"IsCancelled": false,
"IsOrganizer": true,
"ResponseRequested": true,
"Type": "SingleInstance",
"SeriesMasterId": null,
"Attendees": [
],
"Recurrence": null,
"OriginalEndTimeZone": "Pacific Standard Time",
"OriginalStartTimeZone": "Pacific Standard Time",
"Organizer": {
"EmailAddress": {
"Address": "user0@contoso.com",
"Name": "user0"
}
},
"iCalUId": "040000008200E09BB89A316862",
"WebLink": "https://outlook.office.com/owa/?ItemID=AAMkADNkNmVlOAA%3D&exvsurl=1&viewmodel=ICalendarItemDetailsViewModelFactory",
"OnlineMeetingUrl": null
}
],
"@odata.nextLink": "https://outlook.office.com/api/v2.0/me/calendarview/?startdatetime=2015-01-01T00%3a00%3a00Z&enddatetime=2015-08-10T00%3a00%3a00Z&%24skipToken=530c9d02ae1a4d96804538bd4d381546"
}
查找会议时间
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.read.shared
- wl.calendars
- wl.contacts_日历
根据组织者和与会者忙/闲状态以及指定为参数的时间或地点约束,查找会议时间建议。
此操作仅适用于 Office 365 邮箱(在 Azure AD 上),而不适用于 Microsoft 帐户。
POST https://outlook.office.com/api/{version}/me/findmeetingtimes
下面列出了所有支持的参数。 根据你的具体情况,在 FindMeetingTimes 操作的请求正文中指定必要的参数。
参数 | 类型 | 说明 | 是否必需? |
---|---|---|---|
与会者 | 集合 (AttendeeBase) | 会议的与会者或资源。 空集合导致 FindMeetingTimes 只为组织者寻找空闲时隙。 | 可选 |
IsOrganizerOptional | Edm.Boolean | 如果组织者不一定要参加,请指定 true 。 默认为false 。 |
可选 |
LocationConstraint | LocationConstraint | 组织者对会议地点的要求,如是否必须返回会议地点建议,或是否只能在特定地点举行会议。 | 可选 |
MaxCandidates | Edm.Int32 | 响应中返回的会议建议的最大数量。 | 可选 |
MeetingDuration | Edm.Duration | 会议的持续时间以 ISO 8601 格式表示,例如,PT1H 代表 1 小时。 如果没有指定会议持续时间,则 FindMeetingTimes 使用 30 分钟的默认值。 |
可选 |
MinimumAttendeePercentage | Edm.Double | 在响应中返回时间段所需的最低 confidence。这是一个介于 0 到 100 之间的百分比值。 | 可选 |
ReturnSuggestionReasons | Edm.Boolean | 指定 true 为 SuggestionReason 属性中的每个会议建议返回一条理由。 默认值是 false 不返回该属性。 |
可选 |
TimeConstraint | TimeConstraint | 会议的任何时间限制,可以包括会议的性质 (ActivityDomain) 和可能的会议时间段 (TimeSlots)。 如果不指定这个参数,则 FindMeetingTimes 假设 ActivityDomain 为 Work 。 |
可选 |
FindMeetingTimes 检查组织者和与会者的主日历中的空闲/繁忙状态。 根据指定的参数,此操作会建议最佳的会议时间。 下表介绍了可以在 TimeConstraint 参数中指定的限制。
TimeConstraint 中的 ActivityDomain 值 | 会议时间建议 |
---|---|
工时 | 建议在用户的工作时间范围内,这是在用户的日历配置中定义的,并且可以由用户或管理员自定义。 默认工作时间为星期一至星期五,上午 8 点至下午 5 点(在为邮箱设置的时区内)。 如果未指定 ActivityDomain,则此为默认值。 |
个人 | 建议在用户的工作时间内,以及星期六和星期日。 默认为星期一至星期日,上午 8 点至下午 5 点(在为邮箱设置的时区内)。 |
Unrestricted | 建议可以是全年任意一天的任意时间段。 |
未知 | 请勿使用此值,因为以后会弃用此值。 当前其行为与 Work 相同。 根据需要更改任何现有代码以使用 Work、Personal 或 Unrestricted。 |
响应类型
包含各种会议建议类型的 MeetingTimeSuggestionsResult,类型 MeetingTimeSuggestion 中的每一种,以及 EmptySuggestionsReason 属性。
每个建议被定义为 MeetingTimeSuggestion,其中与会者默认具有 50% 的置信度会参加会议,或者为你在 MinimumAttendeePercentage 参数中指定的具体百分数。
默认情况下,返回的每条会议时间建议的时区均为 UTC。 应用 Prefer: outlook.timezone
请求标头以使会议时间建议根据不同时区调整,例如:
Prefer: outlook.timezone="Pacific Standard Time"
如果 FindMeetingTimes 无法返回任何会议建议,则该响应将在 EmptySuggestionsReason 属性中指出原因。 根据此值,可以更好地调整参数并再次调用 FindMeetingTimes。
备注
目前,FindMeetingTimes 假设作为人员(而非资源)的与会者都是必需的与会者。 因此,请在相应的类型属性中,为人员指定 Required
并为资源指定 Resource
,以作为与会者集合参数的一部分。
下面的每个示例都会调用 FindMeetingTimes,并因与会者的状态、时间和地点限制而异,具体如下所述:
查找和特定与会者举行会议的时间和地点
通过在请求正文中指定以下参数来查找举行会议的时间和地点:
- 与会者
- TimeConstraint
- MeetingDuration
示例请求
下面的示例提出了有关会议时间和地点的建议,其中考虑了组织者和与会者在所请求的会议时间范围之工作时间内的状态,以及所请求的持续时间。
POST https://outlook.office.com/api/v2.0/me/findmeetingtimes
Prefer: outlook.timezone="Pacific Standard Time"
Content-Type: application/json
{
"Attendees": [
{
"Type": "Required",
"EmailAddress": {
"Name": "Fanny",
"Address": "fannyd@prosewareltd.onmicrosoft.com"
}
}
],
"TimeConstraint": {
"ActivityDomain":"Work",
"Timeslots": [
{
"Start": {
"DateTime": "2016-05-20T07:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2016-05-20T17:00:00",
"TimeZone": "Pacific Standard Time"
}
}
]
},
"MeetingDuration": "PT1H"
}
示例响应
状态代码:200
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Microsoft.OutlookServices.MeetingTimeSuggestionsResult",
"MeetingTimeSuggestions": [
{
"MeetingTimeSlot": {
"Start": {
"DateTime": "2016-05-20T10:00:00.0000000",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2016-05-20T11:00:00.0000000",
"TimeZone": "Pacific Standard Time"
}
},
"Confidence": 100.0,
"OrganizerAvailability": "Free",
"AttendeeAvailability": [
{
"Attendee": {
"Type": "Required",
"EmailAddress": {
"Name": "Fanny",
"Address": "fannyd@prosewareltd.onmicrosoft.com"
}
},
"Availability": "Free"
}
],
"Locations": [
{
"DisplayName": "Tokyo conference room",
"LocationEmailAddress": "",
"LocationUri": "",
"Address": null,
"Coordinates": null
}
]
},
{
"MeetingTimeSlot": {
"Start": {
"DateTime": "2016-05-20T11:00:00.0000000",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2016-05-20T12:00:00.0000000",
"TimeZone": "Pacific Standard Time"
}
},
"Confidence": 100.0,
"OrganizerAvailability": "Free",
"AttendeeAvailability": [
{
"Attendee": {
"Type": "Required",
"EmailAddress": {
"Name": "Fanny",
"Address": "fannyd@prosewareltd.onmicrosoft.com"
}
},
"Availability": "Free"
}
],
"Locations": [
{
"DisplayName": "Paris conference room",
"LocationEmailAddress": "",
"LocationUri": "",
"Address": null,
"Coordinates": null
}
]
}
],
"EmptySuggestionsReason": ""
}
查找在已知地点举行会议的时间,并获取每个建议的理由
查找在预定地点举行会议的时间,并请求获取每个建议的理由,具体是通过在请求正文中指定以下参数:
- 与会者
- LocationConstraint
- TimeConstraint
- MeetingDuration
- ReturnSuggestionReasons
设置 ReturnSuggestionReasons 参数后,SuggestionReason 属性中还会返回各条建议的理由(如果 FindMeetingTimes 返回建议的话)。
示例请求
POST https://outlook.office.com/api/v2.0/me/findmeetingtimes
Prefer: outlook.timezone="Pacific Standard Time"
Content-Type: application/json
{
"Attendees": [
{
"Type": "Required",
"EmailAddress": {
"Name": "Fanny",
"Address": "fannyd@prosewareltd.onmicrosoft.com"
}
}
],
"LocationConstraint": {
"IsRequired": "false",
"SuggestLocation": "false",
"Locations": [
{
"ResolveAvailability": "false",
"DisplayName": "Conf room Hood"
}
]
},
"TimeConstraint": {
"ActivityDomain":"Work",
"Timeslots": [
{
"Start": {
"DateTime": "2016-05-20T07:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2016-05-20T17:00:00",
"TimeZone": "Pacific Standard Time"
}
}
]
},
"MeetingDuration": "PT2H",
"ReturnSuggestionReasons": "true"
}
示例响应
状态代码:200
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Microsoft.OutlookServices.MeetingTimeSuggestionsResult",
"MeetingTimeSuggestions": [
{
"MeetingTimeSlot": {
"Start": {
"DateTime": "2016-05-20T10:00:00.0000000",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2016-05-20T12:00:00.0000000",
"TimeZone": "Pacific Standard Time"
}
},
"Confidence": 100.0,
"OrganizerAvailability": "Free",
"AttendeeAvailability": [
{
"Attendee": {
"Type": "Required",
"EmailAddress": {
"Name": "Fanny",
"Address": "fannyd@prosewareltd.onmicrosoft.com"
}
},
"Availability": "Free"
}
],
"Locations": [
{
"DisplayName": "Conf room Hood"
}
],
"SuggestionReason": "Suggested because it is one of the nearest times when all attendees are available."
}
],
"EmptySuggestionsReason": ""
}
查找举行会议的时间,但没有与会者有空
查找在预定地点举行会议的时间,具体是通过在请求正文中指定以下参数:
- 与会者
- LocationConstraint
- TimeConstraint
- MeetingDuration
在此示例中,根据指定参数和与会者的状态,FindMeetingTimes 无法返回任何建议,而是在 EmptySuggestionsReason 属性中返回一条理由 AttendeesUnavailable
。
请参阅其他未返回任何会议建议的可能原因。
示例请求
POST https://outlook.office.com/api/v2.0/me/findmeetingtimes
Prefer: outlook.timezone="Pacific Standard Time"
Content-Type: application/json
{
"Attendees": [
{
"Type": "Required",
"EmailAddress": {
"Name": "Fanny",
"Address": "fannyd@prosewareltd.onmicrosoft.com"
}
}
],
"LocationConstraint": {
"IsRequired": "false",
"SuggestLocation": "false",
"Locations": [
{
"ResolveAvailability": "false",
"DisplayName": "Conf room Hood"
}
]
},
"TimeConstraint": {
"Timeslots": [
{
"Start": {
"DateTime": "2016-05-20T7:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2016-05-20T14:00:00",
"TimeZone": "Pacific Standard Time"
}
}
]
},
"MeetingDuration": "PT2H"
}
示例响应
状态代码:200
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Microsoft.OutlookServices.MeetingTimeSuggestionsResult",
"MeetingTimeSuggestions": [
],
"EmptySuggestionsReason": "AttendeesUnavailable"
}
查找举行会议的时间,但只有部分与会者有空
查找在预定地点举行会议的时间,具体是通过在请求正文中指定以下参数:
- 与会者
- LocationConstraint
- TimeConstraint
- MeetingDuration
- ReturnSuggestionReasons
- MinimumAttendeePercentage
在此示例中,两个与会者中只有一个有空。 FindMeetingTimes 返回的每条会议建议包括:
- 每个与会者的繁忙/空闲状态
- 计算的会议置信度,这是与会者参加会议的平均百分比。 这个值必须满足 MinimumAttendeePercentage 中指定的 60% 的要求。
- 一个 SuggestionHint,因为 ReturnSuggestionReasons 参数已设置。
查找有关会议置信度的更多信息。
示例请求
POST https://outlook.office.com/api/v2.0/me/findmeetingtimes
Prefer: outlook.timezone="Pacific Standard Time"
Content-Type: application/json
{
"Attendees": [
{
"Type": "Required",
"EmailAddress": {
"Name": "Fanny",
"Address": "fannyd@prosewareltd.onmicrosoft.com"
}
},
{
"Type": "Optional",
"EmailAddress": {
"Name": "Dana",
"Address": "danas@prosewareltd.onmicrosoft.com"
}
}
],
"LocationConstraint": {
"IsRequired": "false",
"SuggestLocation": "false",
"Locations": [
{
"ResolveAvailability": "false",
"DisplayName": "Conf room Hood"
}
]
},
"TimeConstraint": {
"ActivityDomain":"Work",
"Timeslots": [
{
"Start": {
"DateTime": "2016-05-20T09:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2016-05-20T17:00:00",
"TimeZone": "Pacific Standard Time"
}
}
]
},
"MeetingDuration": "PT1H",
"ReturnSuggestionReasons": "true",
"MinimumAttendeePercentage": "60"
}
示例响应
状态代码:200
{
"@odata.context":"https://outlook.office.com/api/v2.0/$metadata#Microsoft.OutlookServices.MeetingTimeSuggestionsResult",
"MeetingTimeSuggestions":[
{
"MeetingTimeSlot":{
"Start":{
"DateTime":"2016-05-20T10:00:00.0000000",
"TimeZone":"Pacific Standard Time"
},
"End":{
"DateTime":"2016-05-20T11:00:00.0000000",
"TimeZone":"Pacific Standard Time"
}
},
"Confidence":100.0,
"OrganizerAvailability":"Free",
"AttendeeAvailability":[
{
"Attendee":{
"Type":"Required",
"EmailAddress":{
"Name": "Fanny",
"Address":"fannyd@prosewareltd.onmicrosoft.com"
}
},
"Availability":"Free"
},
{
"Attendee":{
"Type":"Required",
"EmailAddress":{
"Name": "Dana",
"Address":"danas@prosewareltd.onmicrosoft.com"
}
},
"Availability":"Free"
}
],
"Locations":[
{
"DisplayName":"Conf room Hood"
}
],
"SuggestionReason":"Suggested because it is one of the nearest times when most attendees are available."
},
{
"MeetingTimeSlot":{
"Start":{
"DateTime":"2016-05-20T11:00:00.0000000",
"TimeZone":"Pacific Standard Time"
},
"End":{
"DateTime":"2016-05-20T12:00:00.0000000",
"TimeZone":"Pacific Standard Time"
}
},
"Confidence":74.5,
"OrganizerAvailability":"Free",
"AttendeeAvailability":[
{
"Attendee":{
"Type":"Required",
"EmailAddress":{
"Name": "Fanny",
"Address":"fannyd@prosewareltd.onmicrosoft.com"
}
},
"Availability":"Free"
},
{
"Attendee":{
"Type":"Required",
"EmailAddress":{
"Name": "Dana",
"Address":"danas@prosewareltd.onmicrosoft.com"
}
},
"Availability":"Unknown"
}
],
"Locations":[
{
"DisplayName":"Conf room Hood"
}
],
"SuggestionReason":"Suggested because it is one of the nearest times when most attendees are available."
}
],
"EmptySuggestionsReason":""
}
仅查找登录用户的空闲时隙
通过在请求正文中指定以下参数,在登录用户的主日历中查找一个日期范围内一周中任何时间内的空闲时隙:
- TimeConstraint
- MeetingDuration
示例请求
此示例查找 MeetingDuration 所指定的 1 小时空闲时隙,在登录用户的主日历中查找 TimeConstraint 指定的一个日期范围内一周中的任何时间。
POST https://outlook.office.com/api/v2.0/me/findmeetingtimes
Prefer: outlook.timezone="Pacific Standard Time"
Content-Type: application/json
{
"Attendees": [],
"TimeConstraint": {
"ActivityDomain": "Unrestricted",
"Timeslots": [
{
"Start": {
"DateTime": "2016-05-20T06:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2016-05-22T23:00:00",
"TimeZone": "Pacific Standard Time"
}
}
]
},
"MeetingDuration": "PT1H"
}
示例响应
状态代码:200
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Microsoft.OutlookServices.MeetingTimeSuggestionsResult",
"MeetingTimeSuggestions": [
{
"MeetingTimeSlot": {
"Start": {
"DateTime": "2016-05-20T06:00:00.0000000",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2016-05-20T07:00:00.0000000",
"TimeZone": "Pacific Standard Time"
}
},
"Confidence": 100.0,
"OrganizerAvailability": "Free",
"AttendeeAvailability": [
],
"Locations": [
]
},
{
"MeetingTimeSlot": {
"Start": {
"DateTime": "2016-05-21T09:00:00.0000000",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2016-05-21T10:00:00.0000000",
"TimeZone": "Pacific Standard Time"
}
},
"Confidence": 100.0,
"OrganizerAvailability": "Free",
"AttendeeAvailability": [
],
"Locations": [
]
},
{
"MeetingTimeSlot": {
"Start": {
"DateTime": "2016-05-22T19:00:00.0000000",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2016-05-22T20:00:00.0000000",
"TimeZone": "Pacific Standard Time"
}
},
"Confidence": 100.0,
"OrganizerAvailability": "Free",
"AttendeeAvailability": [
],
"Locations": [
]
}
],
"EmptySuggestionsReason": ""
}
获取会议室(预览)
这个功能目前在 beta 版中可用。 要了解详细信息,请在左侧的目录中转到 Office 365 REST API 参考部分,并选择 beta。
创建事件
创建日历事件
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
通过发布到日历的 events
端点,在用户的主日历或特定日历中创建活动。 创建事件时,服务器将向所有与会者发送邀请。
POST https://outlook.office.com/api/v2.0/me/events
POST https://outlook.office.com/api/v2.0/me/calendars/{calendar_id}/events
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
calendar_id | 字符串 | 日历 ID。 |
示例请求
POST https://outlook.office.com/api/v2.0/me/events
Content-Type: application/json
{
"Subject": "Discuss the Calendar REST API",
"Body": {
"ContentType": "HTML",
"Content": "I think it will meet our requirements!"
},
"Start": {
"DateTime": "2014-02-02T18:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2014-02-02T19:00:00",
"TimeZone": "Pacific Standard Time"
},
"Attendees": [
{
"EmailAddress": {
"Address": "janets@a830edad9050849NDA1.onmicrosoft.com",
"Name": "Janet Schorr"
},
"Type": "Required"
}
]
}
示例响应
状态代码:201
{
"@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/Events/$entity",
"@odata.id": "https://outlook.office.com/api/beta/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGE4v1RAAA=')",
"@odata.etag": "W/\"Jj9S59cHB0Wq4jXUzBgDvQAAFeNheA==\"",
"Id": "AAMkAGE4v1RAAA=",
"ChangeKey": "Jj9S59cHB0Wq4jXUzBgDvQAAFeNheA==",
"Categories": [],
"CreatedDateTime": "2014-01-22T20:56:10.1058291Z",
"LastModifiedDateTime": "2014-01-22T20:56:10.3402186Z",
"Subject": "Discuss the Calendar REST API",
"BodyPreview": "I think it will meet our requirements!",
"Body": {
"ContentType": "HTML",
"Content": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n</head>\r\n<body>\r\nI think it will meet our requirements!\r\n</body>\r\n</html>\r\n"
},
"Importance": "Normal",
"HasAttachments": false,
"Start": {
"DateTime": "2014-02-02T18:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2014-02-02T19:00:00",
"TimeZone": "Pacific Standard Time"
},
"Location": {
"DisplayName": "",
"Address": null
},
"ShowAs": "Busy",
"IsAllDay": false,
"IsCancelled": false,
"IsOrganizer": true,
"ResponseRequested": true,
"Type": "SingleInstance",
"SeriesMasterId": null,
"Attendees": [
{
"EmailAddress": {
"Address": "janets@a830edad9050849NDA1.onmicrosoft.com",
"Name": "Janet Schorr"
},
"Status": {
"Response": "None",
"Time": "0001-01-01T00:00:00Z"
},
"Type": "Required"
}
],
"Recurrence": null,
"OriginalEndTimeZone": "Pacific Standard Time",
"OriginalStartTimeZone": "Pacific Standard Time",
"Organizer": {
"EmailAddress": {
"Address": "alexd@a830edad9050849NDA1.onmicrosoft.com",
"Name": "alexd"
}
},
"OnlineMeetingUrl": null
}
响应类型
新事件。
默认情况下,响应包含新事件的所有属性。 使用 $select
只指定那些你需要的最佳性能的属性。 始终返回该 ID 属性。
以下是在响应中仅包含新事件的开始和结束属性的示例。
POST https://outlook.office.com/api/v2.0/me/events?$Select=Start,End
更新事件
更新日历事件
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
更改事件。 只有你指定的属性才会更改。 如果用户是组织者,则服务器会向所有与会者发送会议更新。
PATCH https://outlook.office.com/api/v2.0/me/events/{event_id}
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
event_id | 字符串 | 字符串 |
在请求正文中指定任何可写的事件属性。
示例请求
PATCH https://outlook.office.com/api/v2.0/me/events/AAMkAGE0M4v1OAAA=
Content-Type: application/json
{
"Location": {
"DisplayName": "Your office",
"Address": null
}
}
示例响应
状态代码:200
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/Events/$entity",
"@odata.id": "https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGE0M4v1OAAA=')",
"@odata.etag": "W/\"Jj9S59cHB0Wq4jXUzBgDvQAAFeNheQ==\"",
"Id": "AAMkAGE0M4v1OAAA=",
"ChangeKey": "Jj9S59cHB0Wq4jXUzBgDvQAAFeNheQ==",
"Categories": [],
"CreatedDateTime": "2014-01-22T20:49:05.5657528Z",
"LastModifiedDateTime": "2014-01-22T21:14:17.4886416Z",
"Subject": "Discuss the Calendar REST API",
"BodyPreview": "I think it will meet our requirements!",
"Body": {
"ContentType": "HTML",
"Content": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n</head>\r\n<body>\r\nI think it will meet our requirements!\r\n</body>\r\n</html>\r\n"
},
"Importance": "Normal",
"HasAttachments": false,
"Start": {
"DateTime": "2014-02-02T18:00:00",
"TimeZone": "Pacific Standard Time"
},
"End": {
"DateTime": "2014-02-02T19:00:00",
"TimeZone": "Pacific Standard Time"
},
"Location": {
"DisplayName": "Your office",
"Address": null
},
"ShowAs": "Busy",
"IsAllDay": false,
"IsCancelled": false,
"IsOrganizer": true,
"ResponseRequested": true,
"Type": "SingleInstance",
"SeriesMasterId": null,
"Attendees": [],
"Recurrence": null,
"OriginalEndTimeZone": "Pacific Standard Time",
"OriginalStartTimeZone": "Pacific Standard Time",
"Organizer": {
"EmailAddress": {
"Address": "alexd@a830edad9050849NDA1.onmicrosoft.com",
"Name": "alexd"
}
},
"OnlineMeetingUrl": null
}
响应类型
已更新的事件。 如果用户是组织者,则服务器会向所有与会者发送会议更新。
默认情况下,响应包含已更新事件的所有属性。 使用 $select
只指定那些你需要的最佳性能的属性。 始终返回该 ID 属性。
PATCH https://outlook.office.com/api/v2.0/me/events/AAMkAGE1MFKPQWAAA=?$select=Location
响应事件
接受事件
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
接受指定的事件。
POST https://outlook.office.com/api/v2.0/me/events/{event_id}/accept
参数 | 类型 | 说明 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
URL 参数 | ||||||||||||||
event_id | 字符串 | 字符串 必需。 | ||||||||||||
正文参数 | ||||||||||||||
注释 | 字符串 | 响应中包含的文本。可选。 | ||||||||||||
SendResponse | 布尔值 | true |
UNTRANSLATED_CONTENT_START | if a response is to be sent to the organizer; otherwise, false . Optional. Default is true . |
UNTRANSLATED_CONTENT_END |
示例请求
POST https://outlook.office.com/api/v2.0/me/events('AAMkAGE1M2IyNGNmLTI5MT_bs88AAAXDJwEAAA=')/accept
Content-Type: application/json
{
"Comment": "Great idea!",
"SendResponse": "true"
}
响应
HTTP 202 已接受的响应代码表示响应成功。
暂时接受事件
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
暂时接受指定的事件。
POST https://outlook.office.com/api/v2.0/me/events/{event_id}/tentativelyaccept
参数 | 类型 | 说明 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
URL 参数 | ||||||||||||||
event_id | 字符串 | 字符串 必需。 | ||||||||||||
正文参数 | ||||||||||||||
注释 | 字符串 | 响应中包含的文本。可选。 | ||||||||||||
SendResponse | 布尔值 | true |
UNTRANSLATED_CONTENT_START | if a response is to be sent to the organizer; otherwise, false . Optional. Default is true . |
UNTRANSLATED_CONTENT_END |
示例请求
POST https://outlook.office.com/api/v2.0/me/events('AAMkAGE1M2IyNGNmLTI5MT_bs88AAAXDJwEAAA=')/tentativelyaccept
Content-Type: application/json
{
"Comment": "I'll confirm later!",
"SendResponse": "true"
}
响应
HTTP 202 已接受的响应代码表示响应成功。
拒绝事件
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
拒绝对指定事件的邀请。
POST https://outlook.office.com/api/v2.0/me/events/{event_id}/decline
参数 | 类型 | 说明 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
URL 参数 | ||||||||||||||
event_id | 字符串 | 字符串 必需。 | ||||||||||||
正文参数 | ||||||||||||||
注释 | 字符串 | 响应中包含的文本。可选。 | ||||||||||||
SendResponse | 布尔值 | true |
UNTRANSLATED_CONTENT_START | if a response is to be sent to the organizer; otherwise, false . Optional. Default is true . |
UNTRANSLATED_CONTENT_END |
示例请求
POST https://outlook.office.com/api/v2.0/me/events('AAMkAGE1M2IyNGNmLTI5MT_bs88AAAXDJwEAAA=')/decline
Content-Type: application/json
{
"Comment": "Sorry, maybe next time!",
"SendResponse": "true"
}
响应
HTTP 202 已接受的响应代码表示响应成功。
转发事件(预览)
这个功能目前仅在 beta 版中可用。 要了解详细信息,请在左侧的目录中转到 Office 365 REST API 参考部分,并选择 beta。
删除事件
删除日历事件
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
将事件移动到已登录用户的已删除项文件夹中。 如果事件是会议且已登录用户是组织者,则服务器会向所有与会者发送取消信息。
DELETE https://outlook.office.com/api/v2.0/me/events/{event_id}
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
event_id | 字符串 | 字符串 |
示例请求
DELETE https://outlook.office.com/api/v2.0/me/events/AAMkAGE0M4v1OAAA=
示例响应
Status code: 204
取消事件(预览)
这个功能目前仅在 beta 版中可用。 要了解详细信息,请在左侧的目录中转到 Office 365 REST API 参考部分,并选择 beta。
获取附件
你可以获取附件集合或获取附件。
获取附件集合
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.read
- wl.calendars
- wl.contacts_日历
从特定事件获取附件。
备注
请参阅 OData 查询参数 了解筛选、排序和分页参数。
GET https://outlook.office.com/api/v2.0/me/events/{event_id}/attachments
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
event_id | 字符串 | 字符串 |
响应类型
一个附件集合,其类型可以为 FileAttachment 或 ItemAttachment。
示例请求
GET https://outlook.office.com/api/v2.0/me/events/AAMkAGI2NGTG9yAAA=/attachments
示例响应
状态代码:200
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/Events('AAMkAGI2NG9yAAA%3D')/Attachments",
"value": [
{
"@odata.type": "#Microsoft.OutlookServices.FileAttachment",
"@odata.id": "https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGI2NGTG9yAAA=')/Attachments('AAMkAGI2NGLwydGuOzcHf1FBlo=')",
"Id": "AAMkAGI2NGLwydGuOzcHf1FBlo=",
"LastModifiedDateTime": "2014-10-22T00:30:26Z",
"Name": "Company Party.docx",
"ContentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"Size": 11647,
"IsInline": false,
"ContentId": null,
"ContentLocation": null,
"ContentBytes": "UEsDBBQABgAIAAAAIQDfpNJs...AAF4pAAAAAA=="
}
]
}
获取附件
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.read
- wl.calendars
- wl.contacts_日历
从特定事件获取附件。
GET https://outlook.office.com/api/v2.0/me/events/{event_id}/attachments/{attachment_id}
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
event_id | 字符串 | 字符串 |
attachment_id | 字符串 | 附件 ID。 |
备注
请参阅 OData 查询参数 了解筛选、排序和分页参数。
响应类型
示例请求
GET https://outlook.office.com/api/v2.0/me/events/AAMkAGI2WRAAADTG9yAAA=/attachments/AAMkAGI2TG9yAAABEgAQALxJtn1LwydGuOzcHf1FBlo=
示例响应
状态代码:200
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/Events('AAMkAGI2WRAAADTG9yAAA%3D')/Attachments/$entity",
"@odata.type": "#Microsoft.OutlookServices.FileAttachment",
"@odata.id": "https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Events('AAMkAGI2WRAAADTG9yAAA=')/Attachments('AAMkAGI2TG9yAAABEgAQALxJtn1LwydGuOzcHf1FBlo=')",
"Id": "AAMkAGI2TG9yAAABEgAQALxJtn1LwydGuOzcHf1FBlo=",
"LastModifiedDateTime": "2014-10-22T00:30:26Z",
"Name": "Company Party.docx",
"ContentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"Size": 11647,
"IsInline": false,
"ContentId": null,
"ContentLocation": null,
"ContentBytes": "UEsDBBQABgAIAAAAIQD...AAF4pAAAAAA=="
}
示例请求(在附件上 $expand)
下面的示例以事件属性内联方式获取和扩展 2 个参考附件。
GET https://outlook.office.com/api/v2.0/me/events('AAMkAGE1Mbs88AADggYEcAAA=')?$expand=attachments
示例响应
状态代码:200
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#users('ddfcd489-628b-40d7-b48b-57002df800e5')/events/$entity",
"@odata.etag": "W/\"mODEKWhc/Um6lA3uPm7PPAAA4KZrtA==\"",
"id": "AAMkAGE1Mbs88AADggYEcAAA=",
"createdDateTime": "2016-03-22T22:19:58.1359352Z",
"lastModifiedDateTime": "2016-03-22T22:39:09.9335289Z",
"changeKey": "mODEKWhc/Um6lA3uPm7PPAAA4KZrtA==",
"categories": [
],
"originalStartTimeZone": "Pacific Standard Time",
"originalEndTimeZone": "Pacific Standard Time",
"responseStatus": {
"response": "organizer",
"time": "0001-01-01T00:00:00Z"
},
"iCalUId": "040000008200E00074C5B7101A82E008000000005895FCF78884D10100000000000000001000000099DD7CA6BCF37C4F9F7DAACCADDD6B89",
"reminderMinutesBeforeStart": 15,
"isReminderOn": true,
"hasAttachments": true,
"subject": "Plan Easter egg hunt!",
"body": {
"contentType": "html",
"content": "<html>\r\n<body>\r\nLet's get organized for this weekend's gathering.\r\n</body>\r\n</html>\r\n"
},
"bodyPreview": "Let's get organized for this weekend's gathering.",
"importance": "normal",
"sensitivity": "normal",
"start": {
"dateTime": "2016-03-26T17:00:00.0000000",
"timeZone": "UTC"
},
"end": {
"dateTime": "2016-03-26T18:00:00.0000000",
"timeZone": "UTC"
},
"location": {
"displayName": "",
"locationType": "default",
"address": {
"type": "unknown"
},
"coordinates": {
}
},
"locations": [
],
"isAllDay": false,
"isCancelled": false,
"isOrganizer": true,
"recurrence": null,
"responseRequested": true,
"seriesMasterId": null,
"showAs": "busy",
"type": "singleInstance",
"attendees": [
{
"status": {
"response": "none",
"time": "0001-01-01T00:00:00Z"
},
"type": "required",
"emailAddress": {
"name": "Randi Welch",
"address": "randiw@contoso.onmicrosoft.com"
}
}
],
"organizer": {
"emailAddress": {
"name": "Dana Swope",
"address": "danas@contoso.onmicrosoft.com"
}
},
"webLink": "https://outlook.office.com/owa/?ItemID=AAMkAGE1Mbs88AADggYEcAAA%3D&exvsurl=1&viewmodel=ICalendarItemDetailsViewModelFactory",
"onlineMeetingUrl": null,
"attachments@odata.context": "https://outlook.office.com/api/beta/$metadata#users('ddfcd489-628b-40d7-b48b-57002df800e5')/events('AAMkAGE1Mbs88AADggYEcAAA%3D')/attachments",
"attachments": [
{
"@odata.type": "#Microsoft.OutlookServices.ReferenceAttachment",
"id": "AAMkAGE1Mbs88AADggYEcAAABEgAQAABWAoLgP3REt_LWRG8ORv4=",
"lastModifiedDateTime": "2016-03-22T22:27:20Z",
"name": "Hydrangea picture",
"contentType": null,
"size": 412,
"isInline": false,
"sourceUrl": "https://contoso-my.spoppe.com/personal/danas_contoso_onmicrosoft_com/Documents/Pics/hydrangea.jpg",
"providerType": "oneDriveBusiness",
"thumbnailUrl": null,
"previewUrl": null,
"permission": "edit",
"isFolder": false
},
{
"@odata.type": "#Microsoft.OutlookServices.ReferenceAttachment",
"id": "AAMkAGE1Mbs88AADggYEcAAABEgAQAE1rHHth7YNLlR9WsgnODy0=",
"lastModifiedDateTime": "2016-03-22T22:39:09Z",
"name": "Koala picture",
"contentType": null,
"size": 382,
"isInline": false,
"sourceUrl": "https://contoso-my.spoppe.com/personal/danas_contoso_onmicrosoft_com/Documents/Pics/koala.jpg",
"providerType": "oneDriveBusiness",
"thumbnailUrl": null,
"previewUrl": null,
"permission": "edit",
"isFolder": false
}
]
}
示例请求(嵌套附件项目上的 $expand)
下面的示例获取嵌套附件项。
GET https://outlook-sdf.office.com/api/v2.0/me/events/AAMkAGE1Mbs88AADUv0uFAAA=/attachments/AAMkAGE1Mbs88AADUv0uFAAABEgAQAL53d0u3BKBJmCxKVxZKBZ8=$expand=Microsoft.OutlookServices.ItemAttachment/Item
示例响应
Status code: 200
{
"Id": "AAMkAGE1Mbs88AADUv0uFAAABEgAQAL53d0u3BKBJmCxKVxZKBZ8=",
"LastModifiedDateTime": "2017-04-25T20:05:55Z",
"Name": "RE: Changes to GetConditionMetadata handler",
"ContentType": null,
"Size": 78927,
"IsInline": false,
"Item": {
"Id": "",
"Name": "How to retrieve item attachment using Outlook REST API",
"ContentType": message/rfc822,
"Size": 71094,
"IsInline": false,
"LastModifiedDateTime": "2015-09-24T05:57:59Z",
}
}
创建附件
可以为一个事件创建文件附件或创建项目附件。
创建文件附件
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
向一个事件添加文件附件。
POST https://outlook.office.com/api/v2.0/me/events/{event_id}/attachments
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
event_id | 字符串 | 字符串 |
正文参数 | ||
@odata.type | 字符串 | #Microsoft.OutlookServices.FileAttachment |
名称 | 字符串 | 附件的名称。 |
ContentBytes | 二进制 | 要附加的文件。 |
响应类型
新 文件附件。
创建项目附件
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
向一个事件添加项目附件。
POST https://outlook.office.com/api/v2.0/me/events/{event_id}/attachments
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
event_id | 字符串 | 字符串 |
正文参数 | ||
@odata.type | 字符串 | #Microsoft.OutlookServices.ItemAttachment |
名称 | 字符串 | 附件的名称。 |
项 | 消息、事件或联系人条目。 | 要附加的项。 |
响应类型
新 项目附件。
创建参考附件
要求的最小范围
https://outlook.office.com/calendars.readwrite
向一个事件添加参考附件。
POST https://outlook.office.com/api/v2.0/me/events/{event_id}/attachments
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
event_id | 字符串 | 字符串 |
正文参数 | ||
@odata.type | 字符串 | #Microsoft.OutlookServices.ReferenceAttachment |
名称 | 字符串 | 附件的显示名称。 必需。 |
SourceUrl | 字符串 | 用于获取附件内容的 URL。 如果这是文件夹的 URL,为了使文件夹在 Outlook 或 Outlook 网页版中正确显示,请将 IsFolder 设置为 true。 必需。 |
在请求正文中指定 名称 和 SourceUrl 参数以及任何可写 参考附件 属性。
响应类型
参考附件。
示例请求
下面的示例向一个现有事件添加参考附件。 附件是 OneDrive for Business 上的文件的链接。
POST https://outlook.office.com/api/v2.0/me/events('AAMkAGE1Mbs88AADggYEcAAA=')/attachments
Content-Type: application/json
{
"@odata.type": "#Microsoft.OutlookServices.ReferenceAttachment",
"Name": "Hydrangea picture",
"SourceUrl": "https://contoso-my.spoppe.com/personal/danas_contoso_onmicrosoft_com/Documents/Pics/hydrangea.jpg",
"ProviderType": "oneDriveBusiness",
"Permission": "Edit",
"IsFolder": "False"
}
示例响应
状态代码:201 已创建
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#users('ddfcd489-628b-40d7-b48b-57002df800e5')/events('AAMkAGE1Mbs88AADggYEcAAA%3D')/attachments/$entity",
"@odata.type": "#Microsoft.OutlookServices.ReferenceAttachment",
"Id": "AAMkAGE1Mbs88AADggYEcAAABEgAQAABWAoLgP3REt_LWRG8ORv4=",
"LastModifiedDateTime": "2016-03-22T22:27:20Z",
"Name": "Hydrangea picture",
"ContentType": null,
"Size": 412,
"IsInline": false,
"SourceUrl": "https://contoso-my.spoppe.com/personal/danas_contoso_onmicrosoft_com/Documents/Pics/hydrangea.jpg",
"ProviderType": "oneDriveBusiness",
"ThumbnailUrl": null,
"PreviewUrl": null,
"Permission": "edit",
"IsFolder": false
}
删除附件
删除事件附件
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
删除一个事件的指定附件。 附件可以是 文件附件 或 项目附件。
DELETE https://outlook.office.com/api/v2.0/me/events/{event_id}/attachments/{attachment_id}
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
event_id | 字符串 | 字符串 |
attachment_id | 字符串 | 附件 ID。 |
示例请求
DELETE https:/outlook.office.com/api/v2.0/me/events/AAMkAGE0MG4v1OAAA=/attachments/AAMkAGITG9yAAA=
示例响应
Status code: 204
获取提醒
从日历中获取两个日期和时间之间的事件提醒列表。
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.read
- wl.calendars
- wl.contacts_日历
GET https://outlook.office.com/api/v2.0/me/ReminderView(StartDateTime='{DateTime}',EndDateTime='{DateTime}')
必需的参数 | 类型 | 说明 |
---|---|---|
标头参数 | ||
Prefer: | outlook.timezone | 事件在响应中的默认时区。 |
URL 参数 | ||
StartDateTime | 字符串 | 返回提醒的开始日期和时间。 |
EndDateTime | 字符串 | 返回提醒的结束日期和时间。 |
使用 Prefer: outlook.timezone 标头来指定响应中事件开始和结束时间要使用的时区。 如果该事件是在不同的时区中创建的,则开始和结束时间将调整到指定的时区。
请参阅此列表了解支持的时区名称。 如果未指定 Prefer: outlook.timezone 标头,则时区设定为 UTC。
暂停提醒
暂停提醒,将提醒推迟到新的时间。
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
POST https://outlook.office.com/api/v2.0/me/Events('{id}')/SnoozeReminder
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
id | 字符串 | 事件 ID。 |
正文参数 | ||
NewReminderTime | DateTimeTimeZone | 触发提醒的新日期和时间。 |
消除提醒
关闭已触发的提醒。
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
POST https://outlook.office.com/api/v2.0/me/Events({id})/DismissReminder
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
id | 字符串 | 事件 ID。 |
获取日历
可以获取日历集合或获取一个日历。
获取日历集合
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.read
- wl.calendars
- wl.contacts_日历
获取所有用户的日历 (calendars
) 或从特定日历组获取日历。
GET https://outlook.office.com/api/v2.0/me/calendars
GET https://outlook.office.com/api/v2.0/me/calendargroups/{calendar_group_id}/calendars
备注
请参阅 OData 查询参数 了解筛选、排序和分页参数。
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
calender_group_id | 字符串 | 日历组 ID。 |
示例请求
https://outlook.office.com/api/v2.0/me/calendars
示例响应
状态代码:200
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/Calendars",
"value": [
{
"@odata.id": "https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Calendars('AAMkAGI2TGuLAAA=')",
"Id": "AAMkAGI2TGuLAAA=",
"Name": "Calendar",
"Color": "Auto",
"ChangeKey": "nfZyf7VcrEKLNoU37KWlkQAAA0x0+w==",
"CanShare":true,
"CanViewPrivateItems":true,
"CanEdit":true,
"Owner":{
"Name":"Fanny Downs",
"Address":"fannyd@adatum.onmicrosoft.com"
}
}
]
}
获取日历
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.read
- wl.calendars
- wl.contacts_日历
通过 ID 获取日历。 可以通过使用 ../me/calendar
端点来获取用户的主日历。
GET https://outlook.office.com/api/v2.0/me/calendars/{calendar_id}
备注
请参阅 OData 查询参数 了解筛选、排序和分页参数。
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
calendar_id | 字符串 | 日历 ID。 |
示例请求
GET https://outlook.office.com/api/v2.0/me/calendars/AAMkAGI2TGuLAAA=
示例响应
状态代码:200
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/Calendars/$entity",
"@odata.id": "https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Calendars('AAMkAGI2TGuLAAA=')",
"Id": "AAMkAGI2TGuLAAA=",
"Name": "Calendar",
"Color": "Auto",
"ChangeKey": "nfZyf7VcrEKLNoU37KWlkQAAA0x0+w==",
"CanShare":true,
"CanViewPrivateItems":true,
"CanEdit":true,
"Owner":{
"Name":"Fanny Downs",
"Address":"fannyd@adatum.onmicrosoft.com"
}
}
响应类型
请求的日历。
创建日历
创建日历
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
通过使用 ../me/calendars
快捷方式在默认日历组中创建日历,或通过发布到组的 calendars
端点在特定日历组中来创建日历。
POST https://outlook.office.com/api/v2.0/me/calendars
POST https://outlook.office.com/api/v2.0/me/calendargroups/{calendar_group_id}/calendars
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
calender_group_id | 字符串 | 日历组 ID(如果从特定组获取日历)。 |
正文参数 | ||
名称 | 字符串 | 新日历的名称。 |
示例请求
POST https://outlook.office.com/api/v2.0/me/calendars
Content-Type: application/json
{
"Name": "Social"
}
示例响应
状态代码:201
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/Calendars/$entity",
"@odata.id": "https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Calendars('AAMkAGE4xLHAAA=')",
"@odata.etag": "W/\"Jj9S59cHB0Wq4jXUzBgDvQAAFeN/SQ==\"",
"Id": "AAMkAGE4xLHAAA=",
"Name": "Social",
"ChangeKey": "Jj9S59cHB0Wq4jXUzBgDvQAAFeN/SQ==",
"CanShare":true,
"CanViewPrivateItems":true,
"CanEdit":true,
"Owner":{
"Name":"Fanny Downs",
"Address":"fannyd@adatum.onmicrosoft.com"
}
}
响应类型
新日历。
更新日历
更新日历
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
更改日历的可写属性。
PATCH https://outlook.office.com/api/v2.0/me/calendars/{calendar_id}
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
calendar_id | 字符串 | 日历 ID。 |
示例请求
PATCH https://outlook.office.com/api/v2.0/me/calendars/AAMkAGE4xLIAAA=
Content-Type: application/json
{
"Name": "Social events"
}
示例响应
状态代码:200
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/Calendars/$entity",
"@odata.id": "https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/Calendars('AAMkAGE4xLIAAA=')",
"@odata.etag": "W/\"Jj9S59cHB0Wq4jXUzBgDvQAAFeN/Sw==\"",
"Id": "AAMkAGE4xLIAAA=",
"Name": "Social events",
"ChangeKey": "Jj9S59cHB0Wq4jXUzBgDvQAAFeN/Sw==",
"CanShare":true,
"CanViewPrivateItems":true,
"CanEdit":true,
"Owner":{
"Name":"Fanny Downs",
"Address":"fannyd@adatum.onmicrosoft.com"
}
}
响应类型
已更新的日历。
删除日历
删除日历
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
DELETE https://outlook.office.com/api/v2.0/me/calendars/{calendar_id}
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
calendar_id | 字符串 | 日历 ID。 |
示例请求
DELETE https://outlook.office.com/api/v2.0/me/calendars/AAMkAGE4xLIAAA=
示例响应
Status code: 204
获取日历组
可以获取日历组集合或获取日历组。
备注
Outlook.com 仅支持可通过 ../me/calendars
快捷方式访问的默认日历组。
获取日历组集合
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.read
- wl.calendars
- wl.contacts_日历
获取邮箱中的日历组。
GET https://outlook.office.com/api/v2.0/me/calendargroups
备注
请参阅 OData 查询参数 了解筛选、排序和分页参数。
示例请求
GET https://outlook.office.com/api/v2.0/me/calendargroups
示例响应
状态代码:200
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/CalendarGroups",
"value": [
{
"@odata.id": "https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/CalendarGroups('AAMkAGI2TGuKAAA=')",
"Id": "AAMkAGI2TGuKAAA=",
"Name": "My Calendars",
"ClassId": "0006f0b7-0000-0000-c000-000000000046",
"ChangeKey": "nfZyf7VcrEKLNoU37KWlkQAAA0x0+g=="
},
{
"@odata.id": "https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/CalendarGroups('AAMkAGI2TGuMAAA=')",
"Id": "AAMkAGI2TGuMAAA=",
"Name": "Other Calendars",
"ClassId": "0006f0b8-0000-0000-c000-000000000046",
"ChangeKey": "nfZyf7VcrEKLNoU37KWlkQAAA0x0/A=="
}
]
}
响应类型
请求的日历组集合。
获取日历组
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.read
- wl.calendars
- wl.contacts_日历
通过 ID 获取日历组。
GET https://outlook.office.com/api/v2.0/me/calendargroups/{calendar_group_id}
备注
请参阅 OData 查询参数 了解筛选、排序和分页参数。
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
calendar_group_id | 字符串 | 日历组 ID。 |
示例请求
GET https://outlook.office.com/api/v2.0/me/calendargroups/AAMkAGI2TGuKAAA=
示例响应
状态代码:200
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/CalendarGroups/$entity",
"@odata.id": "https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/CalendarGroups('AAMkAGI2TGuKAAA=')",
"Id": "AAMkAGI2TGuKAAA=",
"Name": "My Calendars",
"ClassId": "0006f0b7-0000-0000-c000-000000000046",
"ChangeKey": "nfZyf7VcrEKLNoU37KWlkQAAA0x0+g=="
}
响应类型
请求的日历组。
创建日历组
创建日历组。 名称是日历组的唯一可写属性。
备注
Outlook.com 仅支持可通过 ../me/calendars
快捷方式访问的默认日历组。 无法在 Outlook.com 中创建另一个日历组。
创建日历组
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
POST https://outlook.office.com/api/v2.0/me/calendargroups
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
正文参数 | ||
名称 | 字符串 | 日历组的名称。 |
示例请求
POST https://outlook.office.com/api/v2.0/me/calendargroups
Content-Type: application/json
{
"Name": "Birthdays"
}
示例响应
状态代码:201
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/CalendarGroups/$entity",
"@odata.id": "https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/CalendarGroups('AAMkAGE0M4xLGAAA=')",
"@odata.etag": "W/\"Jj9S59cHB0Wq4jXUzBgDvQAAFeN/Rw==\"",
"Id": "AAMkAGE0M4xLGAAA=",
"Name": "Birthdays",
"ChangeKey": "Jj9S59cHB0Wq4jXUzBgDvQAAFeN/Rw==",
"ClassId": "4d969bba-8942-42a0-ae33-c7d4410d1e11"
}
响应类型
新日历组。
更新日历组
更新日历组
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
更改日历组的名称。 Name是唯一可写的日历组属性。
PATCH https://outlook.office.com/api/v2.0/me/calendargroups/{calendar_group_id}
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
calendar_group_id | 字符串 | 日历组 ID。 |
正文参数 | ||
名称 | 字符串 | 已更新的日历组的名称。 |
示例请求
PATCH https://outlook.office.com/api/v2.0/me/calendargroups/AAMkAGE0M4xLGAAA=
Content-Type: application/json
{
"Name": "Holidays"
}
示例响应
{
"@odata.context": "https://outlook.office.com/api/v2.0/$metadata#Me/CalendarGroups/$entity",
"@odata.id": "https://https://outlook.office.com/api/v2.0/Users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/CalendarGroups('AAMkAGE0MGM4xLGAAA=')",
"@odata.etag": "W/\"Jj9S59cHB0Wq4jXUzBgDvQAAFeN/SA==\"",
"Id": "AAMkAGE0MGM4xLGAAA=",
"Name": "Holidays",
"ChangeKey": "Jj9S59cHB0Wq4jXUzBgDvQAAFeN/SA==",
"ClassId": "4d969bba-8942-42a0-ae33-c7d4410d1e11"
}
响应类型
已更新的日历组。
删除日历组
备注
Outlook.com 仅支持可通过 ../me/calendars
快捷方式访问的默认日历组。 不要删除此日历组。
删除日历组
要求的最小范围
以下各项之一:
- https://outlook.office.com/calendars.readwrite
- wl.calendars_更新
- wl.events_创建
DELETE https://outlook.office.com/api/v2.0/me/calendargroups/{calendar_group_id}
必需的参数 | 类型 | 说明 |
---|---|---|
URL 参数 | ||
calendar_group_id | 字符串 | 日历组 ID。 |
示例请求
DELETE https://outlook.office.com/api/v2.0/me/calendargroups/AAMkAGE0MGM4xLGAAA=
示例响应
Status code: 204
后续步骤
无论你准备开始构建应用还是只想了解更多信息,我们都已为你考虑周全。
- 开始使用邮件、日历和联系人 REST API。
- 想要查看一些示例吗? 我们就有。
或者,了解有关使用 Office 365 平台的更多信息: