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 表示的响应中的开始和结束时间。 请参阅此列表了解支持的时区名称。

可以使用_事件_资源中的 OriginalStartTimeZoneOriginalEndTimeZone 属性来查找创建事件时使用的时区。

获取日历视图

要求的最小范围

以下各项之一:

从用户的主日历 (../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

响应类型

指定时间范围内的扩展事件

获取系列主事件和单个事件

要求的最小范围

以下各项之一:

从用户的主日历 (../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"
                }
            }
        }
    ]
}

获取事件实例

要求的最小范围

以下各项之一:

可以获取指定时间范围内某事件的实例(执行)。 如果该事件是 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

获取事件

要求的最小范围

以下各项之一:

通过 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"
            }
        }
    }

同步事件

要求的最小范围

以下各项之一:

从用户的主日历 (../me/calendarview) 或其他日历同步并获取指定时间范围内新的、已更新的或已删除的事件。 一段时间范围内的这类事件集也称为日历视图。 返回的事件可能包括一个定期系列以及单个实例的执行和异常。

同步日历视图通常需要一轮两个或更多同步请求,其中每个同步请求都是 GET 调用。 要同步日历视图,请使用与你获取日历视图十分类似的 GET 方法,区别在于应包含特定的请求标头和 deltaToken 或者 skipToken(视具体情况)。

请求标头

  • 你必须在所有同步请求中指定 "Prefer: odata.track-changes" 标头,但包含从上个同步请求返回的 skipToken 的请求除外。 在第一个响应中,查找 Preference-Applied: odata.track-changes 标头,在继续之前确认资源支持同步。 (以下是有关示例第二响应数据skipToken 的详细信息。)

  • 可以指定 "Prefer: odata.maxpagesize={x}" 标头,以指示同步请求返回的最多事件数。

以下是日历视图中的一轮典型同步事件:

  1. 使用强制性 Prefer: odata.track-changes 标头发出初始 GET 请求。 对同步请求的初始响应始终返回 deltaToken。 (第二个 GET 请求和后续 GET 请求与第一个 GET 请求不同,不同之处在于该请求包括在前一个响应中收到的 deltaTokenskipToken。)

  2. 如果第一个响应返回 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 查询参数。

响应类型

指定时间范围内的扩展事件和缩略事件。

示例

以下示例显示了用于同步用户的默认日历的初始和第二个同步请求。 每个请求指定一次只返回一个完整事件:

  • 初始响应返回一个事件、一个 deltaLinkdeltaToken
  • 第二个请求使用那个 deltatoken。 第二个响应返回一个事件、一个 nextLinkskipToken

要完成同步,请使用从前一个同步请求返回的 skipToken,直到同步响应返回一个 deltaLinkdeltaToken,此时这一轮的同步完成。 保存 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"
}

查找会议时间

要求的最小范围

以下各项之一:

根据组织者和与会者忙/闲状态以及指定为参数的时间或地点约束,查找会议时间建议。

此操作仅适用于 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 指定 trueSuggestionReason 属性中的每个会议建议返回一条理由。 默认值是 false 不返回该属性。 可选
TimeConstraint TimeConstraint 会议的任何时间限制,可以包括会议的性质 (ActivityDomain) 和可能的会议时间段 (TimeSlots)。 如果不指定这个参数,则 FindMeetingTimes 假设 ActivityDomainWork 可选

FindMeetingTimes 检查组织者和与会者的主日历中的空闲/繁忙状态。 根据指定的参数,此操作会建议最佳的会议时间。 下表介绍了可以在 TimeConstraint 参数中指定的限制。

TimeConstraint 中的 ActivityDomain 值 会议时间建议
工时 建议在用户的工作时间范围内,这是在用户的日历配置中定义的,并且可以由用户或管理员自定义。 默认工作时间为星期一至星期五,上午 8 点至下午 5 点(在为邮箱设置的时区内)。 如果未指定 ActivityDomain,则此为默认值。
个人 建议在用户的工作时间内,以及星期六和星期日。 默认为星期一至星期日,上午 8 点至下午 5 点(在为邮箱设置的时区内)。
Unrestricted 建议可以是全年任意一天的任意时间段。
未知 请勿使用此值,因为以后会弃用此值。 当前其行为与 Work 相同。 根据需要更改任何现有代码以使用 WorkPersonalUnrestricted

响应类型

包含各种会议建议类型的 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

创建事件

创建日历事件

要求的最小范围

以下各项之一:

通过发布到日历的 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

更新事件

更新日历事件

要求的最小范围

以下各项之一:

更改事件。 只有你指定的属性才会更改。 如果用户是组织者,则服务器会向所有与会者发送会议更新。

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

响应事件

接受事件

要求的最小范围

以下各项之一:

接受指定的事件。

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 已接受的响应代码表示响应成功。

暂时接受事件

要求的最小范围

以下各项之一:

暂时接受指定的事件。

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 已接受的响应代码表示响应成功。

拒绝事件

要求的最小范围

以下各项之一:

拒绝对指定事件的邀请。

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

删除事件

删除日历事件

要求的最小范围

以下各项之一:

将事件移动到已登录用户的已删除项文件夹中。 如果事件是会议且已登录用户是组织者,则服务器会向所有与会者发送取消信息。

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

获取附件

你可以获取附件集合或获取附件。

获取附件集合

要求的最小范围

以下各项之一:

从特定事件获取附件。

备注

请参阅 OData 查询参数 了解筛选、排序和分页参数。

GET https://outlook.office.com/api/v2.0/me/events/{event_id}/attachments
必需的参数 类型 说明
URL 参数
event_id 字符串 字符串

响应类型

一个附件集合,其类型可以为 FileAttachmentItemAttachment

示例请求

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=="
        }
    ]
}

获取附件

要求的最小范围

以下各项之一:

从特定事件获取附件。

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",
    }
}

创建附件

可以为一个事件创建文件附件或创建项目附件。

创建文件附件

要求的最小范围

以下各项之一:

向一个事件添加文件附件。

POST https://outlook.office.com/api/v2.0/me/events/{event_id}/attachments
必需的参数 类型 说明
URL 参数
event_id 字符串 字符串
正文参数
@odata.type 字符串 #Microsoft.OutlookServices.FileAttachment
名称 字符串 附件的名称。
ContentBytes 二进制 要附加的文件。

响应类型

文件附件

创建项目附件

要求的最小范围

以下各项之一:

向一个事件添加项目附件。

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
}

删除附件

删除事件附件

要求的最小范围

以下各项之一:

删除一个事件的指定附件。 附件可以是 文件附件项目附件

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

获取提醒

从日历中获取两个日期和时间之间的事件提醒列表。

要求的最小范围

以下各项之一:

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。

暂停提醒

暂停提醒,将提醒推迟到新的时间。

要求的最小范围

以下各项之一:

POST https://outlook.office.com/api/v2.0/me/Events('{id}')/SnoozeReminder
必需的参数 类型 说明
URL 参数
id 字符串 事件 ID。
正文参数
NewReminderTime DateTimeTimeZone 触发提醒的新日期和时间。

消除提醒

关闭已触发的提醒。

要求的最小范围

以下各项之一:

POST https://outlook.office.com/api/v2.0/me/Events({id})/DismissReminder
必需的参数 类型 说明
URL 参数
id 字符串 事件 ID。

获取日历

可以获取日历集合或获取一个日历。

获取日历集合

要求的最小范围

以下各项之一:

获取所有用户的日历 (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"
            }
        }
    ]
}

获取日历

要求的最小范围

以下各项之一:

通过 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"
    }
}

响应类型

请求的日历

创建日历

创建日历

要求的最小范围

以下各项之一:

通过使用 ../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"
  }
}

响应类型

日历

更新日历

更新日历

要求的最小范围

以下各项之一:

更改日历的可写属性。

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"
  }
}

响应类型

已更新的日历

删除日历

删除日历

要求的最小范围

以下各项之一:

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 快捷方式访问的默认日历组。

获取日历组集合

要求的最小范围

以下各项之一:

获取邮箱中的日历组。

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=="
        }
    ]
}

响应类型

请求的日历组集合。

获取日历组

要求的最小范围

以下各项之一:

通过 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 中创建另一个日历组。

创建日历组

要求的最小范围

以下各项之一:

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"
}

响应类型

日历组

更新日历组

更新日历组

要求的最小范围

以下各项之一:

更改日历组的名称。 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 快捷方式访问的默认日历组。 不要删除此日历组。

删除日历组

要求的最小范围

以下各项之一:

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

后续步骤

无论你准备开始构建应用还是只想了解更多信息,我们都已为你考虑周全。

或者,了解有关使用 Office 365 平台的更多信息: