Search code examples
outlookoffice365office365apioffice365-restapi

Fetch messages filtered by conversationId via Office365 API


I'm having some trouble figuring out how to use the office365 api to fetch messages given a conversationId.

Let's say my conversationId is AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow=

I'll make a request like

https://outlook.office.com/api/v1.0/me/Messages?$filter=ConversationId%20eq%20AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow=

This results in a 400 response like this:

{
  "error": {
    "code": "RequestBroker-ParseUri",
    "message": "Syntax error at position 98 in 'ConversationId eq AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow='."
  }
}

I tried other things, such as url encoding the conversationId to AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow%3D which results in the same error.

I also tried simply removing the = which seems to be the character that is freaking it out

https://outlook.office.com/api/v1.0/me/Messages?$filter=ConversationId%20eq%20AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow

but that results in the following error

{
  "error": {
    "code": "RequestBroker-ParseUri",
    "message": "Could not find a property named 'AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow' on type 'Microsoft.OutlookServices.Message'."
  }
}

I've also tried messing with the url capitalization and using + signs instead of %20 for the filter string, but I consistently get 400 errors back.

I am able to filter by other fields though. For example

https://outlook.office.com/api/v1.0/me/Messages?$filter=IsRead%20eq%20true

returns messages filtered as I would expect.

Any idea what could be going on with the ConversationId filter?


Solution

  • You need to wrap the ConversationId with single quotes. This is how I forge my request in C#

    string finalUrl = "https://outlook.office.com/api/beta/me/Messages?$filter=" + HttpUtility.UrlEncode(string.Format("ConversationId eq '{0}'", conversationId));