Fixing Silent Exclaimer Cloud for Outlook Deployment Failures in Microsoft 365 Integrated Apps

A silent, undocumented failure mode in Microsoft 365 Integrated Apps prevents the Exclaimer Cloud for Outlook add-in from deploying on some tenants, with no error code surfaced anywhere in the UI, PowerShell, or audit logs. This post walks through the API-level diagnostic process that identified the root cause, and the Graph API fix that resolves it.

I was recently trying to deploy the Exclaimer Cloud for Outlook add-in via Microsoft 365 Admin Centre > Settings > Integrated Apps, but it was silently failing every time regardless of whether I targeted a single user, a group, or the entire organisation. There was no real useful information provided on the failure, it just sat and spun at the end and then said Failed.

With some help from my invisible robot friend, I took a deep API-level investigation to try and resolve it, and the fix is not documented anywhere.


Symptoms

  • Integrated Apps deployment wizard completes through Users > Deployment > Permissions steps without error
  • Clicking Finish deployment results in “Deployment failed” with no error message or error code
  • The failure is consistent across all deployment scopes — single user, group, entire organisation
  • Exclaimer does not appear in the Deployed apps tab after any attempt
  • Exclaimer does not appear in the Available apps tab either
  • The server-side Exclaimer pipeline (transport rules, Entra sync, email signatures) is working correctly
  • All five Exclaimer enterprise apps in Entra ID show as Activated

In short: everything looks healthy, but the Outlook add-in deployment fails silently every time.


What Was Actually Happening

The Integrated Apps deployment pipeline for Outlook add-ins works by creating a PrivateCatalogApp service principal in the tenant’s Entra ID directory. This service principal carries the add-in metadata in its addIns collection, including the AppSource asset ID, capabilities, scopes, and version information.

On affected tenants, the pipeline silently fails to create this service principal, and returns no error code to the UI or to any visible log. Without this object, the deployment has nothing to register against, and the entire operation fails.

You can confirm this is your issue by inspecting the Integrated Apps metadata API response. In your browser, with DevTools > Network tab open, navigate to Settings > Integrated Apps and begin the Exclaimer deployment wizard. At the Permissions step, look for a fetch request to:

https://admin.cloud.microsoft/fd/addins/api/apps/WA200004512?type=appId&workloads=AzureActiveDirectory,WXPO,MetaOS,SharePoint

Click on that request and inspect the Response. On an affected tenant, you will see nearly every deployment field is null:

{
    "appDetail": {
        "appId": null,
        "manifestVersion": null,
        "manifestId": null,
        "deploymentStatus": "None",
        "deploymentType": "None",
        "currentVersion": null,
        "servicePrincipalId": null,
        "isDeployed": false,
        ...
    }
}

On a tenant with a successful deployment, the same API returns:

{
    "appDetail": {
        "deploymentStatus": "OK",
        "deploymentType": "FullRollout",
        "currentVersion": "1.29.200",
        "servicePrincipalId": "UUID-of-service-principal",
        "isDeployed": true,
        ...
    }
}

The servicePrincipalId being null on the failing tenant confirms the service principal was never created.


How to fix this?

I manually createed the app registration and service principal in the affected tenant via the Microsoft Graph API. Once these objects had been created, the Integrated Apps deployment pipeline was then able to complete successfully.

You need to be a Global Administrator or Application Administrator in the affected tenant and have access to Microsoft Graph Explorer

Step 1 — Grant Graph Explorer permissions

In Graph Explorer, click Modify permissions and consent to:

  • Application.ReadWrite.All
  • Directory.ReadWrite.All

Step 2 — Create the app registration

Method: POST
URL: https://graph.microsoft.com/v1.0/applications

Body:

{
    "displayName": "Exclaimer Cloud for Outlook",
    "signInAudience": "AzureADMyOrg",
    "tags": ["PrivateCatalogApp"],
    "addIns": [
        {
            "id": "efc30400-2ac5-48b7-8c9b-c0fd5f266be2",
            "type": "PrivateCatalogStoreAddIn",
            "properties": [
                {"key": "AssetId", "value": "WA200004512"},
                {"key": "ContentMarket", "value": "en-AU"},
                {"key": "AddInState", "value": "Ok"},
                {"key": "DefaultStateForUser", "value": "Mandatory"},
                {"key": "AppId", "value": "214c49cc-b1f4-4105-bdd9-468bedc2056a"},
                {"key": "Capabilities", "value": "ReadWrite Item;Send Data"},
                {"key": "Scopes", "value": "User.Read;openid;profile"},
                {"key": "Version", "value": "1.29.200"},
                {"key": "DefaultDisplayName", "value": "Exclaimer Cloud for Outlook"},
                {"key": "DefaultDescription", "value": "Outlook Add-In: Create and centrally manage professional email signatures for all users on M365"},
                {"key": "DefaultIconUrl", "value": "https://store-images.s-microsoft.com/image/apps.40276.3263b52d-52ed-4337-afef-c4233f6fe5c1.16c69f7f-3929-48d8-a5e0-ce39dcfedb8e.00756d18-a42b-4a0d-a0e7-76888673cc2a.png"},
                {"key": "ProviderName", "value": "Exclaimer Limited"},
                {"key": "AutorunLaunchEvents", "value": "OnNewMessageCompose;OnMessageRecipientsChanged;OnMessageFromChanged"},
                {"key": "InstallTimeAll", "value": "2026-06-01T00:00:00.0000000Z"},
                {"key": "Supportedclients", "value": "Win32_Outlook;15.20.3863.0,Mac_Outlook;15.20.3863.0,IOS_Outlook;15.1.990.0,And_Outlook;16.0.8414.0,WAC_Outlook;15.20.3863.0"}
            ]
        }
    ]
}

A successful response returns 201 Created with a new appId GUID. Copy that value — you need it for the next step.

Step 3 — Create the service principal

Method: POST
URL: https://graph.microsoft.com/v1.0/servicePrincipals

Body (substituting the appId returned from Step 2):

{
    "appId": "<appId from Step 2>",
    "tags": ["PrivateCatalogApp"]
}

A successful response returns 201 Created with the service principal object. Confirm appOwnerOrganizationId matches your tenant ID and the addIns array is populated.

Step 4 — Deploy via Integrated Apps

Go immediately to Microsoft 365 Admin Centre > Settings > Integrated Apps > Get apps, search for Exclaimer Cloud for Outlook, and run through the deployment wizard. It should now complete successfully with Status: OK.


Why Does This Happen?

The root cause is unclear as the Integrated Apps pipeline should be creating this service principal itself as part of the deployment process. On affected tenants, something prevents that creation, the pipeline fails silently, and Microsoft surfaces no error.

It is not caused by:

  • Missing or incorrect admin consent
  • Licence issues or missing Exchange Online mailboxes
  • The five Exclaimer backend enterprise apps being in a bad state
  • Conditional Access policies (in most cases)
  • Deploying to a specific scope (single user, group, entire org)

It appears to be a tenant-level provisioning issue in the Integrated Apps pipeline, possibly related to tenant age, configuration history, or an undocumented prerequisite state that some tenants don’t satisfy.


Notes

  • The ContentMarket value of en-AU reflects an Australian English locale. Adjust if deploying in a different region.
  • The Version value in the addIns properties is metadata only — set it to the current Exclaimer release version if known, or use 1.29.200 as of the time of writing.
  • The InstallTimeAll timestamp is informational — set it to the current date/time in ISO 8601 format.
  • The app registration id and appId will be unique to each tenant — this is expected and correct behaviour.
  • After successful deployment, the add-in may show an “Updates pending” notification if the version metadata in the addIns properties doesn’t match the current AppSource release. This can be resolved by removing and redeploying with the current version number.

Automatica provides managed IT services and consulting for creative and professional services businesses in Melbourne. If you’re dealing with a stubborn Microsoft 365 deployment issue, get in touch.

Keep This Useful

Spotted something outdated or unclear?

If a step has changed, a screenshot no longer matches, or something here just does not work the way it should, get in touch and we will take a look.