> ## Documentation Index
> Fetch the complete documentation index at: https://university.triggr-app.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Microsoft Graph (GDAP)

> Connect Triggr to your clients' Microsoft 365 tenants through GDAP, with one service account in your partner tenant.

Triggr signs in once as a service account in your partner tenant, then works in each client's tenant with the roles its GDAP relationship allows. There's no app to register and nothing for your clients to install.

You need a CSP partner tenant with [Partner Center](https://partner.microsoft.com/dashboard/home) access as an Admin agent, a Global Administrator or Privileged Role Administrator in your partner tenant, and MFA through [Conditional Access](/integrations/microsoft-graph/conditional-access) (Microsoft Entra ID P1 or P2) or per-user MFA.

<Tip>
  In Triggr Core, Connect Microsoft 365 on Home walks you through the Triggr side of this page. Do the Partner Center and Microsoft Entra steps here first. See [Connect Microsoft 365](/core/get-started/connect-microsoft-365).
</Tip>

## Request a GDAP relationship with each client

Skip any client whose active relationship already includes the roles you need.

<Steps>
  <Step title="Start the request">
    In Partner Center, select Customers, the customer, then **Admin relationships > Request for new relationship** (or **Administer > Request admin relationship** for a customer with no reseller relationship).
  </Step>

  <Step title="Name it and choose roles">
    Enter a name the client will see, set Duration in days (up to 730), tick the [recommended roles](/integrations/microsoft-graph/recommended-roles) and select Save.
  </Step>

  <Step title="Send it">
    Set Auto Extend to Yes, select **Finalize request** and send the request email, unchanged, to a Global Administrator at the client. The relationship is active once they approve it.
  </Step>
</Steps>

Roles can't be added to a relationship later: request a new one instead. Microsoft doesn't auto-extend a relationship that includes Global Administrator. See Microsoft's [Obtain granular admin permissions](https://learn.microsoft.com/en-us/partner-center/customers/gdap-obtain-admin-permissions-to-manage-customer).

## Create the service account

<Steps>
  <Step title="Create the user">
    In the [Microsoft Entra admin centre](https://entra.microsoft.com) for your partner tenant, go to **Entra ID > Users > New user > Create new user** and create a user such as `triggr@yourcompany.com` with a strong password stored in your password manager. It needs no licence.
  </Step>

  <Step title="Add AdminAgents and Global Administrator">
    Under Assignments, add the **AdminAgents** group (only Admin agents can list your customers and grant Triggr's consent) and the **Global Administrator** role (needed only to grant admin consent; you remove it at the end), then select Create.
  </Step>

  <Step title="Require MFA and register it">
    Add the account to a [Conditional Access policy that requires MFA](/integrations/microsoft-graph/conditional-access#require-mfa-for-the-service-account) or turn on per-user MFA, exclude it from policies that require a compliant device or allowed locations, then sign in as it once and register an MFA method your team can reach.
  </Step>
</Steps>

<Frame caption="Triggr Core's Create a service account step lists the same five items.">
  <img src="https://mintcdn.com/triggr/MwzXHG3UWzFixdSz/images/core/connect-microsoft-365/service-account.png?fit=max&auto=format&n=MwzXHG3UWzFixdSz&q=85&s=a69b66db70f5d8f7f79e476c41b9e79e" alt="The Create a service account step with a Username and Display name to copy, and five ticked items: create the user in Entra, add it to AdminAgents and your GDAP groups, make it a Global Administrator, require MFA, and exclude it from Conditional Access." width="1552" height="922" data-path="images/core/connect-microsoft-365/service-account.png" />
</Frame>

Partner Center rejects sign-ins without MFA, and changes in Microsoft Entra take up to an hour to reach Partner Center. See Microsoft's [MFA requirements for partner tenants](https://learn.microsoft.com/en-us/partner-center/security/partner-security-requirements-mandating-mfa).

## Give the account access to your clients

<Steps>
  <Step title="Create Triggr's security group">
    In **Entra ID > Groups > New group**, create a Security group such as `Triggr GDAP` with the service account as a member.
  </Step>

  <Step title="Assign it roles in each client's relationship">
    In Partner Center, open the client's relationship under Admin relationships, select **Add security groups**, tick Triggr's group, tick the [recommended roles](/integrations/microsoft-graph/recommended-roles) and select Save. The assignment shows Active after about 30 seconds. Repeat for each client.
  </Step>
</Steps>

You can only assign roles the relationship includes. See Microsoft's [Grant granular permissions to security groups](https://learn.microsoft.com/en-us/partner-center/customers/gdap-assign-microsoft-entra-roles).

## Connect it in Triggr

<Tabs>
  <Tab title="Triggr Core">
    On Home, click **Set up** next to Connect Microsoft 365 and follow [Connect Microsoft 365](/core/get-started/connect-microsoft-365). Its Sign in step grants admin consent, authorises Microsoft Graph and connects Partner Center, each time as the service account.

    <Frame>
      <img src="https://mintcdn.com/triggr/MwzXHG3UWzFixdSz/images/core/connect-microsoft-365/sign-in.png?fit=max&auto=format&n=MwzXHG3UWzFixdSz&q=85&s=9916ade7f3a22c14dfaec0fa2dac4565" alt="The Sign in step with four rows, Approve Triggr's app, Connect Microsoft Graph, Connect Partner Center and Partner Center check, each marked done, with Redo and Check again buttons." width="1545" height="1150" data-path="images/core/connect-microsoft-365/sign-in.png" />
    </Frame>
  </Tab>

  <Tab title="Triggr Studio">
    <Steps>
      <Step title="Open the integration">
        Go to **Integrations > Microsoft Graph (GDAP)** and click Configure on the Base Configuration card.

        <Frame>
          <img src="https://mintcdn.com/triggr/nyuVXZ1rouDTTEvu/images/integrations-common/base-configuration.png?fit=max&auto=format&n=nyuVXZ1rouDTTEvu&q=85&s=bb81acb082055015f91beda7b4876f35" alt="The Base Configuration card with Status Not Configured, Admin Consent Not Required and a Configure button." width="2272" height="330" data-path="images/integrations-common/base-configuration.png" />
        </Frame>
      </Step>

      <Step title="Enter your partner tenant">
        Leave Use default config selected (Triggr's app, `e0ce32ae-7ba3-4f66-b686-d22dd0eb7841`). In TenantID, enter your own partner tenant's ID, not a client's: click Lookup By Domain and enter `yourcompany.onmicrosoft.com`, or copy it from Entra ID > Overview. Click Save Configuration.

        <Frame>
          <img src="https://mintcdn.com/triggr/nyuVXZ1rouDTTEvu/images/microsoft-graph-gdap-service-account/configure.png?fit=max&auto=format&n=nyuVXZ1rouDTTEvu&q=85&s=e37b102c34019192cc276e5139832da3" alt="The Microsoft Graph (GDAP) configuration window with App Registration set to Use default config, a TenantID field with a Lookup By Domain link, an Allow insecure TLS switch under Advanced, and a Save Configuration button." width="1344" height="1042" data-path="images/microsoft-graph-gdap-service-account/configure.png" />
        </Frame>
      </Step>

      <Step title="Grant admin consent">
        Click **Admin Consent**, sign in as the service account and select Accept. Admin Consent changes to Granted.
      </Step>

      <Step title="Authorize">
        Click **Authorize** and sign in as the service account, never as yourself, with MFA. Every client uses this sign-in.
      </Step>

      <Step title="Connect Microsoft CSP">
        Set up [Microsoft CSP](/integrations/microsoft-graph/csp) with the same account. Triggr uses it to grant its app consent in your clients' tenants.
      </Step>
    </Steps>
  </Tab>
</Tabs>

Once Admin Consent shows Granted on both integrations, remove Global Administrator from the service account in Microsoft Entra. Keep it in AdminAgents and Triggr's security group. Workflows that run without a client use the Base Configuration, in your own tenant.

<Frame caption="Triggr Core's Done step reminds you.">
  <img src="https://mintcdn.com/triggr/MwzXHG3UWzFixdSz/images/core/connect-microsoft-365/done.png?fit=max&auto=format&n=MwzXHG3UWzFixdSz&q=85&s=4cff1ad28723e83173ce17540bbfe1b4" alt="The Done step showing Microsoft 365 is connected with GDAP (Partner Center), contoso.com and 2 clients, a warning to remove Global Administrator from the service account with an Open Entra link, and Back to home and Check client connections buttons." width="1552" height="700" data-path="images/core/connect-microsoft-365/done.png" />
</Frame>

## Make GDAP your default Microsoft connection

In Studio, go to **Settings > Org Variables**, click Setup Wizard and choose GDAP under Preferred Microsoft Connection Method; in Triggr Core, set Default Microsoft connection in Settings > General. Steps with Connection Type set to Automatic then use GDAP, and each client's page shows a GDAP Health card. For one step only, set its Connection Type to Microsoft Graph (GDAP).

<Frame>
  <img src="https://mintcdn.com/triggr/_d7ojda9vf8IHE31/images/studio/clients/setup-wizard-microsoft.png?fit=max&auto=format&n=_d7ojda9vf8IHE31&q=85&s=8b2f926889deab33223e64bdd43e46eb" alt="The Setup Wizard's Preferred Microsoft Connection Method question with three cards: CIPP, GDAP and Individual Enterprise Apps, the last one selected." width="2272" height="580" data-path="images/studio/clients/setup-wizard-microsoft.png" />
</Frame>

## Link each client

Per-client integrations never fall back to the Base Configuration, so each client needs its own tenant ID. In Triggr Core, import your customers from Partner Center and click Link all on Clients instead; see [Add your clients](/core/get-started/add-your-clients#add-clients).

<Frame>
  <img src="https://mintcdn.com/triggr/nyuVXZ1rouDTTEvu/images/integrations-common/per-client-configuration.png?fit=max&auto=format&n=nyuVXZ1rouDTTEvu&q=85&s=11464b4946bea0b580c73330d9114a41" alt="The Per-Client Configuration card listing Acme Corp and Globex, each Not Configured with Admin Consent Not Required and a Configure button." width="2272" height="646" data-path="images/integrations-common/per-client-configuration.png" />
</Frame>

* One client: click Configure on its row, enter its TenantID (or click Lookup By Domain and enter any domain verified in the client's tenant) and click Save Configuration.
* Many clients: click **Automap**, then **Approve All**. It links every unlinked client that has a `microsoftTenantId` variable and tells you how many it skipped.

Saving writes the client's `microsoftTenantId` variable and creates its [Microsoft Exchange](/integrations/microsoft-exchange) configuration from the tenant's default domain. Linked clients show GDAP Setup instead of Admin Consent and Authorize.

## Grant Triggr's app consent in each client

Triggr grants its consent through Partner Center, so it needs [Microsoft CSP](/integrations/microsoft-graph/csp) connected as the service account and Cloud Application Administrator (or Application Administrator) assigned to Triggr's group in the client's relationship.

* One client: on its GDAP Health card, click **Grant app consent**, then Grant consent. Or click Repair, which also sets up Exchange.
* Every client: on Clients, click **Repair all**, then Repair.
* From a workflow: use the Grant GDAP Consent step. Remove GDAP Consent removes all of Triggr's access to a client's tenant.

Microsoft takes a minute or two to apply a new consent; if a check straight afterwards still fails, wait and click Check now.

## Set up Exchange for mailbox steps

Mailbox steps run as Triggr's app through [Microsoft Exchange](/integrations/microsoft-exchange), which needs Exchange.ManageAsApp and the Exchange Administrator role in each client's tenant. Repair grants both when Triggr's group has Privileged Role Administrator in the client's relationship; without it, [grant Exchange access yourself](/integrations/microsoft-exchange#grant-exchange-access-yourself).

## Check the connection

Triggr checks every linked client nightly. The client's GDAP Health card shows Microsoft sign-in, Graph permissions, Admin roles, GDAP relationship (with its end date) and Recent failures, and under Won't fully work here names each workflow missing a role, a permission or Exchange, with the fix. Click Check now to check one client (once a minute), or **Check all** on Clients (once every 10 minutes).

<Frame caption="A client's GDAP Health card in Triggr Core. Studio shows the same checks on the client's page.">
  <img src="https://mintcdn.com/triggr/MwzXHG3UWzFixdSz/images/core/add-your-clients/gdap-health.png?fit=max&auto=format&n=MwzXHG3UWzFixdSz&q=85&s=15946d35b88336c73e7719d95c3f8efe" alt="GDAP health showing App not consented with Repair and Check now buttons, and checks for Microsoft sign-in, Graph permissions, Admin roles, GDAP relationship and Recent failures." width="1340" height="1050" data-path="images/core/add-your-clients/gdap-health.png" />
</Frame>

Repair (org admins only) lists what it will do, then grants or replaces Triggr's consent, sets up Exchange and checks again. It never changes GDAP relationships or roles, and runs at most once every six minutes per client.

To see relationship end dates, select **Expiring** on Clients. If the card says Triggr can't read GDAP end dates yet, click Sign in with Triggr's service account and sign in as that same account; anyone else changes the sign-in every client uses. For a weekly or daily summary, turn on [GDAP alerts](/core/manage/gdap-alerts).

GDAP Setup at the top of the integration page opens the GDAP Setup Wizard: **Start Setup for All Tenants** checks every client's link, both sign-ins, its Partner Center relationship and Triggr's access to its tenant, with fixes under View Remediations. For one client, click GDAP Setup on its row, then Start Setup Wizard.

## Troubleshooting

<AccordionGroup>
  <Accordion title="no Microsoft Graph (GDAP) integration is configured for this client">
    The client isn't linked (its GDAP Health card shows Not linked), and built-in Microsoft steps fail with `… integration is not configured for tenant '<tenant-id>'`. [Link it](#link-each-client) or use Automap.
  </Accordion>

  <Accordion title="App not consented">
    Click **Grant app consent** or Repair on the client's GDAP Health card. If that fails, check Microsoft CSP is authorised as the service account, the account is in AdminAgents, and Triggr's group has Cloud Application Administrator in the client's relationship. See [Microsoft CSP troubleshooting](/integrations/microsoft-graph/csp#troubleshooting).
  </Accordion>

  <Accordion title="Missing permissions">
    Triggr's consent in the client is from an older permission set. Click Repair: it removes the consent and grants it again, so Triggr can't reach the client for a minute or so.
  </Accordion>

  <Accordion title="Missing roles, or &#x22;Needs User Administrator for Onboarding&#x22;">
    Add the named role to the client's GDAP relationship and assign it to Triggr's group in Partner Center (a relationship without it needs replacing). Once the assignment is Active, click Check now.
  </Accordion>

  <Accordion title="GDAP relationship missing, or not active">
    Check the relationship is Active in Partner Center (not Approval Pending), Triggr's group has an Active role assignment in it, the service account is in that group, and the client's TenantID in Triggr is its own.
  </Accordion>

  <Accordion title="GDAP relationship expired, or Expires in N days">
    Click **Renew** on the card, or turn on Auto Extend in Partner Center. An expired relationship can't be renewed: request a new one, assign Triggr's group its roles again, then click Check now.
  </Accordion>

  <Accordion title="Blocked by Conditional Access">
    A policy in the client's tenant blocked the service account (`AADSTS53003`). Exclude your partner tenant's service provider users from it. See [Conditional Access](/integrations/microsoft-graph/conditional-access#your-clients-tenants).
  </Accordion>

  <Accordion title="Triggr's Microsoft sign-in needs renewing — every client is affected">
    The service account's password changed, its sessions were revoked or a policy in your tenant now blocks it. Click Authorize on the Base Configuration card and sign in as the service account with MFA. Repair reports this as "Triggr's Microsoft sign-in for your organisation needs fixing first".
  </Accordion>

  <Accordion title="Triggr's Microsoft app credentials for your organisation need updating — every client is affected">
    Your own app registration's client secret expired. Create a new secret in Microsoft Entra, click **Edit** on the Base Configuration card and paste its Value into ClientSecret.
  </Accordion>

  <Accordion title="Partner Center rejected Triggr's sign-in for this consent change">
    Check the client's relationship is active and the service account is still in AdminAgents, then click Authorize on Microsoft CSP and retry.
  </Accordion>

  <Accordion title="This is your own partner tenant — Triggr never changes it">
    The client's TenantID is your partner tenant's ID. Open its configuration in the Per-Client Configuration card and enter the client's own tenant ID. Automap refuses this too, as it does a tenant another client already uses.
  </Accordion>

  <Accordion title="Another Microsoft setup check for this client is still running">
    Repair and automatic setup take a short lock per client. Wait a few minutes, then run Repair again. "Checked less than a minute ago" and "repaired a few minutes ago" are the rate limits above.
  </Accordion>

  <Accordion title="The sign-in window asks for administrator approval">
    Admin consent hasn't been granted in your partner tenant. Click Admin Consent on the Base Configuration card and sign in as a Global Administrator, then click Authorize again.
  </Accordion>

  <Accordion title="Still can't read end dates — check the account's Partner Center role">
    The account you signed in with isn't an Admin agent, or isn't the service account. Sign in again as the service account, with it in AdminAgents.
  </Accordion>

  <Accordion title="Lookup By Domain can't find the tenant">
    Enter a domain verified in that tenant, such as its `.onmicrosoft.com` domain, or paste the tenant ID from Entra ID > Overview in that tenant.
  </Accordion>
</AccordionGroup>

More questions: see the [Microsoft and GDAP FAQ](/core/reference/microsoft-faq).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.