Connect Bubble to Microsoft Teams using the Workflows app webhook — a modern replacement for deprecated Outlook Connectors. In Bubble's API Connector, POST a JSON payload (plain text or Adaptive Card) to your Teams Workflows webhook URL, stored as a Private header. No Azure AD or OAuth required for basic channel notifications. For advanced scenarios like posting to dynamic channels, the Microsoft Graph API path requires Azure AD app registration.
| Fact | Value |
|---|---|
| Tool | Microsoft Teams |
| Category | Communication |
| Method | Bubble API Connector |
| Difficulty | Intermediate |
| Time required | 30 minutes |
| Last updated | July 2026 |
Send Teams Channel Messages from Bubble — New Workflows App Webhook
Microsoft Teams is the default collaboration hub for millions of organizations running on Microsoft 365, and connecting your Bubble app to Teams lets you deliver automated alerts, approvals, status updates, and custom notifications directly into the channels your team already monitors. Whether you want to notify a channel when a new deal closes in your CRM, send a daily digest of app metrics, or route support tickets to a Teams thread, the integration takes under 30 minutes to set up.
Before diving into configuration, you need to know about a critical change in 2024: Microsoft deprecated legacy Incoming Webhooks created through the old Connectors UI (recognizable by their `outlook.office.com/webhook/...` URL format). The new standard is the **Workflows app** inside Teams, which is powered by Power Automate under the hood. Workflows webhooks use a different URL format — typically starting with `prod-xx.westus.logic.azure.com` or a similar regional Power Automate endpoint. If you have an older integration or are following an older tutorial showing the Connectors setup, you need to recreate the webhook using the Workflows app instead.
The good news: the HTTP interface is nearly identical. You still POST a JSON body to an HTTPS URL — no Azure AD app, no OAuth tokens, no complex authentication. The webhook URL itself acts as the credential, which is why Bubble's API Connector **Private** checkbox is so important: it prevents the URL from appearing in browser network requests.
For teams that need to post to multiple channels dynamically, look up channel member lists, or post messages on behalf of users, the Microsoft Graph API path is available as an advanced option. That path requires Azure AD app registration, admin consent for `ChannelMessage.Send` application permissions, and a Client Credentials OAuth flow to obtain a Bearer token. The Graph approach is covered in Step 5 as an optional advanced path — most Bubble builders will find the Workflows webhook sufficient.
Integration method
Bubble connects to Microsoft Teams via the Workflows app webhook (Power Automate–backed) using the API Connector. The webhook URL is stored as a Private header constant so it never reaches the browser. For plain text notifications, POST `{"text": "message"}` to the URL. For rich Adaptive Card messages, provide a valid Adaptive Card JSON body. The legacy Outlook Connectors (outlook.office.com/webhook/...) are being retired by Microsoft — this page covers only the current Workflows app approach.
Prerequisites
- A Microsoft Teams workspace where you have permission to add apps to a channel (member or admin role)
- A Bubble app on any plan for the basic webhook path; a paid Bubble plan (Starter or higher) for Backend Workflows
- Basic familiarity with Bubble's workflow editor and the Plugins tab
- Optional: an Azure AD tenant with admin access if you plan to use the Microsoft Graph API advanced path
Step-by-step guide
Create the Teams Workflows Webhook
Open Microsoft Teams and navigate to the channel where you want to receive Bubble notifications. Click the three-dot menu (…) next to the channel name in the sidebar. Select **Workflows** from the context menu — this opens the Power Automate Workflows panel inside Teams. In the Workflows search panel, find or search for the template named **'Post to a channel when a webhook request is received'** and click it. Give the workflow a descriptive name (for example, 'Bubble Notifications to Sales Channel'), confirm the channel destination, and click **Next**. Click **Add workflow** to create it. After creation, Teams displays a webhook URL — copy this URL immediately and store it somewhere safe (a password manager or your Bubble app's private notes). This URL is typically in the format `https://prod-xx.westus.logic.azure.com/workflows/...` and is specific to this channel and workflow. Anyone with this URL can POST messages to your Teams channel, so treat it like a password. **Important:** If you see an option for the older 'Incoming Webhooks' via the Connectors UI (Apps → Connectors), do not use it — these legacy webhooks are being retired by Microsoft and may stop working without notice. Always use the Workflows app approach. Once you have copied the webhook URL, you are ready to configure Bubble.
Pro tip: If you cannot see the Workflows option on the channel's three-dot menu, your Teams admin may need to enable the Workflows app for your organization. Check with your IT admin or navigate to the Teams Admin Center to ensure Power Automate Workflows are permitted.
Expected result: A Power Automate-backed webhook URL is generated and copied. You have NOT yet connected anything to Bubble — the URL is ready to paste into the API Connector in the next step.
Add the API Connector Plugin to Bubble
In your Bubble editor, click the **Plugins** tab in the left sidebar. Click **Add plugins** and search for **'API Connector'** — look for the plugin published by Bubble (the official one). Click **Install** and confirm. This plugin allows Bubble to make server-side HTTP requests to any external API. Once installed, you will see the API Connector in your Plugins tab. Click on it to open its configuration panel. Click **Add another API** to create a new API configuration. Name it something like 'Microsoft Teams' so it is easy to find in your workflows. In the Base URL field, you can either paste the full Workflows webhook URL directly (the cleanest approach for a single channel) or use just `https://` as a placeholder and paste the full path into the call-level URL field. For security, the recommended approach is to paste the full Workflows webhook URL directly into the **Base URL field** and then check the **Private** checkbox next to it. This marks the URL as a server-side constant — Bubble will never send it to the browser in API responses or page data. Alternately, if you need to POST to multiple different webhook URLs (for different channels), add the webhook URL as a header constant named something like 'X-Webhook-Target' marked Private, and reference it dynamically in your workflow.
1{2 "api_name": "Microsoft Teams",3 "base_url": "<your Workflows webhook URL — paste here and mark Private>",4 "authentication": "None or private header",5 "shared_headers": [6 {7 "key": "Content-Type",8 "value": "application/json",9 "private": false10 }11 ]12}Pro tip: Do NOT put the webhook URL in a non-private public parameter or in a Bubble Option Set visible to logged-out users. The Private checkbox in the API Connector Base URL field is how Bubble prevents server-side secrets from being returned to the browser.
Expected result: The Microsoft Teams API is added to the API Connector plugin in Bubble. The webhook URL is stored as a Private Base URL field. No calls have been created yet.
Create the 'Send Teams Message' API Call
Inside the Microsoft Teams API configuration in the API Connector, click **Add a call**. Name this call 'Send Message'. Set the method to **POST**. If you pasted the full webhook URL in the Base URL, leave the call-level URL path empty (or enter a `/`). If you kept the Base URL generic, paste the full webhook URL in the path field. Set **Body type** to **JSON**. In the body section, add the following JSON structure: ```json {"text": "<message>"} ``` Click the small **< >** toggle or use Bubble's body editor to mark `<message>` as a dynamic parameter named `message` (type: text). This is the field your workflow will populate at runtime. In the **Use as** dropdown, select **Action** (since this is a mutation, not a data source). Now you need to **Initialize the call**. Click **Initialize call**. In the `message` field, type a test string such as `Test message from Bubble setup`. Click **Send**. A successful response from the Teams Workflows webhook returns HTTP 202 with an empty body or a redirect. If Teams accepted the message, check your Teams channel — the message should appear within a few seconds. If you receive a 400 or an error from Bubble saying 'There was an issue setting up your call', double-check that your webhook URL is correct and that the JSON body is valid. Once the initialize call succeeds, click **Save** on the API call. Bubble now registers all the response fields and makes this call available as an action in your workflow editor.
1{2 "method": "POST",3 "url": "<Teams Workflows webhook URL stored in Base URL>",4 "headers": {5 "Content-Type": "application/json"6 },7 "body": {8 "text": "<dynamic:message>"9 }10}Pro tip: The Teams Workflows webhook returns HTTP 202 (Accepted) on success, not 200. Bubble treats 202 as a successful response, so the call will initialize correctly. If the body is blank in the response, that is normal for this webhook.
Expected result: A test message appears in your Teams channel. The 'Send Message' API call is initialized in Bubble's API Connector and shows as available under Plugin actions in the workflow editor.
Build a Bubble Workflow to Send Teams Messages
Now wire the Teams notification into your Bubble app logic. Open the Bubble workflow editor by clicking **Workflow** in the top navigation. Create a new workflow or click an existing trigger (such as a Button click, 'When a new Thing is created', or a Backend Workflow trigger). Add a new action by clicking **Add action**. Under the **Plugins** section, find **Microsoft Teams - Send Message** (the name you gave the API call). Click it to add it as a workflow step. In the action parameters panel, set the `message` field to whatever dynamic data you want to send. For example: `'New signup: ' + Current User's email + ' at ' + Current date/time`. You can compose multi-line messages using Bubble's text concatenation operators. For **Backend Workflows** (paid Bubble plans): navigate to the **Backend Workflows** section (left sidebar under the Workflow tab or via the Server-side actions panel). Create a new API Workflow named 'Notify Teams'. Add the Microsoft Teams - Send Message action. You can schedule this Backend Workflow from client-side workflows using 'Schedule API Workflow', trigger it on a recurring basis, or call it in response to database changes. Backend Workflows are preferred because they run on Bubble's servers — the webhook URL in the Base URL (Private) is never exposed to the browser even if a client-side action somehow triggered the same call. **For users on Bubble Free plan:** You can use a client-side 'Button is clicked' workflow to call the API Connector action. The webhook URL will be in the API Connector Private field which Bubble does not expose directly in browser DevTools network requests for Private-marked Base URLs. However, the most secure and reliable pattern remains Backend Workflows on a paid plan.
Pro tip: If you want to send messages from multiple triggers (new signup, new payment, new record), create one 'Notify Teams' Backend Workflow and schedule it from any workflow in your app with the dynamic message text as a parameter — cleaner than adding separate Teams API calls to every workflow.
Expected result: Your Bubble workflow triggers and sends a message to the Microsoft Teams channel. The message appears in Teams within a few seconds of the workflow running.
Send Adaptive Card Messages for Rich Formatting
For more visually rich notifications — ones that include tables, buttons, images, or structured data — you can replace the simple `{"text": "..."}` body with a full Adaptive Card JSON payload. Teams Workflows webhooks support Adaptive Cards compliant with the Adaptive Card schema. Before embedding an Adaptive Card in Bubble, design and validate your card at **adaptivecards.io/designer**. This visual tool lets you build the card, preview how it renders in Teams, and export the JSON. An example minimal Adaptive Card body looks like this: ```json { "type": "message", "attachments": [ { "contentType": "application/vnd.microsoft.card.adaptive", "content": { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.4", "body": [ { "type": "TextBlock", "text": "<dynamic:title>", "weight": "Bolder", "size": "Medium" }, { "type": "TextBlock", "text": "<dynamic:body_text>", "wrap": true } ] } } ] } ``` In Bubble's API Connector, create a second API call (or replace the body of the existing one) with this Adaptive Card structure. Mark `<dynamic:title>` and `<dynamic:body_text>` as dynamic text parameters. A critical detail: if the Adaptive Card JSON is malformed or uses unsupported schema elements, Teams silently drops the message with no error returned to Bubble. Always validate the card at adaptivecards.io first. If you need to send Adaptive Cards with interactive action buttons that POST back to a Bubble endpoint, that requires the full Microsoft Graph API path (Azure AD app with `ChannelMessage.Send` permission), not the Workflows webhook approach. Interactive buttons are outside the scope of the basic webhook integration.
1{2 "type": "message",3 "attachments": [4 {5 "contentType": "application/vnd.microsoft.card.adaptive",6 "content": {7 "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",8 "type": "AdaptiveCard",9 "version": "1.4",10 "body": [11 {12 "type": "TextBlock",13 "text": "<dynamic:card_title>",14 "weight": "Bolder",15 "size": "Medium"16 },17 {18 "type": "FactSet",19 "facts": [20 { "title": "Status", "value": "<dynamic:status>" },21 { "title": "Amount", "value": "<dynamic:amount>" },22 { "title": "User", "value": "<dynamic:user_email>" }23 ]24 }25 ]26 }27 }28 ]29}Pro tip: Start with the simple `{"text": "..."}` body to confirm the webhook works end-to-end, then upgrade to Adaptive Cards once the basic flow is verified. Debugging Adaptive Card formatting is much easier when you know the HTTP layer is already working.
Expected result: Rich Adaptive Card messages appear in your Teams channel with formatted text blocks, fact sets, and the dynamic data you configured in Bubble's API Connector call parameters.
Optional: Microsoft Graph API for Advanced Messaging
If you need to post messages to channels dynamically (without a pre-created webhook per channel), read channel message history, or build a Teams bot that responds to users, the Microsoft Graph API is the path forward. This is an advanced setup requiring Azure AD. Here is the overview of the Graph API flow in Bubble: 1. Go to **portal.azure.com** → Azure Active Directory → App registrations → New registration. Name it (e.g., 'Bubble Teams Bot'). Select 'Accounts in this organizational directory only' for single-tenant. 2. After creating the app, go to **API permissions** → Add permission → Microsoft Graph → Application permissions. Add `ChannelMessage.Send` and `Team.ReadBasic.All`. Click **Grant admin consent** (requires a Global Admin). 3. Go to **Certificates & Secrets** → New client secret. Copy the secret value — you only see it once. 4. Note your **Tenant ID**, **Client ID**, and **Client Secret**. 5. In Bubble API Connector, create a new API named 'MS Graph Auth'. Add a POST call to `https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token` with a form-data body: `grant_type=client_credentials`, `client_id=<your client ID>`, `client_secret=<your secret, Private>`, `scope=https://graph.microsoft.com/.default`. 6. Initialize this token call, store the returned `access_token` in a Bubble data type named 'GraphToken' with an `expires_at` field (current time + 3599 seconds). 7. Create a second API call: POST `https://graph.microsoft.com/v1.0/teams/{teamId}/channels/{channelId}/messages` with header `Authorization: Bearer {{token}}` (Private, dynamic). Body: `{"body": {"content": "{{message_text}}"}}`. Mark token as Private. RapidDev's team has built hundreds of Bubble apps with integrations like this — if your Teams setup needs multiple channels, bot personas, or enterprise policy compliance, a free scoping call at rapidevelopers.com/contact can save you days of Azure configuration.
1{2 "token_endpoint": "https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token",3 "token_body": {4 "grant_type": "client_credentials",5 "client_id": "<your Azure app client ID — Private>",6 "client_secret": "<your Azure app client secret — Private>",7 "scope": "https://graph.microsoft.com/.default"8 },9 "graph_message_endpoint": "https://graph.microsoft.com/v1.0/teams/{teamId}/channels/{channelId}/messages",10 "graph_message_body": {11 "body": {12 "content": "<dynamic:message_text>"13 }14 },15 "graph_auth_header": "Authorization: Bearer <dynamic:access_token — Private>"16}Pro tip: The Graph API `ChannelMessage.Send` application permission requires admin consent and cannot be self-consented by regular users. Ensure a Global Admin in your Azure tenant grants consent before testing. Without it, you will receive a 403 Forbidden error.
Expected result: For the advanced Graph path: your Bubble app can post messages to any Teams channel by fetching a Client Credentials token, storing it with expiry, and calling the Graph API messages endpoint with the Bearer token in a Private header.
Common use cases
Automated Deal and Lead Notifications
When a new lead is created or a deal changes status in your Bubble CRM app, trigger a Backend Workflow that posts an Adaptive Card to a dedicated Sales channel in Teams. The card can include the lead name, deal value, assigned rep, and a direct link back to the Bubble record — keeping the sales team informed without leaving Teams.
When a new Lead record is created in Bubble, send a Teams message to the #sales-alerts channel showing the lead name, company, email, and estimated deal value.
Copy this prompt to try it in Bubble
Internal App Approval Workflows
For internal tools built on Bubble — expense approvals, content sign-offs, PTO requests — post an Adaptive Card to the approver's Teams channel that summarizes the request details. The approver can view the summary in Teams and then navigate to the Bubble app to approve or reject. This avoids email overload while keeping the approval action in your Bubble database.
When an expense report is submitted in Bubble and exceeds $500, post a Teams message to #finance-approvals with the employee name, amount, category, and a link to review it in the Bubble app.
Copy this prompt to try it in Bubble
System Health Alerts and Error Monitoring
Use Bubble's scheduled Backend Workflows (paid plan) to run periodic health checks on your app data — checking for failed API calls, payment errors, overdue records, or data anomalies — and post alert messages to a #dev-alerts or #ops channel in Teams when issues are detected. This turns Bubble into a lightweight monitoring system with Teams as the alert delivery channel.
Every hour, check if any Stripe payment in Bubble has had a 'failed' status for more than 24 hours, and send a Teams message to #payments-alerts listing those failed payments.
Copy this prompt to try it in Bubble
Troubleshooting
The API Connector Initialize call shows 'There was an issue setting up your call' or returns an error when testing the Teams webhook
Cause: The most common causes are: (1) the webhook URL was copied incorrectly or is incomplete, (2) the JSON body is malformed (missing quotes, trailing comma), or (3) the Teams Workflows flow was not saved/activated properly after creation.
Solution: First, test the webhook URL outside of Bubble using a tool like Postman or curl: POST `{"text": "test"}` with Content-Type: application/json to the URL. If Postman also fails, re-create the Workflows webhook in Teams from scratch. If Postman succeeds but Bubble fails, check that the body type in Bubble's API Connector is set to JSON (not Form data) and that the JSON body is valid.
Messages do not appear in the Teams channel even though Bubble reports the workflow action succeeded (no error shown)
Cause: This happens when (1) the Teams Workflows flow is paused or disabled in Power Automate, (2) the channel was deleted or the webhook is now pointing to a channel you no longer have access to, or (3) the Adaptive Card JSON is invalid — Teams silently drops malformed Adaptive Cards.
Solution: Check the workflow status in Power Automate (flow.microsoft.com): sign in, find the workflow, and verify it shows 'On'. If you are sending Adaptive Cards, validate the JSON at adaptivecards.io/designer. For plain text messages, try switching the body back to `{"text": "test"}` to rule out Adaptive Card formatting issues. Re-copy the webhook URL from the Workflows app if the original URL may have changed.
The Teams Workflows webhook URL is visible in browser DevTools network requests — the integration exposes the URL
Cause: The webhook URL was added as a non-Private field in the API Connector (for example, as an unprotected URL parameter or in a client-side workflow without the Private checkbox enabled).
Solution: In the API Connector, ensure the webhook URL is in the **Base URL field** with the **Private checkbox ticked**, OR added as a shared header constant with Private checked. Do not pass the URL as a dynamic parameter from client-side Bubble actions. Move the API call to a Backend Workflow (paid plan) for maximum security — Backend Workflows run server-side and their request details are never accessible from browser DevTools.
'Workflow API is not enabled' error when trying to use Backend Workflows to trigger Teams notifications
Cause: Backend Workflows (API Workflows) require a paid Bubble plan. This feature is not available on the Bubble Free plan.
Solution: Upgrade your Bubble app to the Starter plan or higher to enable Backend Workflows. As a temporary workaround on the Free plan, you can trigger the Teams API call from a client-side workflow (Button click, page load) — less secure but functional for testing. For production apps handling sensitive data, the paid plan Backend Workflow pattern is strongly recommended.
Teams shows an error about the Adaptive Card schema or the card renders incorrectly with missing elements
Cause: Adaptive Card JSON must conform to a specific schema version. Common issues: missing required `$schema` property, unsupported `version` value, or invalid element types. Teams may also render cards differently from the adaptivecards.io preview if the Teams client version does not support the card version you specified.
Solution: Use adaptivecards.io/designer to build and validate your Adaptive Card. Set `"version": "1.4"` which is widely supported in Teams. Ensure the wrapper structure uses `{"type": "message", "attachments": [{"contentType": "application/vnd.microsoft.card.adaptive", "content": {...}}]}` format. Test with the simplest possible card (one TextBlock) before adding complexity.
Best practices
- Always store the Teams Workflows webhook URL in the API Connector Base URL field with the Private checkbox enabled — the URL provides unauthenticated write access to your Teams channel and must be treated as a secret.
- Use Backend Workflows (paid Bubble plan) for Teams notifications triggered by database events or scheduled jobs, rather than client-side workflows — this keeps all request logic server-side and reduces Workload Unit (WU) consumption from browser-initiated calls.
- Validate Adaptive Card JSON at adaptivecards.io/designer before pasting it into the Bubble API Connector body — invalid card JSON causes Teams to silently drop messages with no error returned to Bubble.
- Create one reusable 'Notify Teams' Backend Workflow with a dynamic `message` parameter and call it from all other workflows in your app, rather than adding a Teams API call directly to each individual workflow — this makes the integration easier to update and debug.
- Rotate the Workflows webhook URL periodically or immediately if you suspect it has been exposed — delete the old Workflows flow in Power Automate, create a new one in Teams, and update the Base URL in Bubble's API Connector.
- Prefer the Workflows webhook approach over the Microsoft Graph API for simple channel notifications — the Graph API requires Azure AD admin setup, Client Credentials token management, and significantly more configuration for the same end result of posting text to a channel.
- Monitor Bubble's Logs tab → Workflow logs after deployment to verify Teams API calls are succeeding and to track WU consumption for scheduled notification workflows.
- Test your integration in a private Teams channel dedicated to Bubble testing before deploying to production channels — this prevents test messages from cluttering real team communication and makes it easier to validate message formatting.
Alternatives
Slack has a far simpler Incoming Webhook pattern with well-documented Bubble tutorials — POST `{"text": "message"}` without the Adaptive Card complexity. Slack webhooks do not require navigating deprecated Connectors versus new Workflows distinctions. Choose Slack when your team has a choice; choose Teams when your organization is already on Microsoft 365.
Mailgun delivers notifications via transactional email rather than team chat. Email is better for external recipients and formal communications; Teams is better for internal team real-time alerts. Both use Bubble's API Connector with Private credentials — Mailgun uses Basic Auth while Teams uses a webhook URL.
Google Meet integration with Bubble focuses on creating meeting links via the Calendar API (a different workflow than channel notifications). If your team uses Google Workspace, the Google Meet + Calendar API path combined with Slack or Gmail notifications may replace both Teams video and messaging needs.
Frequently asked questions
Microsoft Teams shows 'Incoming Webhooks' in the Connectors menu — should I use that instead?
No. The Connectors-based Incoming Webhooks (outlook.office.com/webhook/... URLs) are being retired by Microsoft. Use the **Workflows app** approach instead: three-dot menu on the channel → Workflows → 'Post to a channel when a webhook request is received'. This creates a Power Automate-backed webhook with a prod-xx.westus.logic.azure.com URL that is the current supported standard.
Can I send Teams messages without a paid Bubble plan?
Yes, you can call the Teams API Connector action from a client-side Bubble workflow (Button click, page load) on the Free plan. However, Backend Workflows — which are more secure and can be triggered by database events or schedules — require a paid plan. For production apps, the paid plan is recommended so the webhook URL stays server-side in a Backend Workflow rather than being processed in client-side code.
How do I post to different Teams channels from the same Bubble app?
The basic Workflows webhook approach ties one webhook URL to one specific channel. To post to multiple channels, create separate Workflows webhooks in each target channel and store them as separate API calls (or separate Private header constants) in Bubble's API Connector. For truly dynamic channel selection, you need the Microsoft Graph API path with `ChannelMessage.Send` permission, which lets you specify any channel ID as a parameter.
Why does Teams silently ignore my messages sometimes with no error in Bubble?
The most common cause is an invalid Adaptive Card payload. Teams drops malformed Adaptive Cards without returning an HTTP error to the caller — Bubble sees a 202 success but the message never appears. Validate your card JSON at adaptivecards.io/designer. For plain text messages, ensure the body is exactly `{"text": "your message"}` with valid JSON. Also check that the Workflows flow is still active in Power Automate (flow.microsoft.com).
Can I receive Teams messages or button interaction responses in my Bubble app?
For receiving inbound data from Teams, you need the Microsoft Graph API with event subscriptions, or Teams Adaptive Cards with `Action.Http` pointing to your Bubble Workflow API endpoint. The basic Workflows webhook is one-directional (Bubble → Teams only). Bubble's Backend Workflow API can receive inbound HTTP callbacks, but wiring it to Teams interactive components requires the full Graph API setup with Azure AD.
Is the Workflows webhook URL permanent, or does it expire?
The Workflows webhook URL does not have a built-in expiry, but it can become invalid if: (1) the Power Automate flow is deleted or disabled, (2) the Teams channel is deleted, or (3) the Microsoft 365 license associated with the flow's creator expires. Treat the URL as a long-lived but fragile credential — document where it is stored and have a plan to recreate it if your Teams integration stops working unexpectedly.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation