Sync team channels and messages from Microsoft Teams
Microsoft Teams brings your team channels into Brink — channel messages with replies threaded under the message they answer, arriving near-real-time.Who can connect: organization owners and admins.
Teams connects with work or school accounts (Microsoft 365). Personal
Microsoft accounts aren’t supported.
On the Integrations page (Organisation view), click the Microsoft Teams card, then Connect Microsoft Teams in the drawer.
The Microsoft Teams drawer before the first account is connected
2
Authorize with Microsoft
Approve the requested permissions: read channel messages (ChannelMessage.Read.All) and list teams and channels (Team.ReadBasic.All, Channel.ReadBasic.All), plus your basic profile (User.Read).
In most Microsoft 365 tenants these are admin-consent permissions — a Microsoft 365 administrator may need to approve them before the connection works. If the channel picker comes up empty after connecting, missing admin consent is the usual cause.
3
Bind channels
On the Projects page, open the project’s Integrations tab and bind each project’s Teams channel. Use the resource picker — a Teams binding needs both the team and the channel, and the picker handles that pairing for you.
Channel messages, with replies threaded under their parent message and author names resolved. New messages arrive near-real-time — Brink subscribes to each bound channel and renews the subscription automatically — with the regular scheduled sync as a backstop.
By default, Teams connects through Brink’s Microsoft app. Owners and admins can instead point Teams at their own Microsoft Entra ID (Azure AD) app registration — useful when your tenant restricts which third-party apps may be consented to, or when your security team wants the app registration inside your own directory.
This setting is specific to Teams. Pointing Teams at your own app does not
change how Outlook or Outlook Calendar connect — they keep using Brink’s
Microsoft app unless you change them separately.
You’ll need someone who can create app registrations in the Microsoft Entra admin center and grant admin consent. It takes about ten minutes, once per organization.
In the Microsoft Entra admin center, go to Identity → Applications → App registrations and click New registration. Give it a recognizable name such as Brink Connector.
2
Set the supported account types
Choose Accounts in any organizational directory (Any Microsoft Entra ID tenant — Multitenant).
This one matters. Brink signs users in through Microsoft’s organizations endpoint, and a single-tenant registration is rejected there — Microsoft returns AADSTS50194: Application is not configured as a multi-tenant application. Only accounts you invite can ever use the app, so multitenant here does not widen who can sign in to your Teams data.
3
Add Brink's redirect URI
In Brink, open Integrations → Microsoft Teams → Connection method → Use your own Microsoft Teams developer app and copy the Redirect URI shown there (it ends in /oauth/callback/teams).In the registration, under Authentication → Add a platform, choose Web and paste the URI exactly — it must match character for character.
4
Add the delegated Graph permissions
Under API permissions → Add a permission → Microsoft Graph → Delegated permissions, add all of these:
Permission
What it’s for
User.Read
Identify the account that connected
Team.ReadBasic.All
List the teams the account belongs to
Channel.ReadBasic.All
List each team’s channels for the binding picker
ChannelMessage.Read.All
Read messages in the channels you bind
offline_access
Keep the connection alive without asking anyone to sign in again
openid, profile, email
Standard sign-in scopes
Then click Grant admin consent for your tenant.
Without offline_access the connection dies about an hour after it’s made and every later sync fails. Without Team.ReadBasic.All the channel picker lists nothing.
5
Create a client secret
Under Certificates & secrets → Client secrets → New client secret, add a secret and copy its Value immediately — Microsoft shows it once and only once. (Copy the Value column, not the Secret ID.)Note the expiry you choose: when the secret expires, Teams connections stop refreshing until you create a new one and save it in Brink.
6
Copy the client ID
On the registration’s Overview page, copy the Application (client) ID.
Back in the Brink drawer, paste the Microsoft Teams OAuth client ID and Microsoft Teams OAuth client secret, then click Save credentials. Secrets are write-only — after saving, the value is shown masked and never displayed again.The Connection method card then reads Your own Microsoft Teams app · In use.
Connection method — your own Microsoft Teams app in use
2
Connect
Click Connect Microsoft Teams and authorize as usual. From here everything is the same as the standard flow, including binding channels.
To go back to the standard connection, choose Use Brink’s app instead in the same section. Existing connections keep working — credentials take effect on the next connect.
Changing credentials on an already-connected account may invalidate the
existing authorization. If the connection shows Needs attention
afterwards, click Reconnect to re-authorize against the new app.
If something goes wrong: a redirect URI mismatch means the URI in Entra doesn’t exactly match Brink’s — re-copy it from the drawer. AADSTS50194 means the registration is still single-tenant. An empty channel picker after a successful connect almost always means admin consent hasn’t been granted.
Microsoft provides no way for Brink to revoke its own access. Disconnecting deletes Brink’s stored credentials; a Microsoft 365 admin can also remove the app’s access in Entra ID.
Only channels you bind are read. Chats and direct messages are never synced.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Brink","colors":{"primary":"#2a67f9","light":"#5c8bfa","dark":"#1e51d6"},"logo":{"light":"https://mintcdn.com/brink-ai/3uN1NdJRQc4oshRA/logo/light.png?fit=max\u0026auto=format\u0026n=3uN1NdJRQc4oshRA\u0026q=85\u0026s=c2d7ba10f3bda446767775313d55aaf2","dark":"https://mintcdn.com/brink-ai/3uN1NdJRQc4oshRA/logo/dark.png?fit=max\u0026auto=format\u0026n=3uN1NdJRQc4oshRA\u0026q=85\u0026s=c59a33cf9b1a9bbc09d1d3e476461a36","href":"https://docs.trybrink.com"},"favicon":"https://mintcdn.com/brink-ai/3uN1NdJRQc4oshRA/favicon.png?fit=max\u0026auto=format\u0026n=3uN1NdJRQc4oshRA\u0026q=85\u0026s=fe9d2afe60e712533775873d2c70f4fc","background":{"color":{"light":"#fafafa","dark":"#111111"}},"navbar":{"links":[{"href":"https://trybrink.com","label":"Website"}]},"footer":{"socials":{"website":"https://trybrink.com"}},"fonts":{"family":"Hanken Grotesk"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"brink-ai","hasAudioNarration":false,"actualSubdomain":"brink-ai","customDomains":["docs.trybrink.com"],"gitSource":{"type":"github","owner":"brink-data","repo":"brink-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a8dc6ca35b2c3b9936f234f","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"Documentation","count":27},{"language":"default","tag":"Integrations","count":14},{"language":"default","tag":"Connectors","count":12},{"language":"default","tag":"Features","count":8},{"language":"default","tag":"Workspace","count":3},{"language":"default","tag":"Get Started","count":2},{"language":"default","tag":"Release Notes","count":1},{"language":"default","tag":"Updates","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"styles.css","content":"footer a[href=\"https://trybrink.com\"]{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2.5rem}footer a[href=\"https://trybrink.com\"] svg{display:none}footer a[href=\"https://trybrink.com\"]::before{content:\"\";display:block;width:100%;height:100%;background:url(\"/logo/brink-logo.png\") center / contain no-repeat}html.dark footer a[href=\"https://trybrink.com\"]::before,[data-theme=\"dark\"] footer a[href=\"https://trybrink.com\"]::before{background-image:url(\"/logo/brink-logo-dark.png\")}"}],"page":{"pagePath":"integrations/microsoft-teams","slug":"/integrations/microsoft-teams","pageMetadata":{"title":"Microsoft Teams","description":"Sync team channels and messages from Microsoft Teams","href":"/integrations/microsoft-teams"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Sync team channels and messages from Microsoft Teams\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Frame,Heading,Note,OptimizedImage,Step,Steps,Table,Warning}=_components;if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Microsoft Teams brings your team channels into Brink — channel messages with replies threaded under the message they answer, arriving near-real-time.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Who can connect:`}),` organization owners and admins.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Teams connects with `,_jsx(_components.strong,{children:`work or school accounts`}),` (Microsoft 365). Personal\nMicrosoft accounts aren’t supported.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`connect-microsoft-teams`,children:`Connect Microsoft Teams`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Open Integrations`,children:[_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Integrations`}),` page (Organisation view), click the `,_jsx(_components.strong,{children:`Microsoft Teams`}),` card, then `,_jsx(_components.strong,{children:`Connect Microsoft Teams`}),` in the drawer.`]}),_jsx(Frame,{caption:`The Microsoft Teams drawer before the first account is connected`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/connect-drawer.png?fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=afddf5ccd27602b926303e52084529d5`,alt:`Microsoft Teams connection drawer with a Connect button`,\"data-og-width\":`1600`,width:`1600`,\"data-og-height\":`890`,height:`890`,\"data-path\":`images/microsoft-teams/connect-drawer.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/connect-drawer.png?w=280\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=9c5d6e8a8ba2a224035482769544fb17 280w, https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/connect-drawer.png?w=560\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=5f579e1932f2b335e9ab00a4a9ded4c7 560w, https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/connect-drawer.png?w=840\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=0f6c29e10a6313f3eadd7c32444cb9a3 840w, https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/connect-drawer.png?w=1100\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=4d9a61c6a6172a9e6a4444edadd17d13 1100w, https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/connect-drawer.png?w=1650\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=c1eeab11dcd2a7212ee4cf69ecd5b619 1650w, https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/connect-drawer.png?w=2500\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=8694c71f4fd25b1e70bc34fbfb6e783e 2500w`})})]}),_jsxs(Step,{title:`Authorize with Microsoft`,children:[_jsxs(_components.p,{children:[`Approve the requested permissions: read channel messages (`,_jsx(_components.code,{children:`ChannelMessage.Read.All`}),`) and list teams and channels (`,_jsx(_components.code,{children:`Team.ReadBasic.All`}),`, `,_jsx(_components.code,{children:`Channel.ReadBasic.All`}),`), plus your basic profile (`,_jsx(_components.code,{children:`User.Read`}),`).`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`In most Microsoft 365 tenants these are `,_jsx(_components.strong,{children:`admin-consent`}),` permissions — a Microsoft 365 administrator may need to approve them before the connection works. If the channel picker comes up empty after connecting, missing admin consent is the usual cause.`]})})]}),_jsxs(Step,{title:`Bind channels`,children:[_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Projects`}),` page, open the project’s `,_jsx(_components.strong,{children:`Integrations`}),` tab and bind each project’s Teams channel. Use the resource `,_jsx(_components.strong,{children:`picker`}),` — a Teams binding needs both the team and the channel, and the picker handles that pairing for you.`]}),_jsx(Frame,{caption:`Add scope binding on a project's Integrations tab`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/bind-channel.png?fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=ab219beb569029b774fe51689bff87b7`,alt:`Add scope binding form on the Projects page`,\"data-og-width\":`1600`,width:`1600`,\"data-og-height\":`890`,height:`890`,\"data-path\":`images/microsoft-teams/bind-channel.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/bind-channel.png?w=280\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=af7baa613db50fa393bbe3e45d83264e 280w, https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/bind-channel.png?w=560\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=e50a6d455c3ea1accc8876a84300cf6a 560w, https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/bind-channel.png?w=840\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=f4ee5e99039be60dd6be62676670ea4a 840w, https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/bind-channel.png?w=1100\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=cf5df0338bf91c5a6e1b5e48a089fdff 1100w, https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/bind-channel.png?w=1650\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=3aa5695de40a53fa285707b05021a4eb 1650w, https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/bind-channel.png?w=2500\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=0dafe1f5641f8a56f1210c089ad00416 2500w`})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-gets-synced`,children:`What gets synced`}),`\n`,_jsx(_components.p,{children:`Channel messages, with replies threaded under their parent message and author names resolved. New messages arrive near-real-time — Brink subscribes to each bound channel and renews the subscription automatically — with the regular scheduled sync as a backstop.`}),`\n`,_jsx(Heading,{level:`2`,id:`use-your-own-microsoft-app`,children:`Use your own Microsoft app`}),`\n`,_jsxs(_components.p,{children:[`By default, Teams connects through `,_jsx(_components.strong,{children:`Brink’s`}),` Microsoft app. Owners and admins can instead point Teams at `,_jsx(_components.strong,{children:`their own Microsoft Entra ID (Azure AD) app registration`}),` — useful when your tenant restricts which third-party apps may be consented to, or when your security team wants the app registration inside your own directory.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`This setting is specific to Teams. Pointing Teams at your own app does `,_jsx(_components.strong,{children:`not`}),`\nchange how Outlook or Outlook Calendar connect — they keep using Brink’s\nMicrosoft app unless you change them separately.`]})}),`\n`,_jsxs(_components.p,{children:[`You’ll need someone who can create app registrations in the `,_jsx(_components.a,{href:`https://entra.microsoft.com/`,children:`Microsoft Entra admin center`}),` and grant admin consent. It takes about ten minutes, once per organization.`]}),`\n`,_jsx(Heading,{level:`3`,id:`create-the-app-registration`,children:`Create the app registration`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Create a new registration`,children:_jsxs(_components.p,{children:[`In the `,_jsx(_components.strong,{children:`Microsoft Entra admin center`}),`, go to `,_jsx(_components.strong,{children:`Identity → Applications → App registrations`}),` and click `,_jsx(_components.strong,{children:`New registration`}),`. Give it a recognizable name such as `,_jsx(_components.code,{children:`Brink Connector`}),`.`]})}),_jsxs(Step,{title:`Set the supported account types`,children:[_jsxs(_components.p,{children:[`Choose `,_jsx(_components.strong,{children:`Accounts in any organizational directory (Any Microsoft Entra ID tenant — Multitenant)`}),`.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`This one matters. Brink signs users in through Microsoft’s `,_jsx(_components.code,{children:`organizations`}),` endpoint, and a `,_jsx(_components.strong,{children:`single-tenant`}),` registration is rejected there — Microsoft returns `,_jsx(_components.em,{children:`AADSTS50194: Application is not configured as a multi-tenant application`}),`. Only accounts you invite can ever use the app, so multitenant here does not widen who can sign in to your Teams data.`]})})]}),_jsxs(Step,{title:`Add Brink's redirect URI`,children:[_jsxs(_components.p,{children:[`In Brink, open `,_jsx(_components.strong,{children:`Integrations → Microsoft Teams → Connection method → Use your own Microsoft Teams developer app`}),` and copy the `,_jsx(_components.strong,{children:`Redirect URI`}),` shown there (it ends in `,_jsx(_components.code,{children:`/oauth/callback/teams`}),`).`]}),_jsxs(_components.p,{children:[`In the registration, under `,_jsx(_components.strong,{children:`Authentication → Add a platform`}),`, choose `,_jsx(_components.strong,{children:`Web`}),` and paste the URI exactly — it must match character for character.`]})]}),_jsxs(Step,{title:`Add the delegated Graph permissions`,children:[_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`API permissions → Add a permission → Microsoft Graph → Delegated permissions`}),`, add all of these:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Permission`}),_jsx(_components.th,{children:`What it’s for`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`User.Read`})}),_jsx(_components.td,{children:`Identify the account that connected`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Team.ReadBasic.All`})}),_jsx(_components.td,{children:`List the teams the account belongs to`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Channel.ReadBasic.All`})}),_jsx(_components.td,{children:`List each team’s channels for the binding picker`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ChannelMessage.Read.All`})}),_jsx(_components.td,{children:`Read messages in the channels you bind`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`offline_access`})}),_jsx(_components.td,{children:`Keep the connection alive without asking anyone to sign in again`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`openid`}),`, `,_jsx(_components.code,{children:`profile`}),`, `,_jsx(_components.code,{children:`email`})]}),_jsx(_components.td,{children:`Standard sign-in scopes`})]})]})]}),_jsxs(_components.p,{children:[`Then click `,_jsx(_components.strong,{children:`Grant admin consent`}),` for your tenant.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`Without `,_jsx(_components.code,{children:`offline_access`}),` the connection dies about an hour after it’s made and every later sync fails. Without `,_jsx(_components.code,{children:`Team.ReadBasic.All`}),` the channel picker lists nothing.`]})})]}),_jsxs(Step,{title:`Create a client secret`,children:[_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Certificates \u0026 secrets → Client secrets → New client secret`}),`, add a secret and copy its `,_jsx(_components.strong,{children:`Value`}),` immediately — Microsoft shows it once and only once. (Copy the `,_jsx(_components.em,{children:`Value`}),` column, not the `,_jsx(_components.em,{children:`Secret ID`}),`.)`]}),_jsx(_components.p,{children:`Note the expiry you choose: when the secret expires, Teams connections stop refreshing until you create a new one and save it in Brink.`})]}),_jsx(Step,{title:`Copy the client ID`,children:_jsxs(_components.p,{children:[`On the registration’s `,_jsx(_components.strong,{children:`Overview`}),` page, copy the `,_jsx(_components.strong,{children:`Application (client) ID`}),`.`]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`connect-it-to-brink`,children:`Connect it to Brink`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Save the credentials`,children:[_jsxs(_components.p,{children:[`Back in the Brink drawer, paste the `,_jsx(_components.strong,{children:`Microsoft Teams OAuth client ID`}),` and `,_jsx(_components.strong,{children:`Microsoft Teams OAuth client secret`}),`, then click `,_jsx(_components.strong,{children:`Save credentials`}),`. Secrets are write-only — after saving, the value is shown masked and never displayed again.`]}),_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Connection method`}),` card then reads `,_jsx(_components.strong,{children:`Your own Microsoft Teams app · In use`}),`.`]}),_jsx(Frame,{caption:`Connection method — your own Microsoft Teams app in use`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/byo-panel.png?fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=b7d79707d8d5427c528a4ee3c8ccda50`,alt:`Connection method panel with redirect URI, client ID and client secret fields`,\"data-og-width\":`1600`,width:`1600`,\"data-og-height\":`890`,height:`890`,\"data-path\":`images/microsoft-teams/byo-panel.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/byo-panel.png?w=280\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=b8c97c076272936b1d3b5f17c91e6294 280w, https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/byo-panel.png?w=560\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=5383fe00f8bd9a99bb65469581da6d90 560w, https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/byo-panel.png?w=840\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=7c538d03b3385a5380e0dba0d12383b9 840w, https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/byo-panel.png?w=1100\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=9f5b8af2d4aedd3052c05e09385aeed3 1100w, https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/byo-panel.png?w=1650\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=8a4082c71659b2a0798d0f26360f32e1 1650w, https://mintcdn.com/brink-ai/UOQCALpdZ3FrSdYn/images/microsoft-teams/byo-panel.png?w=2500\u0026fit=max\u0026auto=format\u0026n=UOQCALpdZ3FrSdYn\u0026q=85\u0026s=07d977e720e10ca5da97fbd4b87596da 2500w`})})]}),_jsx(Step,{title:`Connect`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Connect Microsoft Teams`}),` and authorize as usual. From here everything is the same as the standard flow, including binding channels.`]})})]}),`\n`,_jsxs(_components.p,{children:[`To go back to the standard connection, choose `,_jsx(_components.strong,{children:`Use Brink’s app instead`}),` in the same section. Existing connections keep working — credentials take effect on the next connect.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Changing credentials on an already-connected account may invalidate the\nexisting authorization. If the connection shows `,_jsx(_components.strong,{children:`Needs attention`}),`\nafterwards, click `,_jsx(_components.strong,{children:`Reconnect`}),` to re-authorize against the new app.`]})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`If something goes wrong:`}),` a `,_jsx(_components.em,{children:`redirect URI mismatch`}),` means the URI in Entra doesn’t exactly match Brink’s — re-copy it from the drawer. `,_jsx(_components.em,{children:`AADSTS50194`}),` means the registration is still single-tenant. An empty channel picker after a successful connect almost always means admin consent hasn’t been granted.`]}),`\n`,_jsx(Heading,{level:`2`,id:`notes`,children:`Notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Microsoft provides no way for Brink to revoke its own access. Disconnecting deletes Brink’s stored credentials; a Microsoft 365 admin can also remove the app’s access in Entra ID.`}),`\n`,_jsx(_components.li,{children:`Only channels you bind are read. Chats and direct messages are never synced.`}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Microsoft Teams","description":"Sync team channels and messages from Microsoft Teams","href":"/integrations/microsoft-teams"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Connect Microsoft Teams","slug":"connect-microsoft-teams","depth":2,"children":[]},{"title":"What gets synced","slug":"what-gets-synced","depth":2,"children":[]},{"title":"Use your own Microsoft app","slug":"use-your-own-microsoft-app","depth":2,"children":[{"title":"Create the app registration","slug":"create-the-app-registration","depth":3,"children":[]},{"title":"Connect it to Brink","slug":"connect-it-to-brink","depth":3,"children":[]}]},{"title":"Notes","slug":"notes","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"brink-ai","siteName":"Brink","title":"Microsoft Teams - Brink","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-25T16:33:49.749Z","originalFileLocation":"integrations/microsoft-teams.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Sync team channels and messages from Microsoft Teams\">\u003cmeta data-mint-head name=\"application-name\" content=\"Brink\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/brink-ai/Nral_qxxJyP4qgg_/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/brink-ai/Nral_qxxJyP4qgg_/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/brink-ai/Nral_qxxJyP4qgg_/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/brink-ai/Nral_qxxJyP4qgg_/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/brink-ai/Nral_qxxJyP4qgg_/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/brink-ai/Nral_qxxJyP4qgg_/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/brink-ai/Nral_qxxJyP4qgg_/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/brink-ai/Nral_qxxJyP4qgg_/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/brink-ai/Nral_qxxJyP4qgg_/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Microsoft Teams - Brink\">\u003cmeta data-mint-head property=\"og:description\" content=\"Sync team channels and messages from Microsoft Teams\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Brink\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.trybrink.com/integrations/microsoft-teams\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://brink-ai.mintlify.site/_mintlify/api/og/v2?division=Connectors\u0026amp;title=Microsoft+Teams\u0026amp;description=Sync+team+channels+and+messages+from+Microsoft+Teams\u0026amp;theme=065a4b5b4a9b4bfd823d221b\u0026amp;signature=6ea87c335e14339f5fb215b395b88db51acaaec7654131fcf02ff1665a8fb51d\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Microsoft Teams - Brink\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Sync team channels and messages from Microsoft Teams\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://brink-ai.mintlify.site/_mintlify/api/og/v2?division=Connectors\u0026amp;title=Microsoft+Teams\u0026amp;description=Sync+team+channels+and+messages+from+Microsoft+Teams\u0026amp;theme=065a4b5b4a9b4bfd823d221b\u0026amp;signature=6ea87c335e14339f5fb215b395b88db51acaaec7654131fcf02ff1665a8fb51d\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/brink-ai/Nral_qxxJyP4qgg_/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Brink\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2a67f9\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.trybrink.com/integrations/microsoft-teams\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integrations/microsoft-teams.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.trybrink.com/#organization\",\"name\":\"Brink\",\"url\":\"https://docs.trybrink.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/brink-ai/3uN1NdJRQc4oshRA/logo/light.png?fit=max\u0026auto=format\u0026n=3uN1NdJRQc4oshRA\u0026q=85\u0026s=c2d7ba10f3bda446767775313d55aaf2\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.trybrink.com#website\",\"name\":\"Brink\",\"url\":\"https://docs.trybrink.com\",\"publisher\":{\"@id\":\"https://docs.trybrink.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.trybrink.com/integrations/microsoft-teams#webpage\",\"url\":\"https://docs.trybrink.com/integrations/microsoft-teams\",\"name\":\"Microsoft Teams\",\"description\":\"Sync team channels and messages from Microsoft Teams\",\"dateModified\":\"2026-08-25T16:33:49.749Z\",\"isPartOf\":{\"@id\":\"https://docs.trybrink.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.trybrink.com/integrations/microsoft-teams#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.trybrink.com/integrations/microsoft-teams#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Integrations\",\"item\":\"https://docs.trybrink.com/integrations/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Connectors\",\"item\":\"https://docs.trybrink.com/integrations/procore\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Microsoft Teams\",\"item\":\"https://docs.trybrink.com/integrations/microsoft-teams\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.trybrink.com/integrations/microsoft-teams#article\",\"headline\":\"Microsoft Teams\",\"name\":\"Microsoft Teams\",\"description\":\"Sync team channels and messages from Microsoft Teams\",\"url\":\"https://docs.trybrink.com/integrations/microsoft-teams\",\"mainEntityOfPage\":{\"@id\":\"https://docs.trybrink.com/integrations/microsoft-teams#webpage\"},\"dateModified\":\"2026-08-25T16:33:49.749Z\",\"publisher\":{\"@id\":\"https://docs.trybrink.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.trybrink.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Brink\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Brink\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/integrations/microsoft-teams.md","siteName":"Brink","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","pages":[{"title":"Welcome to Brink","href":""},{"title":"Quickstart","href":"/quickstart"}]},{"group":"Workspace","pages":[{"title":"Organization \u0026 members","href":"/workspace/organizations"},{"title":"Projects","href":"/workspace/projects"},{"title":"Your profile","href":"/workspace/profile"}]},{"group":"Features","pages":[{"title":"Ask the assistant","href":"/features/assistant"},{"title":"Home \u0026 tasks","href":"/features/tasks"},{"title":"Document Center","href":"/features/documents"},{"title":"Daily","href":"/features/daily"},{"title":"Schedule","href":"/features/schedule"},{"title":"Wiki \u0026 Review","href":"/features/wiki"},{"title":"Digests \u0026 notifications","href":"/features/digests"},{"title":"Agents","href":"/features/agents"}]},{"group":"Integrations","pages":[{"title":"Integrations overview","href":"/integrations/overview"},{"title":"Syncing \u0026 permissions","href":"/integrations/syncing"},{"group":"Connectors","pages":[{"title":"Procore","href":"/integrations/procore"},{"title":"Gmail","href":"/integrations/gmail"},{"title":"Outlook","href":"/integrations/outlook"},{"title":"Google Calendar","href":"/integrations/google-calendar"},{"title":"Outlook Calendar","href":"/integrations/outlook-calendar"},{"title":"Slack","description":"Sync project channels and threads from your Slack workspace","href":"/integrations/slack"},{"title":"Microsoft Teams","href":"/integrations/microsoft-teams"},{"title":"Google Drive","description":"Sync My Drive folders and shared drives into Brink","href":"/integrations/google-drive"},{"title":"OneDrive \u0026 SharePoint","href":"/integrations/onedrive"},{"title":"Box","href":"/integrations/box"},{"title":"Dropbox","href":"/integrations/dropbox"},{"title":"AI Employee Inbox","href":"/integrations/ai-employee-inbox"}]}]}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes"}]}]},"basePath":"","title":"Microsoft Teams - Brink","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-BXrZabKK.js","DynamicMarkdown-CtasenyM.js","zoom-image-lightbox-C5F0mVLH.js","lightbox-handle-r17bVUz3.js"]}