Referência da API REST de tarefa do Outlook (beta)

Aplica-se ao: Exchange Online | Office 365 | Hotmail.com | Live.com | MSN.com | Outlook.com | Passport.com

Observação

Esta documentação inclui a API para anexos de referência em tarefas, que está na versão prévia. Os recursos de versão prévia estão sujeitos a alterações antes da finalização e podem violar o código que os utiliza. Por essa razão, em geral, você deve usar somente uma versão de produção de uma API em seu código de produção. Se disponível, v2.0 é, no momento, a versão preferida.

A API REST de Tarefa do Outlook permite criar, ler, sincronizar, atualizar e excluir as tarefas de um usuário protegidas pelo Active Directory do Azure no Office 365. A conta do usuário pode estar no Office 365 ou em uma conta da Microsoft (Hotmail.com, Live.com, MSN.com, Outlook.com e Passport.com).

Observação

Para simplificar a referência, o restante deste artigo usa o Outlook.com para incluir esses domínios de conta da Microsoft.

Não tem interesse na versão beta da API? No sumário à esquerda, vá para a seção de Referência da API REST do Office 365 e selecione a versão desejada.

Visão geral

Você pode usar uma tarefa no Outlook para acompanhar um item de trabalho. Você pode anotar suas datas de início, vencimento ou conclusão real, seu progresso ou status, ou se é recorrente ou requer lembrete.

As tarefas são organizadas em pastas de tarefas que, por sua vez, são organizadas em grupos de tarefas. Cada caixa de correio tem uma pasta de tarefas padrão (com a propriedade NomeTasks) e um grupo de tarefas padrão (a propriedade Nome é My Tasks).

Como usar a API REST da Tarefa

Autenticação

Assim como acontece com outras APIs REST do Outlook, para cada solicitação à API REST de tarefa você deve incluir um token de acesso válido. A obtenção de um token de acesso exige que você se registre e identifique seu aplicativo, e obtenha a autorização adequada.

Saiba mais aqui sobre algumas opções simplificadas de registro e autorização. Tenha isso em mente ao prosseguir com as operações específicas na API de Tarefa.

Versão da API

Essa API foi promovida da versão prévia para o status de Disponibilidade Geral (GA). Há suporte nas versões v2.0 e beta da API REST do Outlook.

Usuário de destino

As solicitações da API de tarefa sempre são realizadas em nome do usuário conectado.

Veja Usar a API REST do Outlook para obter mais informações comuns a todos os subconjuntos da API REST do Outlook.

Parâmetros de URL

Os exemplos neste artigo usam os seguintes espaços reservados como parâmetros de URLs de solicitação REST.

Parâmetro Tipo Descrição
Parâmetros de URL
attachment_id sequência de caracteres O ID numérico de um anexo, exclusivo na caixa de correio do usuário.
folder_id sequência de caracteres O nome de pasta conhecido padrão Tasks ou um ID numérico de uma pasta de tarefas, exclusivo na caixa de correio do usuário.
group_id sequência de caracteres O ID numérico de um grupo de tarefas, exclusivo na caixa de correio do usuário.
task_id sequência de caracteres O ID numérico da tarefa, exclusivo na caixa de correio do usuário.

Especificação das propriedades StartDateTime e DueDateTime

Ao criar uma tarefa:

  • StartDateTime e DueDateTime são opcionais, mas configurar StartDateTime requer a configuração de DueDateTime para a mesma data ou posterior.
  • Se você definir apenas StartDateTime, DueDateTime será automaticamente definida para o mesmo valor que StartDateTime.
  • Se você definir DueDateTime para null, então StartDateTime também será definida automaticamente para null.

Se você optar por definir StartDateTime ou DueDateTime ao criar ou atualizar uma tarefa:

  • Especifique as informações de data e fuso horário.
  • Não especifique um horário específico nessas propriedades, pois o método POST (ou PATCH) sempre o ignora e adota meia-noite no fuso horário especificado.
  • Por padrão, o método POST (ou PATCH) converte o valor para UTC e retorna isso em UTC na resposta.

Por exemplo, se você especificar 26 de abril no Horário Padrão do Leste (EST) na StartDateTime:

  "StartDateTime": {
      "DateTime": "2016-04-26T09:00:00",
      "TimeZone": "Eastern Standard Time"
  }

POST (ou PATCH) ignora a parte da hora, converte a meia-noite de 26 de abril em EST para UTC e retorna esse valor em UTC na resposta:

  "StartDateTime": {
    "DateTime": "2016-04-26T04:00:00.0000000",
    "TimeZone": "UTC"
  }

Você pode usar o cabeçalho Prefer: outlook.timezone para que todas as propriedades relacionadas à data na resposta sejam representadas em um fuso horário diferente de UTC.

As propriedades relacionadas à data no recurso Tarefa incluem o seguinte:

  • CompletedDateTime
  • CreatedDateTime
  • DueDateTime
  • LastModifiedDateTime
  • ReminderDateTime
  • StartDateTime

Por padrão, as operações POST, GET, PATCH e Complete retornam as propriedades relacionadas à data em suas respostas REST em UTC. Você pode usar o cabeçalho Prefer: outlook.timezone para que todas as propriedades relacionadas à data na resposta sejam representadas em um fuso horário diferente de UTC. O exemplo a seguir retorna as propriedades relacionadas à data em EST na resposta correspondente:

Prefer: outlook.timezone="Eastern Standard Time"

Veja Usar a API REST do Outlook para obter mais informações comuns a todos os subconjuntos da API REST do Outlook.

Criar tarefas

Escopo mínimo necessário

Crie uma tarefa. Existem dois cenários principais.

Você pode criar uma tarefa no grupo de tarefas padrão (My Tasks) e na pasta de tarefas padrão (Tasks) da caixa de correio do usuário. Nesse caso, você não precisa especificar nenhum grupo de tarefas ou pasta de tarefas.

POST https://outlook.office.com/api/beta/me/tasks

Você também pode criar uma tarefa em uma pasta de tarefas específica:

POST https://outlook.office.com/api/beta/me/taskfolders('{folder_id}')/tasks

No corpo da solicitação, forneça uma representação JSON da tarefa a ser criada.

Veja mais informações sobre a configuração de StartDateTime e DueDateTime.

Descubra como especificar um determinado fuso horário para todas as propriedades relacionadas à data na resposta.

Resposta

Código do status de sucesso: 201 Criado

Corpo de resposta: A tarefa criada.

Solicitação de amostra

O primeiro exemplo cria uma tarefa na pasta de tarefas especificada e expressa StartDateTime e DueDateTime no Horário Padrão do Pacífico (PST) no corpo da solicitação.

POST https://outlook.office.com/api/beta/me/taskfolders('AAMkADIyAAAhrbPXAAA=')/tasks
Content-Type: application/json

{
  "Subject": "Shop for dinner",
  "StartDateTime": {
      "DateTime": "2016-04-23T18:00:00",
      "TimeZone": "Pacific Standard Time"
  },
  "DueDateTime":  {
      "DateTime": "2016-04-25T13:00:00",
      "TimeZone": "Pacific Standard Time"
  }
}

Resposta de amostra

O método POST ignora a parte da hora no corpo da solicitação e assume que a hora seja sempre meia-noite no fuso horário especificado (PST). Em seguida, por padrão, o método POST converte e mostra todas as propriedades relacionadas à data em UTC na resposta.

Status code: 201 Created

{
  "@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/TaskFolders('AAMkADIyAAAhrbPXAAA%3D')/Tasks/$entity",
  "@odata.id": "https://outlook.office.com/api/beta/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/Tasks('AAMkADIyAAAhrb_PAAA=')",
  "@odata.etag": "W/\"hmM7Eb/jgEec8l3+gkJEawAAIbAOlw==\"",
  "Id": "AAMkADIyAAAhrb_PAAA=",
  "CreatedDateTime": "2016-04-22T05:44:01.2012012Z",
  "LastModifiedDateTime": "2016-04-22T05:44:02.9980882Z",
  "ChangeKey": "1/KC9Vmu40G3DwB6Lgs7MAAAIOJMxw==",
  "Categories": [ ],
  "AssignedTo": null,
  "Body": {
    "ContentType": "Text",
    "Content": ""
  },
  "CompletedDateTime": null,
  "DueDateTime": {
    "DateTime": "2016-04-25T07:00:00.0000000",
    "TimeZone": "UTC"
  },
  "HasAttachments":false,
  "Importance": "Normal",
  "IsReminderOn": false,
  "Owner": "Administrator",
  "ParentFolderId": "AQMkADA1MTkAAAAIBEgAAAA==",
  "Recurrence": null,
  "ReminderDateTime": null,
  "Sensitivity": "Normal",
  "StartDateTime": {
    "DateTime": "2016-04-23T07:00:00.0000000",
    "TimeZone": "UTC"
  },
  "Status": "NotStarted",
  "Subject": "Shop for dinner"
}

Solicitação de amostra

Para mostrar como o cabeçalho Prefer: outlook.timezone funciona, o próximo exemplo cria uma tarefa, expressa StartDateTime e DueDateTime no Horário Padrão do Leste (EST) e inclui um Prefer cabeçalho para o Horário Padrão do Pacífico (PST).

POST https://outlook.office.com/api/beta/me/tasks HTTP/1.1

Content-Type: application/json
Prefer: outlook.timezone="Pacific Standard Time"

{
  "Subject": "Shop for children's weekend",
  "StartDateTime": {
      "DateTime": "2016-05-03T09:00:00",
      "TimeZone": "Eastern Standard Time"
  },
  "DueDateTime":  {
      "DateTime": "2016-05-05T16:00:00",
      "TimeZone": "Eastern Standard Time"
  }
}

Resposta de amostra

Assim como no último exemplo, o método POST ignora a parte da hora de StartDateTime e DueDateTime no corpo da solicitação e assume que a hora sempre seja meia-noite no fuso horário especificado (EST).

Como o cabeçalho Prefer especifica PST, o método POST expressa todas as propriedades relacionadas à data na resposta em PST. Em particular, para as propriedades StartDateTime e DueDateTime, o método POST converte meia-noite em EST para PST e os retorna em PST na resposta.

Status code: 201 Created

{
    "@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/Tasks/$entity",
    "@odata.id": "https://outlook.office.com/api/beta/Users('86b6ceaf-57f7-4278-97c4-4da0a97f6cdb@70559e59-b378-49ea-8e53-07a3a3d27f5b')/Tasks('AAMkADA1MHgwAAA=')",
    "@odata.etag": "W/\"1/KC9Vmu40G3DwB6Lgs7MAAAIW9XXA==\"",
    "Id": "AAMkADA1MHgwAAA=",
    "CreatedDateTime": "2016-04-22T15:19:18.9526004-07:00",
    "LastModifiedDateTime": "2016-04-22T15:19:19.015101-07:00",
    "ChangeKey": "1/KC9Vmu40G3DwB6Lgs7MAAAIW9XXA==",
    "Categories": [
    ],
    "AssignedTo": null,
    "Body": {
        "ContentType": "Text",
        "Content": ""
    },
    "CompletedDateTime": null,
    "DueDateTime": {
        "DateTime": "2016-05-04T21:00:00.0000000",
        "TimeZone": "Pacific Standard Time"
    },
    "HasAttachments":false,
    "Importance": "Normal",
    "IsReminderOn": false,
    "Owner": "Administrator",
    "ParentFolderId": "AQMkADA1MTEgAAAA==",
    "Recurrence": null,
    "ReminderDateTime": null,
    "Sensitivity": "Normal",
    "StartDateTime": {
        "DateTime": "2016-05-02T21:00:00.0000000",
        "TimeZone": "Pacific Standard Time"
    },
    "Status": "NotStarted",
    "Subject": "Shop for children's weekend"
}

Obter tarefas

Obter todas as tarefas

Escopo mínimo necessário

Obter várias tarefas.

Você pode obter todas as tarefas na caixa de correio do usuário conectado.

GET https://outlook.office.com/api/beta/me/tasks

Ou você pode obter todas as tarefas em uma pasta específica:

GET https://outlook.office.com/api/beta/me/taskfolders('{folder_id}')/tasks

Se houver mais de um grupo de tarefas e você quiser obter todas as tarefas em um grupo de tarefas específico, primeiro obtenha todas as pastas de tarefas nesse grupo de tarefase, em seguida, obtenha as tarefas em cada uma dessas pastas de tarefas.

Resposta

Código de status de sucesso: 200 OK

Corpo de resposta: Uma coleção de tarefas

Por padrão, as propriedades relacionadas à data na resposta são expressas em UTC. Descubra como especificar um determinado fuso horário para todas as propriedades relacionadas à data na resposta.

Solicitação de amostra

O exemplo a seguir obtém todas as tarefas na caixa de correio do usuário.

GET https://outlook.office.com/api/beta/me/tasks

Resposta de amostra

Status code: 200 OK

{
  "@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/Tasks",
  "value": [
    {
      "@odata.id": "https://outlook.office.com/api/beta/Users('86b6ceaf-57f7-4278-97c4-4da0a97f6cdb@70559e59-b378-49ea-8e53-07a3a3d27f5b')/Tasks('AAMkADA1MTrfAAA=')",
      "@odata.etag": "W/\"1/KC9Vmu40G3DwB6Lgs7MAAAIOJMxw==\"",
      "Id": "AAMkADA1MTrfAAA=",
      "CreatedDateTime": "2016-04-22T05:44:01.2012012Z",
      "LastModifiedDateTime": "2016-04-22T05:44:02.9980882Z",
      "ChangeKey": "1/KC9Vmu40G3DwB6Lgs7MAAAIOJMxw==",
      "Categories": [ ],
      "AssignedTo": null,
      "Body": {
        "ContentType": "Text",
        "Content": ""
      },
      "CompletedDateTime": null,
      "DueDateTime": {
        "DateTime": "2016-04-25T07:00:00.0000000",
        "TimeZone": "UTC"
      },
      "HasAttachments":false,
      "Importance": "Normal",
      "IsReminderOn": false,
      "Owner": "Administrator",
      "ParentFolderId": "AQMkADA1MTBEgAAAA==",
      "Recurrence": null,
      "ReminderDateTime": null,
      "Sensitivity": "Normal",
      "StartDateTime": {
        "DateTime": "2016-04-23T07:00:00.0000000",
        "TimeZone": "UTC"
      },
      "Status": "NotStarted",
      "Subject": "Shop for dinner"
    },
    {
      "@odata.id": "https://outlook.office.com/api/beta/Users('86b6ceaf-57f7-4278-97c4-4da0a97f6cdb@70559e59-b378-49ea-8e53-07a3a3d27f5b')/Tasks('AAMkADA1MTrgAAA=')",
      "@odata.etag": "W/\"1/KC9Vmu40G3DwB6Lgs7MAAAIOJMyQ==\"",
      "Id": "AAMkADA1MTrgAAA=",
      "CreatedDateTime": "2016-04-22T06:03:35.9279794Z",
      "LastModifiedDateTime": "2016-04-22T06:03:35.9436052Z",
      "ChangeKey": "1/KC9Vmu40G3DwB6Lgs7MAAAIOJMyQ==",
      "Categories": [ ],
      "AssignedTo": null,
      "Body": {
        "ContentType": "Text",
        "Content": ""
      },
      "CompletedDateTime": null,
      "DueDateTime": {
        "DateTime": "2016-04-27T04:00:00.0000000",
        "TimeZone": "UTC"
      },
      "HasAttachments":false,
      "Importance": "Normal",
      "IsReminderOn": false,
      "Owner": "Administrator",
      "ParentFolderId": "AQMkADA1MTBEgAAAA==",
      "Recurrence": null,
      "ReminderDateTime": null,
      "Sensitivity": "Normal",
      "StartDateTime": {
        "DateTime": "2016-04-26T04:00:00.0000000",
        "TimeZone": "UTC"
      },
      "Status": "NotStarted",
      "Subject": "Shop for dinner"
    }
  ]
}

Obter uma tarefa

Escopo mínimo necessário

Obter uma tarefa específica.

GET https://outlook.office.com/api/beta/me/tasks('{task_id}')

Resposta

Código de status de sucesso: 200 OK

Corpo de resposta: A tarefa solicitada.

Por padrão, as propriedades relacionadas à data na resposta são expressas em UTC. Descubra como especificar um determinado fuso horário para todas as propriedades relacionadas à data na resposta.

Solicitação de amostra

GET https://outlook.office.com/api/beta/me/tasks('AAMkADA1MTrgAAA=') 

Resposta de amostra

Status code: 200 OK

{
  "@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/Tasks/$entity",
  "@odata.id": "https://outlook.office.com/api/beta/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/Tasks('AAMkADA1MTrgAAA=')",
  "@odata.etag": "W/\"hmM7Eb/jgEec8l3+gkJEawAAIa/+kw==\"",
  "Id": "AAMkADA1MTrgAAA=",
  "CreatedDateTime": "2016-04-22T06:03:35.9279794Z",
  "LastModifiedDateTime": "2016-04-22T06:03:35.9436052Z",
  "ChangeKey": "1/KC9Vmu40G3DwB6Lgs7MAAAIOJMyQ==",
  "Categories": [ ],
  "AssignedTo": null,
  "Body": {
    "ContentType": "Text",
    "Content": ""
  },
  "CompletedDateTime": null,
  "DueDateTime": {
    "DateTime": "2016-04-27T04:00:00.0000000",
    "TimeZone": "UTC"
  },
  "HasAttachments":false,
  "Importance": "Normal",
  "IsReminderOn": false,
  "Owner": "Administrator",
  "ParentFolderId": "AQMkADA1MTBEgAAAA==",
  "Recurrence": null,
  "ReminderDateTime": null,
  "Sensitivity": "Normal",
  "StartDateTime": {
    "DateTime": "2016-04-26T04:00:00.0000000",
    "TimeZone": "UTC"
  },
  "Status": "NotStarted",
  "Subject": "Shop for dinner"
}

Atualizar tarefas

Escopo mínimo necessário

Altere as propriedades graváveis ​​de uma tarefa.

PATCH https://outlook.office.com/api/beta/me/tasks/{task_id}

No corpo da solicitação, forneça uma representação JSON das propriedades graváveis ​​a serem atualizadas na tarefa.

Veja mais informações sobre a configuração de StartDateTime e DueDateTime.

A propriedade CompletedDateTime pode ser definida pela ação Concluir, ou explicitamente por uma operação PATCH. Se você usar PATCH para definir CompletedDateTime, certifique-se de definir o Status para Completed também.

Por padrão, as propriedades relacionadas à data na resposta são expressas em UTC. Descubra como especificar um determinado fuso horário para todas as propriedades relacionadas à data na resposta.

Resposta

Código de status de sucesso: 200 OK

Corpo de resposta: A tarefa atualizada.

Solicitação de amostra

O exemplo a seguir modifica DueDateTime e usa o cabeçalho Prefer: outlook.timezone para especificar as propriedades relacionadas à data a serem expressas no Horário Padrão do Leste (EST) na resposta.

PATCH https://outlook.office.com/api/beta/me/tasks('AAMkADA1MTHgwAAA=')

Prefer: outlook.timezone="Eastern Standard Time"
Content-Type: application/json

{
  "DueDateTime":  {
      "DateTime": "2016-05-06T16:00:00",
      "TimeZone": "Eastern Standard Time"
  }
}

Resposta de amostra

Status code: 200 OK

{
  "@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/Tasks/$entity",
  "@odata.id": "https://outlook.office.com/api/beta/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/Tasks('AAMkADA1MTHgwAAA=')",
  "@odata.etag": "W/\"hmM7Eb/jgEec8l3+gkJEawAAIa/+lg==\"",
  "Id": "AAMkADA1MTHgwAAA=",
    "CreatedDateTime": "2016-04-22T18:19:18.9526004-04:00",
    "LastModifiedDateTime": "2016-04-22T18:38:20.5541528-04:00",
    "ChangeKey": "1/KC9Vmu40G3DwB6Lgs7MAAAIW9XXg==",
    "Categories": [
    ],
    "AssignedTo": null,
    "Body": {
        "ContentType": "Text",
        "Content": ""
    },
    "CompletedDateTime": null,
    "DueDateTime": {
        "DateTime": "2016-05-06T00:00:00.0000000",
        "TimeZone": "Eastern Standard Time"
    },
    "HasAttachments":false,
    "Importance": "Normal",
    "IsReminderOn": false,
    "Owner": "Administrator",
    "ParentFolderId": "AQMkADA1MTIBEgAAAA==",
    "Recurrence": null,
    "ReminderDateTime": null,
    "Sensitivity": "Normal",
    "StartDateTime": {
        "DateTime": "2016-05-03T00:00:00.0000000",
        "TimeZone": "Eastern Standard Time"
    },
    "Status": "NotStarted",
    "Subject": "Shop for children's weekend"
}

Excluir tarefas

Escopo mínimo necessário

Exclua a tarefa especificada na caixa de correio do usuário.

DELETE https://outlook.office.com/api/beta/me/tasks('{task_id}')

Resposta

Código de status de sucesso: 204 Sem Conteúdo

Corpo de Resposta: Nenhum

Solicitação de amostra

DELETE https://outlook.office365.com/api/beta/me/tasks('AAMkADIyAAAhrb_QAAA=')

Resposta de amostra

Status code: 204 No Content

Tarefas concluídas

Escopo mínimo necessário

Conclua uma tarefa e defina a propriedade CompletedDateTime para a data atual e a propriedade Status para Completed.

POST https://outlook.office.com/api/beta/me/tasks('{task_id}')/complete

Observação

CompletedDateTime representa a data em que a tarefa é finalizada. A parte da hora de CompletedDateTime é definida como meia-noite UTC por padrão.

Um aplicativo pode especificar um fuso horário personalizado em um Prefer cabeçalho de solicitação. O seguinte é um exemplo para definir CompletedDateTime para o fuso horário do Horário Padrão do Pacífico (PST):

Prefer: outlook.timezone="Pacific Standard Time"

Esse cabeçalho de solicitação define todas as propriedades relacionadas à data na resposta para o fuso horário especificado.

Resposta

Código de status de sucesso: 200 OK

Corpo de resposta: A tarefa concluída em uma coleção de tarefas. Se você estiver concluindo uma tarefa em uma série recorrente, a coleção de tarefas conterá a tarefa concluída na série e a próxima tarefa na série.

Solicitação de amostra

O exemplo a seguir marca a tarefa especificada como concluída. Como especifica o Horário Padrão do Pacífico (PST) no cabeçalho Prefer: outlook.timezone, CompletedDateTime e outras propriedades relacionadas a datas na resposta são expressas em PST.

POST https://outlook.office.com/api/beta/me/tasks('AAMkADA1MT15rfAAA=')/complete

Prefer: outlook.timezone="Pacific Standard Time"

Resposta de amostra

Status code: 200 OK

{
  "@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/Tasks",
  "value": [
    {
      "@odata.id": "https://outlook.office365.com/api/beta/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/Tasks('AAMkADA1MT15rfAAA=')",
      "@odata.etag": "W/\"hmM7Eb/jgEec8l3+gkJEawAAIa/+lw==\"",
      "Id": "AAMkADA1MT15rfAAA=",
      "CreatedDateTime": "2016-04-21T22:44:01.2012012-07:00",
      "LastModifiedDateTime": "2016-04-22T19:28:38.5300447-07:00",
      "ChangeKey": "1/KC9Vmu40G3DwB6Lgs7MAAAIW9XYQ==",
      "Categories": [
      ],
      "AssignedTo": null,
      "Body": {
          "ContentType": "Text",
          "Content": ""
      },
      "CompletedDateTime": {
          "DateTime": "2016-04-22T00:00:00.0000000",
          "TimeZone": "Pacific Standard Time"
      },
      "DueDateTime": {
          "DateTime": "2016-04-25T00:00:00.0000000",
          "TimeZone": "Pacific Standard Time"
      },
      "HasAttachments":false,
      "Importance": "Normal",
      "IsReminderOn": false,
      "Owner": "Administrator",
      "ParentFolderId": "AQMkADA1MTIBEgAAAA==",
      "Recurrence": null,
      "ReminderDateTime": null,
      "Sensitivity": "Normal",
      "StartDateTime": {
          "DateTime": "2016-04-21T00:00:00.0000000",
          "TimeZone": "Pacific Standard Time"
      },
      "Status": "Completed",
      "Subject": "Shop for dinner"
    }
  ]
}

Sincronizar tarefas ou pastas de tarefas

Escopo mínimo necessário

Você pode sincronizar tarefas em uma pasta de tarefas ou pastas de tarefas na caixa de correio de um usuário. Sincronizar tarefas é uma operação por pasta, por exemplo, você pode sincronizar todas as tarefas em sua pasta de tarefas padrão Tasks. Para sincronizar as mensagens em uma hierarquia de pastas, você precisa sincronizar cada pasta individualmente. Os processos para sincronizar tarefas ou pastas de tarefas são semelhantes, normalmente exigindo uma rodada de duas ou mais solicitações de sincronização, cada uma das quais é uma chamada GET.

Use o método GET da mesma maneira que você obteve tarefas em uma pastaou obteve pastas de tarefas em uma caixa de correio, a diferença é que neste caso você inclui determinados cabeçalhos de solicitação, e deltaToken ou um skipToken quando apropriado.

Cabeçalhos de solicitação

  • Você deve especificar o cabeçalho Prefer: odata.track-changes em todas as solicitações de sincronização, exceto aquelas que incluem skipToken que é retornado de uma solicitação de sincronização anterior. Na primeira resposta, procure o cabeçalho Preference-Applied: odata.track-changes para confirmar que o recurso suporta a sincronização antes de continuar. (Mais informações sobre um skipToken no exemplo de dados de segunda resposta para tarefas, se você estiver sincronizando tarefas, ou exemplo de dados de segunda resposta para pastas de tarefas, se você estiver sincronizando pastas de tarefas.)
  • Você pode especificar o cabeçalho Prefer: odata.maxpagesize={x} para indicar o número máximo de tarefas (ou pastas de tarefas, dependendo de qual você está sincronizando) que cada solicitação de sincronização retorna.

Aqui está uma típica rodada de mensagens de sincronização:

  1. Faça a solicitação GET inicial com o cabeçalho obrigatório Prefer: odata.track-changes. A resposta inicial a uma solicitação de sincronização sempre retorna um deltaToken. (A segunda solicitação GET e as solicitações seguintes diferem da primeira solicitação GET, incluindo um deltaToken ou um skipToken recebido em uma resposta anterior.)

  2. Se a primeira resposta retornar o cabeçalho Preference-Applied: odata.track-changes, você poderá prosseguir com a sincronização do recurso.

    • Faça uma segunda solicitação GET. Especifique o cabeçalho Prefiro: odata.track-changes e o deltaToken retornado da primeira GET para determinar se há alguma instância adicional do recurso para sincronizar. A segunda solicitação retornará instâncias adicionais e um skipToken, se houver mais instâncias disponíveis, ou um deltaToken, se a última instância foi sincronizada, se esse for o caso você pode parar.

    • Continue a sincronização enviando uma chamada GET e incluindo um skipToken retornado da chamada anterior. Pare quando você obtiver uma resposta final que contenha o cabeçalho @odata.deltaLink com um deltaToken novamente, indicando que a sincronização está concluída.

Veja a sintaxe das chamadas iniciais e seguintes em uma série de sincronização.

Para sincronizar tarefas em uma pasta de tarefas

Solicitação inicial:

GET https://outlook.office.com/api/beta/me/TaskFolders('{folder_id}')/Tasks

Segunda ou primeira solicitação de uma rodada seguinte:

GET https://outlook.office.com/api/beta/me/TaskFolders('{folder_id}')/Tasks/?$deltatoken={delta_token}

Terceira solicitação ou solicitação subsequente na mesma rodada; pare quando você receber uma resposta que contenha um cabeçalho @odata.deltaLink com um deltaToken novamente:

GET https://outlook.office.com/api/beta/me/TaskFolders('{folder_id}')/Tasks/?$skiptoken={skip_token}

Para sincronizar pastas de tarefas em uma caixa de correio

Solicitação inicial:

GET https://outlook.office.com/api/beta/me/TaskFolders

Segunda ou primeira solicitação de uma rodada seguinte:

GET https://outlook.office.com/api/beta/me/TaskFolders/?$deltatoken={delta_token}

Terceira solicitação ou solicitação subsequente na mesma rodada; pare quando você receber uma resposta que contenha um cabeçalho @odata.deltaLink com um deltaToken novamente:

GET https://outlook.office.com/api/beta/me/TaskFolders/?$skiptoken={skip_token}

Parâmetros

Parâmetro Tipo Descrição
Parâmetros do cabeçalho
Preferir odata.track-changes Indica que a solicitação é uma solicitação de sincronização. Necessário para as duas primeiras solicitações GET em uma rodada.
Preferir odata.maxpagesize Define o número de mensagens a serem retornadas em cada resposta. Opcional.
Parâmetros de URL
deltaToken sequência de caracteres A sequência de caracteres deltaToken retornada como parte do valor de @odata.deltaLink na resposta de sincronização anterior.
skipToken sequência de caracteres A sequência de caracteres skipToken retornada como parte do valor de @odata.nextLink na resposta de sincronização anterior.

Observação

  • Ao especificar Prefer: odata.track-changes na solicitação inicial, se a resposta oferecer suporte à sincronização, a resposta incluiria Preference-applied: odata.track-changes no cabeçalho.
  • Se você tentar sincronizar um recurso que não é suportado ou se essa não for a solicitação de sincronização inicial, você não verá o cabeçalhoPreference-applied na resposta.
  • Para um melhor tempo de resposta, use o parâmetro de consulta $select para obter apenas as propriedades úteis para seu cenário.
  • Não é possível usar o $filter, $orderby, $search, e $top parâmetros de consulta.

Corpo da resposta

  • Se for sincronizar tarefas: os objetos de Tarefa solicitados em uma coleção.

  • Se sincronizar pastas de tarefas: os objetos TaskFolder solicitados em uma coleção.

O número de objetos depende do valor definido no cabeçalho de solicitação Prefer: odata.maxpagesize.

Exemplo

A seguir, mostramos dois conjuntos de exemplos:

Cada exemplo mostra as solicitações de sincronização iniciais e secundárias.

  • Cada solicitação especifica Prefer: odata.maxpagesize=1 para retornar apenas um objeto (tarefa ou pasta de tarefas, respectivamente) por vez.
  • A resposta inicial retorna um objeto sincronizado, um deltaLink e deltaToken.
  • A segunda solicitação usa deltatoken. A segunda resposta retorna um objeto sincronizado, um nextLink e skipToken.

Iterar através do processo de sincronização e usar na próxima chamada GET o skipToken retornado da solicitação de sincronização anterior até você receber uma resposta de sincronização que contenha deltaLink e deltaToken como abaixo:

"@odata.deltaLink": “https://outlook.office.com/api/beta/me/TaskFolders('AQMkAGMw80AAAIBEgAAAA==')/Tasks/?%24deltaToken=294a8f04cc0345c5ae093d484629e186”

Quando isso acontece, essa rodada de sincronização é concluída. Salve o deltaToken para a próxima série de sincronização.

Exemplo de solicitação inicial (sincronizar tarefas)

    GET https://outlook.office.com/api/beta/me/TaskFolders('AQMkAGMwAAAIBEgAAAA==')/Tasks HTTP/1.1
    Prefer: odata.maxpagesize=1
  Prefer: odata.track-changes

Exemplo de dados de resposta inicial (sincronizar tarefas)

HTTP/1.1 200 OK
Preference-Applied: odata.track-changes

{
  "@odata.context": "https://outlook.office.com/api/beta/$metadata#me/TaskFolders('AQMkAGMwAAAIBEgAAAA%3D%3D')/Tasks",
  "value": [
    {
      "@odata.id": "https://outlook.office.com/api/beta/Users('47ec4680-f443-4f9c-a3e5-f7660f0aceae@b4ffe6c0-e717-4104-acd1-e9dfe38ff5f9')/Tasks('AAMkAGMwQsKVevNAAAG1VNmAAA=')",
      "@odata.etag": "W/\"3JfzyLwJe0mPNcULClXrzQAABtYBDw==\"",
      "Id": "AAMkAGMwQsKVevNAAAG1VNmAAA=",
      "CreatedDateTime": "2016-02-29T20:51:25.2226052Z",
      "LastModifiedDateTime": "2016-02-29T20:51:25.2538576Z",
      "ChangeKey": "3JfzyLwJe0mPNcULClXrzQAABtYBDw==",
      "Categories": [ ],
      "AssignedTo": null,
      "Body": {
        "ContentType": "Text",
        "Content": ""
      },
      "CompletedDateTime": null,
      "DueDateTime": null,
      "HasAttachments":false,
      "Importance": "Normal",
      "IsReminderOn": false,
      "Owner": "Administrator",
      "ParentFolderId": "AQMkAGMwAAAIBEgAAAA==",
      "Recurrence": null,
      "ReminderDateTime": null,
      "Sensitivity": "Normal",
      "StartDateTime": null,
      "Status": "NotStarted",
      "Subject": "another task"
    }
  ],
  "@odata.deltaLink": "https://outlook.office.com/api/beta/me/TaskFolders('AQMkAGMwAAAIBEgAAAA==')/Tasks/?%24deltatoken=175e2e04482e431ea96e89145c212f8c"
}

Exemplo de segunda solicitação (sincronizar tarefas)

    GET https://outlook.office.com/api/beta/me/TaskFolders('AQMkAGMwAAAIBEgAAAA==')/Tasks/?%24deltatoken=175e2e04482e431ea96e89145c212f8c HTTP/1.1
    Prefer: odata.maxpagesize=1
  Prefer: odata.track-changes

Exemplo de dados de segunda resposta (sincronizar tarefas)

HTTP/1.1 200 OK

{
  "@odata.context": "https://outlook.office.com/api/beta/$metadata#me/TaskFolders('AQMkAGMwAAAIBEgAAAA%3D%3D')/Tasks/$delta",
  "value": [
    {
      "@odata.id": "https://outlook.office.com/api/beta/Users('47ec4680-f443-4f9c-a3e5-f7660f0aceae@b4ffe6c0-e717-4104-acd1-e9dfe38ff5f9')/Tasks('AAMkAGMwQsKVevNAAAG1VNlAAA=')",
      "@odata.etag": "W/\"3JfzyLwJe0mPNcULClXrzQAABtYBDQ==\"",
      "Id": "AAMkAGMwQsKVevNAAAG1VNlAAA=",
      "CreatedDateTime": "2016-02-29T20:51:02.5955351Z",
      "LastModifiedDateTime": "2016-02-29T20:51:03.9703679Z",
      "ChangeKey": "3JfzyLwJe0mPNcULClXrzQAABtYBDQ==",
      "Categories": [ ],
      "AssignedTo": null,
      "Body": {
        "ContentType": "Text",
        "Content": ""
      },
      "CompletedDateTime": null,
      "DueDateTimeTime": null,
      "HasAttachments":false,
      "Importance": "Normal",
      "IsReminderOn": false,
      "Owner": "Administrator",
      "ParentFolderId": "AQMkAGMwAAAIBEgAAAA==",
      "Recurrence": null,
      "ReminderDateTime": null,
      "Sensitivity": "Normal",
      "StartDateTime": null,
      "Status": "NotStarted",
      "Subject": "another task"
    }
  ],
  "@odata.nextLink": "https://outlook.office.com/api/beta/me/TaskFolders('AQMkAGMw80AAAIBEgAAAA==')/Tasks/?%24skipToken=0fbce2031e844a2f9d13d8bee5ebe2c6"
}

Continue sincronizando tarefas e use na próxima chamada GET o skiptoken retornado em @odata.nextLink da resposta anterior, até que a resposta final contenha um @odata.deltaLink e um deltaToken. Salve o deltaToken para a próxima série de sincronização.

Exemplo de solicitação inicial (sincronizar pastas de tarefas)

    GET https://outlook.office.com/api/beta/me/TaskFolders HTTP/1.1
    Prefer: odata.maxpagesize=1
    Prefer: odata.track-changes

Exemplo de dados de resposta inicial (sincronizar pastas de tarefas)

HTTP/1.1 200 OK
Preference-Applied: odata.track-changes

{
    "@odata.context": "https://outlook.office.com/api/beta/$metadata#me/TaskFolders",
    "value": [
        {
            "@odata.id": "https://outlook.office.com/api/beta/Users('5bcd7334-a6c5-4f95-a370-319e077dfe10@e288a0d0-ab74-431b-9699-a3721aabb08f')/TaskFolders('AAMkAGJiAAAAAAESAAA=')",
            "Id": "AAMkAGJiAAAAAAESAAA=",
            "ChangeKey": "PG2a661l00Cy9qH3YxmDfwAAAAAAPA==",
            "Name": "Tasks",
            "IsDefaultFolder":true,
            "ParentGroupKey": "0006f0b7-0000-0000-c000-000000000046"
        }
    ],
    "@odata.deltaLink": "https://outlook.office.com/api/beta/me/TaskFolders/?%24deltatoken=OyZKBDxtmuutZdNAsvah92MZg38AAAAAZwkBAAAA"
}

Exemplo de segunda solicitação (sincronizar pastas de tarefas)

    GET https://outlook.office.com/api/beta/me/TaskFolders/?%24deltatoken=OyZKBDxtmuutZdNAsvah92MZg38AAAAAZwkBAAAA HTTP/1.1
    Prefer: odata.maxpagesize=1
    Prefer: odata.track-changes

Exemplo de dados de segunda resposta (sincronizar pastas de tarefas)

HTTP/1.1 200 OK

{
    "@odata.context": "https://outlook.office.com/api/beta/$metadata#me/TaskFolders/$delta",
    "value": [
        {
            "@odata.id": "https://outlook.office.com/api/beta/Users('5bcd7334-a6c5-4f95-a370-319e077dfe10@e288a0d0-ab74-431b-9699-a3721aabb08f')/TaskFolders('AAMkAGI5AAAunDbWAAA=')",
            "Id": "AAMkAGI5AAAunDbWAAA=",
            "ChangeKey": "PmebZ1wYAUaTmrKkvU9LIQAALqEkaw==",
            "Name": "Bingo",
            "IsDefaultFolder":false,
            "ParentGroupKey": "db0823f2-93bd-4db6-8038-98bbc5f39a45"
        }
    ],
    "@odata.nextLink": "https://outlook.office.com/api/beta/me/TaskFolders/?%24skipToken=x_zCAz5nm2dcGAFGk5qypL1PSyEAAC6cRncCAAAA"
}

Continue sincronizando tarefas e use na próxima chamada GET o skiptoken retornado em @odata.nextLink da resposta anterior, até que a resposta final contenha um @odata.deltaLink e um deltaToken. Neste exemplo, a terceira solicitação retorna um deltaToken e a sincronização está concluída para esta rodada.

Exemplo de terceira solicitação (sincronizar pastas de tarefas)

    GET https://outlook.office.com/api/beta/me/TaskFolders/?%24skipToken=x_zCAz5nm2dcGAFGk5qypL1PSyEAAC6cRncCAAAA HTTP/1.1
    Prefer: odata.maxpagesize=1

Exemplo de dados da terceira resposta (sincronizar pastas de tarefas)

HTTP/1.1 200 OK

{
    "@odata.context": "https://outlook.office.com/api/beta/$metadata#me/TaskFolders/$delta",
    "value": [
        {
            "@odata.id": "https://outlook.office.com/api/beta/Users('5bcd7334-a6c5-4f95-a370-319e077dfe10@e288a0d0-ab74-431b-9699-a3721aabb08f')/TaskFolders('AAMkAGI5AAAunDbVAAA=')",
            "Id": "AAMkAGI5AAAunDbVAAA=",
            "ChangeKey": "PmebZ1wYAUaTmrKkvU9LIQAALqEkZA==",
            "Name":"Volunteer",
            "IsDefaultFolder":false,
            "ParentGroupKey": "db0823f2-93bd-4db6-8038-98bbc5f39a45"
        }
    ],
    "@odata.deltaLink":"https://outlook.office.com/api/beta/me/taskfolders/?%24deltaToken=x_zCBD5nm2dcGAFGk5qypL1PSyEAAC6cRncEAAAA"
}

Obter anexos

Obter uma coleção de anexos

Escopo mínimo necessário

Obter os anexos de uma tarefa específica.

GET https://outlook.office.com/api/beta/me/tasks('{task_id}')/attachments

Tipo de resposta

Uma coleção de anexos que pode ser do tipo FileAttachment ou ItemAttachment ou ReferenceAttachment.

Solicitação de amostra

O exemplo a seguir retorna todos os anexos da tarefa especificada, que incluem um arquivo, um item de evento e um link para uma imagem no OneDrive.

GET https://outlook.office.com/api/beta/me/tasks('AAMkADNkN3qGAAA=')/attachments

Resposta de amostra

Código de status: 200

{
    "@odata.context":"https://outlook.office.com/api/beta/$metadata#Me/Tasks('AAMkADNkNS3qGAAA%3D')/Attachments",
    "value":[
        {
            "@odata.type":"#Microsoft.OutlookServices.FileAttachment",
            "@odata.id":"https://outlook.office.com/api/beta/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkNS3qGAAA=')/Attachments('AAMkADNkNRT6JOBs=')",
            "Id":"AAMkADNkNRT6JOBs=",
            "LastModifiedDateTime":"2016-11-22T02:24:21Z",
            "Name":"Holiday notice",
            "ContentType":"application/octet-stream",
            "Size":244,
            "IsInline":false,
            "ContentId":null,
            "ContentLocation":null,
            "ContentBytes":"bWFjIGFuZCBjaGVlc2U="
        },
        {
            "@odata.type":"#Microsoft.OutlookServices.ItemAttachment",
            "@odata.id":"https://outlook.office.com/api/beta/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkNS3qGAAA=')/Attachments('AAMkADNkNJVnQIe9r0=')",
            "Id":"AAMkADNkNJVnQIe9r0=",
            "LastModifiedDateTime":"2016-12-01T22:27:13Z",
            "Name":"Holiday event",
            "ContentType":null,
            "Size":2473,
            "IsInline":false
        },
        {
            "@odata.type":"#Microsoft.OutlookServices.ReferenceAttachment",
            "@odata.id":"https://outlook.office.com/api/beta/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkNS3qGAAA=')/Attachments('AAMkADNkNLiMhtEYg=')",
            "Id":"AAMkADNkNLiMhtEYg=",
            "LastModifiedDateTime":"2016-12-07T21:14:05Z",
            "Name":"Hydrangea picture",
            "ContentType":null,
            "Size":850,
            "IsInline":true,
            "SourceUrl":"https://contoso-my.sharepoint.com/personal/admin_contoso_onmicrosoft_com/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fadmin%5Fcontoso%5Fonmicrosoft%5Fcom%2FDocuments%2FHydrangeas%2Ejpg&parent=%2Fpersonal%2Fadmin%5Fcontoso%5Fonmicrosoft%5Fcom%2FDocuments",
            "ProviderType":"OneDriveBusiness",
            "ThumbnailUrl":null,
            "PreviewUrl":null,
            "Permission":"Edit",
            "IsFolder":false
        }
    ]
}

Obter um anexo

Escopo mínimo necessário

Obter um anexo em uma tarefa específica.

GET https://outlook.office.com/api/beta/me/tasks('{task_id}')/attachments('{attachment_id}')

Tipo de resposta

Oanexo de arquivo, anexo de item ou anexo de referência solicitado.

Solicitação de amostra (anexo de arquivo)

O exemplo a seguir obtém um anexo específico em uma tarefa, que é um anexo de arquivo.

GET https://outlook.office.com/api/beta/me/tasks('AAMkADNkNS3qGAAA=')/attachments('AAMkADNkNJVnQIe9r0=')

Resposta de amostra

Código de status: 200

{
    "@odata.context":"https://outlook.office.com/api/beta/$metadata#Me/Tasks('AAMkADNkNS3qGAAA%3D')/Attachments/$entity",
    "@odata.type":"#Microsoft.OutlookServices.FileAttachment",
    "@odata.id":"https://outlook.office.com/api/beta/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkNS3qGAAA=')/Attachments('AAMkADNkNRT6JOBs=')",
    "Id":"AAMkADNkNRT6JOBs=",
    "LastModifiedDateTime":"2016-11-22T02:24:21Z",
    "Name":"Holiday notice",
    "ContentType":"application/octet-stream",
    "Size":244,
    "IsInline":false,
    "ContentId":null,
    "ContentLocation":null,
    "ContentBytes":"bWFjIGFuZCBjaGVlc2U="
}

Solicitação de amostra (anexo de item)

O exemplo a seguir obtém um anexo específico em uma tarefa, que é um item de evento.

GET https://outlook.office.com/api/beta/me/tasks('AAMkADNkN3qGAAA=')/attachments('AAMkADNkNJVnQIe9r0=')

Resposta de amostra

Código de status: 200

{
    "@odata.context":"https://outlook.office.com/api/beta/$metadata#Me/Tasks('AAMkADNkNS3qGAAA%3D')/Attachments/$entity",
    "@odata.type":"#Microsoft.OutlookServices.ItemAttachment",
    "@odata.id":"https://outlook.office.com/api/beta/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkNS3qGAAA=')/Attachments('AAMkADNkNJVnQIe9r0=')",
    "Id":"AAMkADNkNJVnQIe9r0=",
    "LastModifiedDateTime":"2016-12-01T22:27:13Z",
    "Name":"Holiday event",
    "ContentType":null,
    "Size":2473,
    "IsInline":false
}

Solicitação de amostra (anexo de referência)

O exemplo a seguir obtém um anexo específico em uma tarefa, que é um anexo de referência.

GET https://outlook.office.com/api/beta/me/tasks('AAMkADNkN3qGAAA=')/attachments('AAMkADNkNQG1Lnn5-o=')

Resposta de amostra

Código de status: 200

{
    "@odata.context":"https://outlook.office.com/api/beta/$metadata#Me/Tasks('AAMkADNkN3qGAAA%3D')/Attachments/$entity",
    "@odata.type":"#Microsoft.OutlookServices.ReferenceAttachment",
    "@odata.id":"https://outlook.office.com/api/beta/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkN3qGAAA=')/Attachments('AAMkADNkNQG1Lnn5-o=')",
    "Id":"AAMkADNkNQG1Lnn5-o=",
    "LastModifiedDateTime":"2016-11-22T02:32:44Z",
    "Name":"Hydrangea picture",
    "ContentType":null,
    "Size":850,
    "IsInline":true,
    "SourceUrl":"https://contoso-my.sharepoint.com/personal/admin_contoso_onmicrosoft_com/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fadmin%5Fcontoso%5Fonmicrosoft%5Fcom%2FDocuments%2FHydrangeas%2Ejpg&parent=%2Fpersonal%2Fadmin%5Fcontoso%5Fonmicrosoft%5Fcom%2FDocuments",
    "ProviderType":"OneDriveBusiness",
    "ThumbnailUrl":null,
    "PreviewUrl":null,
    "Permission":"Edit",
    "IsFolder":false
}

Solicitação de amostra ($expandir em anexos)

O exemplo a seguir obtém e expande o anexo de arquivo em linha com as propriedades da tarefa.

GET https://outlook.office.com/api/beta/me/tasks('AAMkADNkN3qGAAA=')?$expand=attachments

Resposta de amostra

Código de status: 200

{
    "@odata.context":"https://outlook.office.com/api/beta/$metadata#Me/Tasks/$entity",
    "@odata.id":"https://outlook.office.com/api/beta/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkN3qGAAA=')",
    "@odata.etag":"W/\"EZ9r3czxY0m2jz8c45czkwAAC052gQ==\"",
    "Id":"AAMkADNkN3qGAAA=",
    "CreatedDateTime":"2016-11-22T01:27:31.3918881Z",
    "LastModifiedDateTime":"2016-11-22T02:40:48.1705747Z",
    "ChangeKey":"EZ9r3czxY0m2jz8c45czkwAAC052gQ==",
    "Categories":[

    ],
    "AssignedTo":null,
    "Body":{
        "ContentType":"HTML",
        "Content":"<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n<meta content=\"text/html; charset=iso-8859-1\">\r\n<style type=\"text/css\" style=\"display:none\">\r\n<!--\r\np\r\n\t{margin-top:0;\r\n\tmargin-bottom:0}\r\n-->\r\n</style>\r\n</head>\r\n<body dir=\"ltr\">\r\n<div id=\"divtagdefaultwrapper\" dir=\"ltr\" style=\"font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif\">\r\n<p>Prepare for Thanksgiving gathering.<br>\r\n</p>\r\n</div>\r\n</body>\r\n</html>\r\n"
    },
    "CompletedDateTime":null,
    "DueDateTime":{
        "DateTime":"2016-11-24T08:00:00.0000000",
        "TimeZone":"UTC"
    },
    "HasAttachments":true,
    "Importance":"Normal",
    "IsReminderOn":false,
    "Owner":"Administrator",
    "ParentFolderId":"AQMkADNkNAAAgESAAAA",
    "Recurrence":null,
    "ReminderDateTime":null,
    "Sensitivity":"Normal",
    "StartDateTime":{
        "DateTime":"2016-11-22T08:00:00.0000000",
        "TimeZone":"UTC"
    },
    "Status":"NotStarted",
    "Subject":"Holiday prep",
    "Attachments@odata.context":"https://outlook.office.com/api/beta/$metadata#Me/Tasks('AAMkADNkN3qGAAA%3D')/Attachments",
    "Attachments":[
        {
            "@odata.type":"#Microsoft.OutlookServices.FileAttachment",
            "@odata.id":"https://outlook.office.com/api/beta/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkN3qGAAA=')/Attachments('AAMkADNkNRT6JOBs=')",
            "Id":"AAMkADNkNRT6JOBs=",
            "LastModifiedDateTime":"2016-11-22T02:24:21Z",
            "Name":"Holiday notice",
            "ContentType":"application/octet-stream",
            "Size":244,
            "IsInline":false,
            "ContentId":null,
            "ContentLocation":null,
            "ContentBytes":"bWFjIGFuZCBjaGVlc2U="
        }
    ]
}

Adicionar anexos

Você pode adicionar um arquivo, um item (mensagem, evento ou contato) ou um link a um arquivo como um anexo a uma tarefa.

Adicionar um anexo de arquivo

Escopo mínimo necessário

Adicione um arquivo como anexo a uma tarefa.

POST https://outlook.office.com/api/beta/me/tasks('{task_id}')/attachments
Parâmetro obrigatório do corpo Tipo Descrição
@odata.type sequência de caracteres #Microsoft.OutlookServices.FileAttachment
Nome sequência de caracteres O nome do anexo.
ContentBytes binário O conteúdo do arquivo a ser anexado, na codificação base64.

Tipo de resposta

O novo anexo de arquivo.

Solicitação de amostra

POST https://outlook.office.com/api/beta/me/tasks('AAMkADNkN3qGAAA=')/attachments
Content-Type: application/json

{
    "@odata.type": "#Microsoft.OutlookServices.FileAttachment"", 
    "Name": "Holiday notice", 
    "ContentBytes": "bWFjIGFuZCBjaGVlc2U="
}

Resposta de amostra

Código do status: 201 Criado

{
    "@odata.context":"https://outlook.office.com/api/beta/$metadata#Me/Tasks('AAMkADNkN3qGAAA%3D')/Attachments/$entity",
    "@odata.type":"#Microsoft.OutlookServices.FileAttachment",
    "@odata.id":"https://outlook.office.com/api/beta/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkN3qGAAA=')/Attachments('AAMkADNkNRT6JOBs=')",
    "Id":"AAMkADNkNRT6JOBs=",
    "LastModifiedDateTime":"2016-11-22T02:24:21Z",
    "Name":"Holiday notice",
    "ContentType":"application/octet-stream",
    "Size":244,
    "IsInline":false,
    "ContentId":null,
    "ContentLocation":null,
    "ContentBytes":"bWFjIGFuZCBjaGVlc2U="
}

Adicionar um anexo do item

Escopo mínimo necessário

Adicione um item (mensagem, evento ou contato) como um anexo a uma tarefa.

POST https://outlook.office.com/api/beta/me/tasks('{task_id}')/attachments
Parâmetro obrigatório do corpo Tipo Descrição
@odata.type sequência de caracteres #Microsoft.OutlookServices.ItemAttachment
Nome sequência de caracteres O nome do anexo.
O nome do anexo. Uma entidade Mensagem, Evento ou Contato. O item a ser anexado.

Tipo de resposta

O novo anexo de item.

Solicitação de amostra

POST https://outlook.office.com/api/beta/me/tasks('AAMkADNkN3qGAAA=')/attachments
Content-Type: application/json

{
    "@odata.type": "#Microsoft.OutlookServices.ItemAttachment", 
    "Name": "Holiday event", 
    "Item": {
        "@odata.type": "Microsoft.OutlookServices.Event",
        "Subject": "Discuss gifts for children",
        "Body": {
            "ContentType": "HTML",
            "Content": "Let's look for funding!"
         },
         "Start": {
             "DateTime": "2016-12-02T18:00:00",
             "TimeZone": "Pacific Standard Time"
          },
          "End": {
             "DateTime": "2016-12-02T19:00:00",
             "TimeZone": "Pacific Standard Time"
           }
    }
}

Resposta de amostra

Código do status: 201 Criado

{
    "@odata.context":"https://outlook.office.com/api/beta/$metadata#Me/Tasks('AAMkADNkN3qGAAA%3D')/Attachments/$entity",
    "@odata.type":"#Microsoft.OutlookServices.ItemAttachment",
    "@odata.id":"https://outlook.office.com/api/beta/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkN23qGAAA=')/Attachments('AAMkADNkN2Jp5JVnQIe9r0=')",
    "Id":"AAMkADNkNJp5JVnQIe9r0=",
    "LastModifiedDateTime":"2016-12-01T22:27:13Z",
    "Name":"Holiday event",
    "ContentType":null,
    "Size":2473,
    "IsInline":false
}

Adicione um anexo de referência

Escopo mínimo necessário

Adicione um link a um arquivo como um anexo de referência a uma tarefa.

POST https://outlook.office.com/api/beta/me/tasks('{task_id}')/attachments
Parâmetro obrigatório do corpo Tipo Descrição
@odata.type Sequência de caracteres #Microsoft.OutlookServices.ReferenceAttachment
Nome Sequência de caracteres O nome de exibição do anexo. Obrigatório.
SourceUrl Sequência de caracteres URL para obter o conteúdo do anexo. Se este for um URL para uma pasta, para que a pasta seja exibida corretamente no Outlook ou Outlook na Web, defina IsFolder como verdadeiro. Obrigatório.

Especifique os parâmetros Name e SourceUrl e qualquer propriedade gravável do anexo de referência no corpo da solicitação.

Tipo de resposta

O anexo de referência.

Solicitação de amostra

O exemplo a seguir adiciona um anexo de referência a uma tarefa existente. O anexo é um link para um arquivo do OneDrive for Business.

POST https://outlook.office.com/api/beta/me/tasks('AAMkADNkN3qGAAA=')/attachments
Content-Type: application/json

{
    "@odata.type": "#Microsoft.OutlookServices.ReferenceAttachment", 
    "Name": "Hydrangea picture", 
    "SourceUrl": "https://contoso-my.sharepoint.com/personal/admin_contoso_onmicrosoft_com/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fadmin%5Fcontoso%5Fonmicrosoft%5Fcom%2FDocuments%2FHydrangeas%2Ejpg&parent=%2Fpersonal%2Fadmin%5Fcontoso%5Fonmicrosoft%5Fcom%2FDocuments", 
    "ProviderType": "oneDriveBusiness", 
    "Permission": "Edit", 
    "IsFolder": "False" 
}

Resposta de amostra

Código do status: 201 Criado

{
    "@odata.context":"https://outlook.office.com/api/beta/$metadata#Me/Tasks('AAMkADNkN3qGAAA%3D')/Attachments/$entity",
    "@odata.type":"#Microsoft.OutlookServices.ReferenceAttachment",
    "@odata.id":"https://outlook.office.com/api/beta/Users('fdcbcf34-2505-4d07-be5b-0a55b699d157@41a5b830-45ac-4f1b-9bfc-baafa3b7db2e')/Tasks('AAMkADNkN3qGAAA=')/Attachments('AAMkADNkNQG1Lnn5-o=')",
    "Id":"AAMkADNkNQG1Lnn5-o=",
    "LastModifiedDateTime":"2016-11-22T02:32:44Z",
    "Name":"Hydrangea picture",
    "ContentType":null,
    "Size":850,
    "IsInline":true,
    "SourceUrl":"https://contoso-my.sharepoint.com/personal/admin_contoso_onmicrosoft_com/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fadmin%5Fcontoso%5Fonmicrosoft%5Fcom%2FDocuments%2FHydrangeas%2Ejpg&parent=%2Fpersonal%2Fadmin%5Fcontoso%5Fonmicrosoft%5Fcom%2FDocuments",
    "ProviderType":"OneDriveBusiness",
    "ThumbnailUrl":null,
    "PreviewUrl":null,
    "Permission":"Edit",
    "IsFolder":false
}

Excluir anexos

Excluir um anexo de uma tarefa

Excluir um anexo de uma tarefa

Escopo mínimo necessário

Excluir o anexo especificado de uma tarefa. O anexo pode ser umanexo de arquivo, anexo de item ou anexo de referência.

DELETE https://outlook.office.com/api/beta/me/tasks('{task_id}')/attachments('{attachment_id}')

Solicitação de amostra

DELETE https:/outlook.office.com/api/beta/me/tasks('AAMkADNkN3qGAAA=')/attachments('AAMkADNkNQG1Lnn5-o=')

Resposta de amostra

Status code: 204

Criar pastas de tarefas

Escopo mínimo necessário

Criar uma pasta de tarefas.

Você pode criar uma pasta de tarefas no grupo de tarefas padrão (My Tasks) da caixa de correio do usuário:

POST https://outlook.office.com/api/beta/me/taskfolders

Ou você pode criar uma pasta de tarefas em um grupo de tarefas especificado:

POST https://outlook.office.com/api/beta/me/taskgroups('{group_id}')/taskfolders

No corpo da solicitação, forneça uma representação JSON da TaskFolder a ser criada.

Resposta

Código do status de sucesso: 201 Criado

Corpo de resposta: A TaskFolder criada.

Solicitação de amostra

O exemplo a seguir cria uma pasta de tarefas chamada Volunteer no grupo de tarefas padrão (My Tasks) da caixa de correio do usuário.

POST https://outlook.office.com/api/beta/me/taskfolders 
Content-Type: application/json

{
  "Name": "Volunteer"
}

Resposta de amostra

Status code: 201

{
  "@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/TaskFolders/$entity",
  "@odata.id": "https://outlook.office.com/api/beta/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskFolders('AAMkADIyAAAhrbPWAAA=')",
  "Id": "AAMkADIyAAAhrbPWAAA=",
  "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAIbAGig==",
  "IsDefaultFolder": false,
  "Name": "Volunteer",
  "ParentGroupKey": "0006f0b7-0000-0000-c000-000000000046"
}

Solicitação de amostra

O próximo exemplo cria uma pasta de tarefas chamada Cooking no grupo de tarefas especificado.

POST https://outlook.office.com/api/beta/me/taskgroups('AAMkADIyAAAhrbe-AAA')/taskfolders 
Content-Type: application/json

{
  "Name": "Cooking"
}

Resposta de amostra

Status code: 201

{
  "@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/TaskGroups('AAMkADIyAAAhrbe-AAA%3D')/TaskFolders/$entity",
  "@odata.id": "https://outlook.office.com/api/beta/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskFolders('AAMkADIyAAAhrbPXAAA=')",
  "Id": "AAMkADIyAAAhrbPXAAA=",
  "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAIbAOlA==",
  "IsDefaultFolder": false,
  "Name": "Cooking",
  "ParentGroupKey": "63d640cf-946f-4734-9c29-60dda7b76acb"
}

Obter pastas de tarefas

Escopo mínimo necessário

Obtenha várias pastas de tarefas.

Você pode obter todas as pastas de tarefas na caixa de correio do usuário:

GET https://outlook.office.com/api/beta/me/taskfolders

Ou você pode obter pastas de tarefas em um grupo de tarefas específico:

GET https://outlook.office365.com/api/beta/me/taskgroups('{group_id}')/taskfolders 

Resposta

Código de status de sucesso: 200 OK

Corpo de resposta: Uma coleção de taskfolder.

Solicitação de amostra

O exemplo a seguir obtém todas as pastas de tarefas na caixa de correio do usuário.

GET https://outlook.office.com/api/beta/me/taskfolders

Resposta de amostra

Status code: 200 OK

{
  "@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/TaskFolders",
  "value": [
    {
      "@odata.id": "https://outlook.office.com/api/beta/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskFolders('AAMkADIyAAAAABrJAAA=')",
      "Id": "AAMkADIyAAAAABrJAAA=",
      "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAAAAeAA==",
      "IsDefaultFolder": false,
      "Name": "Monthly tasks",
      "ParentGroupKey": "0006f0b7-0000-0000-c000-000000000046"
    },
    {
      "@odata.id": "https://outlook.office.com/api/beta/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskFolders('AAMkADIyAAAAAAESAAA=')",
      "Id": "AAMkADIyAAAAAAESAAA=",
      "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAAAAAPA==",
      "IsDefaultFolder": true,
      "Name": "Tasks",
      "ParentGroupKey": "0006f0b7-0000-0000-c000-000000000046"
    }
  ]
}

O próximo exemplo obtém todas as pastas de tarefas no grupo de tarefas especificado.

GET https://outlook.office365.com/api/beta/me/taskgroups('AAMkADIyAAAhrbe-AAA=')/taskfolders

Resposta de amostra

Status code: 200 OK

{
  "@odata.context": "https://outlook.office365.com/api/beta/$metadata#Me/TaskGroups('AAMkADIyAAAhrbe-AAA%3D')/TaskFolders",
  "value": [
    {
      "@odata.id": "https://outlook.office365.com/api/beta/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskFolders('AAMkADIyAAAhrbPXAAA=')",
      "Id": "AAMkADIyAAAhrbPXAAA=",
      "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAIbAOlA==",
      "IsDefaultFolder": false,
      "Name": "Cooking",
      "ParentGroupKey": "63d640cf-946f-4734-9c29-60dda7b76acb"
    }
  ]
}

Atualizar pastas de tarefas

Escopo mínimo necessário

Atualize as propriedades graváveis ​​de uma pasta de tarefas.

Você não pode mudar o valor da propriedade Nome da pasta de tarefas padrão, Tasks.

Um ID da pasta de tarefas é exclusivo na caixa de correio do usuário.

PATCH https://outlook.office.com/api/beta/me/taskfolders('{folder_id}')

No corpo da solicitação, forneça uma representação JSON das propriedades graváveis ​​a serem atualizadas na TaskFolder.

Resposta

Código de status de sucesso: 200 OK

Corpo de resposta: A TaskFolder atualizada.

Solicitação de amostra

O exemplo a seguir altera o nome da pasta da tarefas para Charity work.

PATCH https://outlook.office.com/api/beta/me/taskfolders('AAMkADIyAAAhrbPWAAA=')
Content-Type: application/json

{
  "Name": "Charity work"
}

Resposta de amostra

Status code: 200 OK

{
  "@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/TaskFolders/$entity",
  "@odata.id": "https://outlook.office.com/api/beta/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskFolders('AAMkADIyAAAhrbPWAAA=')",
  "Id": "AAMkADIyAAAhrbPWAAA=",
  "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAIbAKfQ==",
  "IsDefaultFolder": false,
  "Name": "Charity work",
  "ParentGroupKey": "0006f0b7-0000-0000-c000-000000000046"
}

Excluir pastas de tarefas

Escopo mínimo necessário

Excluir a pasta de tarefas especificada.

Tentar excluir a pasta de tarefas padrão Tasks retornaria HTTP 400 - Solicitação Incorreta.

DELETE https://outlook.office.com/api/beta/me/taskfolders('{folder_id}')

Resposta

Código de status de sucesso: 204 Sem Conteúdo

Corpo de Resposta: Nenhum.

Solicitação de amostra

DELETE https://outlook.office365.com/api/beta/me/taskfolders('AAMkADIyAAAhrbPXAAA=')

Resposta de amostra

Status code: 204

Criar grupos de tarefas

Escopo mínimo necessário

Escopo mínimo necessário

POST https://outlook.office.com/api/beta/me/taskgroups

No corpo da solicitação, forneça uma representação JSON do TaskGroup a ser criado.

Resposta

Código do status de sucesso: 201 Criado

Corpo de resposta: O TaskGroup criado.

Solicitação de amostra

POST https://outlook.office.com/api/beta/me/taskgroups
Content-Type: application/json

{
  "Name": "Leisure tasks"
}

Resposta de amostra

Status code: 201

{
  "@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/TaskGroups/$entity",
  "@odata.id": "https://outlook.office.com/api/beta/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskGroups('AAMkADIyAAAhrbe-AAA=')",
  "Id": "AAMkADIyAAAhrbe-AAA=",
  "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAIbAGjg==".
  "IsDefaultGroup": false,
  "Name": "Leisure tasks",
  "GroupKey": "63d640cf-946f-4734-9c29-60dda7b76acb"
}

Obter grupos de tarefas

Escopo mínimo necessário

Obter todos os grupos de tarefas na caixa de correio do usuário.

A resposta sempre inclui o grupo de tarefas padrão My Tasks e quaisquer outros grupos de tarefas criados na caixa de correio.

GET https://outlook.office.com/api/beta/me/taskgroups

Resposta

Código de status de sucesso: 200 OK

Corpo de resposta: A coleção do TaskGroup.

Solicitação de amostra

GET https://outlook.office.com/api/beta/me/taskgroups

Resposta de amostra

Status code: 200

{
  "@odata.context": "https://outlook.office365.com/api/beta/$metadata#Me/TaskGroups",
  "value": [
    {
      "@odata.id": "https://outlook.office365.com/api/beta/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskGroups('AAMkADIyAAADJ5pYAAA=')",
      "Id": "AAMkADIyAAADJ5pYAAA=",
      "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAInHxLA==",
      "IsDefaultGroup": true,
      "Name": "My Tasks",
      "GroupKey": "0006f0b7-0000-0000-c000-000000000046"
    },
    {
      "@odata.id": "https://outlook.office365.com/api/beta/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskGroups('AAMkADIyAAAhrbe-AAA=')",
      "Id": "AAMkADIyAAAhrbe-AAA=",
      "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAInHxKw==",
      "IsDefaultGroup": false,
      "Name": "Leisure Tasks",
      "GroupKey": "63d640cf-946f-4734-9c29-60dda7b76acb"
    }
  ]
}

Atualizar grupos de tarefas

Escopo mínimo necessário

Atualizar as propriedades graváveis ​​de um grupo de tarefas.

PATCH https://outlook.office.com/api/beta/me/taskgroups('{group_id}')

No corpo da solicitação, forneça uma representação JSON das propriedades graváveis ​​a serem atualizadas no TaskGroup, como a propriedade Nome.

Resposta

Código de status de sucesso: 200 OK

Corpo de resposta: A tarefa atualizada.

Solicitação de amostra

O exemplo a seguir altera o nome de um grupo de tarefas para "Tarefas Pessoais". Observe que você não pode modificar o nome do grupo de tarefas padrão "Minhas tarefas".

PATCH https://outlook.office.com/api/beta/me/taskgroups('AAMkADIyAAAhrbe-AAA=')
Content-Type: application/json

{
  "Name": "Personal Tasks"
}

Resposta de amostra

Status code: 200 

{
  "@odata.context": "https://outlook.office.com/api/beta/$metadata#Me/TaskGroups/$entity",
  "@odata.id": "https://outlook.office.com/api/beta/Users('dc2d952a-78ff-4609-b3ae-eb66271747bf@8638a6dc-2d66-40dc-aecb-b2436ec47fc0')/TaskGroups('AAMkADIyAAAhrbe-AAA=')",
  "Id": "AAMkADIyAAAhrbe-AAA=",
  "ChangeKey": "hmM7Eb/jgEec8l3+gkJEawAAIbAGjw==",
  "IsDefaultGroup": false,
  "Name": "Personal Tasks",
  "GroupKey": "63d640cf-946f-4734-9c29-60dda7b76acb"
}

Excluir grupos de tarefas

Escopo mínimo necessário

Excluir o grupo de tarefas especificado.

Tentar excluir o grupo de tarefas padrão My Tasks retornaria HTTP 400 - Solicitação Incorreta.

DELETE https://outlook.office.com/api/beta/me/taskgroups('{group_id}')

Resposta

Código de status de sucesso: 204 Sem Conteúdo

Corpo de resposta: A tarefa atualizada.

Solicitação de amostra

DELETE https://outlook.office365.com/api/beta/me/taskgroups('AAMkADIyAAAhrbe-AAA=')

Resposta de amostra

Status code: 204

Próximas etapas

Se você estiver pronto para começar a criar um aplicativo ou apenas quiser aprender mais, temos tudo o que você precisa.

Se preferir, aprenda mais sobre como usar a plataforma do Office 365: