Microsoft 365 Copilot — Setup
Registering the Entra application this integration authenticates as. Requires an admin who can grant tenant-wide consent: Cloud Application Administrator, Application Administrator, or Global Administrator. (Global Admin is only needed for permissions that enable privilege escalation —RoleManagement.ReadWrite.Directory, AppRoleAssignment.ReadWrite.All — and
neither is used here.)
Step 0 — Be in the right directory
This is the step most setups get wrong, and it fails silently: consent granted in the wrong directory succeeds there and changes nothing where you need it.- In the Azure portal, click your avatar (top right) → Switch directory
- Select the tenant you intend to connect
- Go to Microsoft Entra ID → Overview and confirm the Tenant ID shown matches the one you will enter in g360
Step 1 — Open (or create) the app registration
- Portal search → App registrations
- Open the All applications tab — the default view only lists apps you own, so an app created by a colleague will not appear under “Owned applications”
- Search for the Client ID, or + New registration:
- Name: anything, e.g.
g360 Copilot Analytics - Supported account types: Accounts in this organizational directory only
- Redirect URI: leave blank — this is a daemon app with no user sign-in
- Name: anything, e.g.
- On Overview, confirm Directory (tenant) ID matches Step 0
If Directory (tenant) ID does not match the tenant you want data from, the app lives somewhere else. Either register a new app in the correct tenant, or make this one multi-tenant and consent into the target tenant explicitly.
Step 2 — Add the permissions
- Left nav → API permissions
- + Add a permission → Microsoft Graph
- Choose Application permissions — not Delegated This is the second most common mistake. Delegated permissions act on behalf of a signed-in user; this integration authenticates as itself with no user present, so delegated permissions are inert in it.
-
Tick both:
- Add permissions
User.Read (Delegated) entry Azure adds automatically to every new
registration can stay — it is unused and harmless. Note it is not the same as
User.Read.All: it reads only the signed-in user’s own profile.
Step 3 — Grant admin consent
- Still on API permissions, click Grant admin consent for <Tenant Name>
- Confirm Yes
- Every row’s Status should turn to a green ✅ Granted for <Tenant>
AADSTS7000229 — see
TROUBLESHOOTING.
If the button is greyed out
Your account lacks the role. Either ask an admin, or have them open:Step 4 — Create a client secret
- Left nav → Certificates & secrets → Client secrets → + New client secret
- Set a description and expiry
-
Copy the
Valuecolumn immediately. The table shows two columns. Value is the secret. Secret ID is an identifier and will not authenticate — pasting it producesAADSTS7000215. The Value is displayed only once; once you navigate away it cannot be retrieved, and you must create a new secret.
Step 5 — Verify the service principal exists
- Microsoft Entra ID → Enterprise applications → All applications
- Search for the Client ID
AADSTS7000229 state.
Step 6 — Connect in g360
Integration → LLM → Microsoft 365 Copilot → Connect
Click Test, then save. Assign the connection to a project — the
analytics endpoints resolve connections by project and will 404 without one.
Then sync:
--inline runs in-process, so failures appear in your terminal rather than a
worker log.

