An API that connects multiple Microsoft services, enabling data access and automation across platforms
The behavior matches how Exchange import/export works: the item is being restored at the data level, but not in a way that guarantees it will surface as a normal, visible contact in Outlook.
From the documented patterns:
- EWS/Exchange import is supported in three main ways:
- Creating items via Exchange item types (recommended when importing from other systems).
- Item-level export/import for full-fidelity copies between Exchange mailboxes.
- MIME-based formats (iCal/vCard) for small volumes.
- For full-fidelity, item-level import/export, the supported pattern is:
- Export with
ExportItems(or the GraphexportItemsequivalent). - Import with
UploadItems(or the corresponding import mechanism) using the exported data stream. - The imported item is then a server-side copy of the original.
- Export with
However, the documentation also makes clear that:
- EWS and related APIs are not designed as a general-purpose backup/restore mechanism for arbitrary mailbox items.
- When importing items from other systems or restoring items, the recommended approach is to create a new item using the item model (for example,
Contact/CalendarItem/Message) and explicitly set the properties, then save it usingCreateItemorItem.Save.
In this scenario:
- The contact is present in the folder and can be exported, which means the import session and FTS data are valid at the store level.
- The fact that Outlook UI does not show it indicates the restored item is not in a state that Outlook recognizes as a normal, visible contact (for example, missing or inconsistent schematized properties, extended properties, or flags that Outlook relies on for display).
- Because the FTS data was taken from a deleted item and re-imported via the low-level import API, there is no guarantee that the resulting item will be surfaced correctly in all clients.
The supported workaround is to avoid relying on FTS-based restore for user-visible contacts and instead:
- Export the contact using the item model (for example,
GetItem/Contact.Bindwith the desired property set). - Recreate the contact by calling
CreateItem(or the equivalent Graph create-contact API) and explicitly setting the properties. - Save it into the Contacts folder so Outlook treats it as a normal contact.
For bulk or cross-system scenarios, the guidance is the same: use the item-type-based import (Contact/Message/Appointment/Task) rather than raw FTS data, unless performing a supported, full-fidelity copy between Exchange servers where the client UI behavior is validated.
Given the documentation, this is a limitation of the low-level import path rather than a supported, guaranteed UI-visible restore mechanism. The reliable path to make the contact visible again is to recreate it via the contact item model instead of re-importing the FTS data.
References: