Transaction Errors
Use this page to look up any Exchange sync failure by its error code and fix it. When an appointment sync to Exchange fails, the connector diagnoses the failure and records it on the transaction row visible on the Errors page. Every diagnosed failure carries a stable DSEX code, prefixed on the Transaction.Message in square brackets (for example [DSEX002] The client secret … is invalid …). A code never changes once issued, and only new ones get added, so it is a reliable lookup key.
For Azure AD app-registration and consent walkthroughs, see Troubleshooting. This page covers the runtime classifications.
Retried statuses are transient and self-heal on the next retry pass. Fix configuration statuses need a change to the Exchange connector or Azure app first; once you correct the setting, the retry job replays the affected appointments automatically on its next pass (within a 14-day window), so no manual replay is needed. Send Undiagnosed failures (DSUNK001) to support so a rule can be added.
Each section pairs 💡 (what it means) with 🛠️ (what to do).
Quick lookup
| Code | Goes to | Status | Retry |
|---|---|---|---|
DSEX001 | Expired client secret | InvalidBackOfficeSettings | fix config |
DSEX002 | Invalid client secret | InvalidBackOfficeSettings | fix config |
DSEX003 | Unknown client ID | InvalidBackOfficeSettings | fix config |
DSEX004 | Unknown or malformed tenant ID | InvalidBackOfficeSettings | fix config |
DSEX005 | Other rejected credentials | InvalidBackOfficeSettings | fix config |
DSEX006 | Incomplete credentials | InvalidBackOfficeSettings | fix config |
DSEX010 | Credentials rejected after the call | Skipped | fix config |
DSEX011 | Exchange integration disabled | Skipped | fix config |
DSEX012 | Invalid user in the directory | Skipped | fix config |
DSEX020 | No mapping entry | EmptyBackOffice | retried |
DSEX021 | Event already deleted | Skipped | n/a |
DSEX030 | Access denied by the Azure AD app | Failed | retried |
DSEX040 | Microsoft Graph transient | Failed | retried |
DSUNK001 | Unexpected exception | Failed | undiagnosed |
All five credential-rejection cases below surface as the same typed failure (InvalidExchangeCredentialsException) on InvalidBackOfficeSettings; only the underlying AADSTS code and the field to fix differ. Once you correct the offending value, the appointment recovers automatically on the next retry pass.
Expired client secret
DSEX001fix configurationAADSTS7000222 and the connector records a rejected credential carrying the offending Client ID.- Open the Azure portal and navigate to the Exchange app registration.
- Under Certificates & secrets, generate a new client secret. Copy the secret value immediately - it is only shown once.
- Update the secret on the Exchange configuration page under the Microsoft Entra ID section.
Client secrets expire after 6, 12, or 24 months. Set a reminder to rotate them before they expire.
Invalid client secret
DSEX002fix configurationAADSTS7000215 (invalid_client).Unknown client ID
DSEX003fix configurationAADSTS700016.Unknown or malformed tenant ID
DSEX004fix configurationAADSTS90002 / AADSTS900023, or the value fails validation locally.Other rejected credentials
DSEX005fix configurationIncomplete credentials
DSEX006fix configurationCredentials rejected after the call
DSEX010fix configurationCalendars.ReadWrite, MailboxSettings.ReadWrite, User.Read.All) are present and that Grant admin consent has been clicked.Exchange integration disabled for the assigned resources
DSEX011fix configurationResource (No) pairs), or "No resources were assigned to this appointment" when the appointment has no assignments at all.Skipped status is correct and no action is needed.Invalid user in the directory
DSEX012fix configurationNo mapping entry
DSEX020retried automaticallyEvent already deleted
DSEX021retried automaticallySkipped; the desired end state (no event) is already true.Access denied by the Azure AD app
DSEX030fix configuration"The Azure AD app does not have sufficient permissions to write events to the calendar." prefix.- In the Azure portal, open the Exchange app registration and go to API permissions.
- Make sure
Calendars.ReadWriteis granted as an Application permission (not Delegated). - Click Grant admin consent for [Your Organization].
- Replay the failed transaction from the Errors page.
Microsoft Graph transient
DSEX040retried automaticallyTransient error from Microsoft Graph: <inner>. Will retry on the next sync attempt..Failed so the retry job picks it up on the next pass. If the rate of transients spikes, check the Microsoft 365 service health dashboard and tenant-level Graph throttling.Unexpected exception
DSUNK001undiagnosedFailed so the retry job can replay it, but it also writes a full stack trace to the operational log so the maintainers can add a typed rule.