We are happy to announce the availability of the Export-Import APIs in Public Preview (Beta). This is a set of Microsoft Graph APIs that empower applications to discover, import, and export content in Exchange Online mailboxes in full fidelity.
Many of our customers currently rely on APIs powered by Exchange Web Services (EWS) for tasks like Exchange mailbox backup, archiving and migration. However, with the EWS deprecation initiative, customers have been asking for a method built on the Microsoft Graph platform to discover mailbox items, selectively export them and then import these items into Exchange Online mailboxes.
API features
We are introducing a solution that includes several valuable features, enabling users to effectively utilize these new APIs:
- Discovery into Mailbox Hierarchy: The APIs allow drilling down into the mailbox hierarchy, including mailbox folders, child folders, and individual mailbox items.
- Agnostic to the type of mailbox items: Our solution identifies and supports all types of mailbox items, such as messages, contacts, and calendar items, given that they fall under the IPM subtree (refer to IPM Subtree | Microsoft Learn for more information).
- Support for Archive Mailboxes: Our solution provides support for both users’ primary mailboxes and their In-Place Archive mailboxes.
- Folder Management: Users can create, update, and delete mailbox folders, allowing flexibility in modifying mailbox folder structures.
- Extended Properties: Our solution enables support for single-value and multi-value extended properties associated with mailbox folders and items. These properties allow storing and accessing custom data that is not already exposed in the Microsoft Graph API metadata (refer to Outlook extended properties overview – Microsoft Graph v1.0 | Microsoft Learn for more information).
- Granular Permission Scopes: We ensure controlled access for applications and users, allowing them to read, export, and import their Exchange mailbox data based on their specific use cases.
View the documentation here.
Note: These APIs currently do not support Public Folders.
Let us know what you think!
We would love to hear your feedback! If you have any suggestions, questions, or issues you would like to report, please leave a comment below or send us an email at ExoImExApiFeedback@microsoft.com. Please refrain from opening support tickets for these APIs during public preview as this is not supported at this time.
Hello Everyone!
I have a question:
– when is this feature planned to be in the release version?
And also regarding Public Folder, when is it planned to create Import/Export support for them?
Thank you!
Hi Maksym, we haven’t announced dates for GA and public folder support yet. Stay tuned!
What’s the plan/ETA for supporting batching for import items?
Microsoft Graph supports batching: https://learn.microsoft.com/en-us/graph/json-batching?view=graph-rest-1.0&tabs=http
Hello,
based on my testing Import does not persist the categories, so if I export items with category, the category is not shown when importing the mail. I specifically tested with the update.
Hi Daniel, please report this (and any other issues you encounter) to ExoImExApiFeedback@microsoft.com. Thank you!
Hello ,
is there plan for importing also .eml as it was possible in the EWS via Mime content as describe in this article https://learn.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-import-items-by-using-ews-in-exchange
Hello Daniel, thank you for the feedback! Not as part of these APIs specifically, however the team is exploring adding this capability to Microsoft Graph in the future.
Is there any plan Import/Export will work also for other entities? In EWS it worked also for Calendar items, Tasks, Contacts?
Replying to your question here as I could not reply directly to it underneath
Yes, we are planning to make this Generally Available for all clouds including GCC High.
Hi Daniel, mailboxItem supports various item types, it’s not limited to just ‘mail’ entities: https://learn.microsoft.com/en-us/graph/api/resources/mailboxitem?view=graph-rest-beta
Hello,
I have found out problem in delta of mailbox folders, when getting delta and folder is deleted (put to deleted items) or moved from one folder to another, it is missing Old parent folder identifier which would kind of indicate that the folder has been moved. In EWS old parent folder ID was returned as far as I remember.
Will it be available for GCC high?
Hello,
Will these APIs be available under the SDKs for Graph?
Yes!
The import endpoint (https://outlook.office365.com/api/gbeta) cannot be part of the SDKs, because it’s calling the Outlook API. You can’t use the Graph Explorer which allows to call only endpoints with the base URL https://graph.microsoft.com.
this comment has been deleted.
What I see is not the best developer experience when importing items.
As a developer, I can use the Microsoft Graph SDK like C# or PowerShell to create an import session, but then I need to write my own client to import items, because the import endpoint is not calling the Graph API, but the Outlook API (https://outlook.office365.com/api/gbeta). Developers can't use the Graph Explorer which allows to call only endpoints with the base URL https://graph.microsoft.com
The SDKs have retry handling, throttling, error catching, etc., but for importing I have to implement a lot of things myself.
There will be no Graph API documentation...
Thank you for sharing this feedback with us!
Its good to see this couple of questions
Is this going to be a metered API either now or in the future ?
Is it throttled the same way as other Mail and Calendar API’s are in the Graph (eg 4 concurrent connection limits)
You don’t currently have an importItem documented in the API docs https://learn.microsoft.com/en-us/graph/api/resources/mailbox-import-export-api-overview?view=graph-rest-beta there is https://learn.microsoft.com/en-us/graph/import-exchange-mailbox-item which shows how to do it but the API docs need some updating to include it.
In EWS there are 27 concurrent connections allowed in Exchange Online in Graph there are only 4, for most things that's not too much of a problem but for something that needs volume it is, one example is I've tried doing a large hygiene tasks using the Graph in Exchange which involved moving 1000's of mailbox items. In the Graph it took 6 minutes per 1000 items in the EWS it too 1 minute because It could have higher batch limits and the native batch execution in EWS seems a lot more efferent to the way the batch endpoint...
We are currently using the Graph API endpoints to access all of these things, I am wondering the same thing for throttling. It feels pretty similar in terms of what is available to access, what about the performance?
Thank you for the feedback! There are no plans for these APIs to be metered. Throttling for Outlook resources applies to the resources in these APIs as well.
We’re interested in receiving feedback around throttling and performance with these APIs and encourage customers to share their experience with us as part of this preview!