Teams incoming webhook retired: switch to a Workflows URL
Microsoft set May 18 to 22, 2026 to disable Office 365 connectors in Teams. Create a Workflows webhook URL and POST an Adaptive Card to it instead.

Yes: the Teams Incoming Webhook is a webhook-based Office 365 connector, and Microsoft's final retirement update set May 18 to May 22, 2026 as the rollout that disables those connectors, after which they "will no longer function." The replacement is a Workflows webhook: a flow that starts with the "When a Teams webhook request is received" trigger gives you a URL, and a JSON POST to it can post a message or an Adaptive Card to a channel or chat.
Microsoft facts come from its retirement post, the Teams Create Incoming Webhooks page, the Microsoft Teams connector reference, Microsoft Support's incoming webhooks article and the card actions page; Sume facts come from Run webhooks and Runs and results. All were read on 2026-09-28. Sume has no Teams app or connector: your server receives Sume's webhook, then posts to the workflow. Power Automate HTTP request API covers the other direction, a flow that calls Sume.
When did Teams incoming webhooks stop working?
Microsoft moved the deadline several times before its April 14, 2026 update set the final rollout for May 18 to May 22, 2026. Its retirement post, first published July 3, 2024, carries each change as a dated update:
| Update | What it said |
|---|---|
| July 3, 2024 | New connector creation blocked from August 15, 2024; all connectors to stop working on October 1, 2024 |
| July 23, 2024 | Retirement timeline extended through December 2025 |
| October 16, 2024 | Webhook connector URLs had to move to a new URL structure by January 31, 2025 |
| October 28, 2025 | Migration deadline extended to March 31, 2026 |
| February 5, 2026 | Deadline extended to April 30, 2026; Message Card support added to Workflows |
| April 14, 2026 | Final rollout from May 18 to May 22, 2026; after it, connectors "will no longer function" |
What replaces the Teams incoming webhook?
A Workflows webhook. The Workflows app, powered by Power Automate, can receive HTTP requests at a webhook URL and post a message or an Adaptive Card to a Teams channel or chat. In Microsoft's steps, you open More options (...) next to the channel, select Workflows, pick a template such as Send webhook alerts to a channel, configure it, select Save, and copy the webhook link. Microsoft Support says these templates and the Teams webhook trigger don't require a premium license.
- The trigger accepts POST requests only.
- You choose who may call it: anyone, any user in your tenant, or specific users. With "Anyone", send no authentication token header, or POST requests to the trigger fail; the two tenant options need a token in every request.
- With "Anyone", the URL is the only thing standing between the internet and your channel, so keep it in a server-side secret store.
- The body is either a set of Adaptive Cards or a single Message Card. Microsoft says Message Card payloads render but don't support HttpPost action buttons.
How do I send an Adaptive Card to the workflow URL?
Wrap the card in a message: type is always "message", and each attachments[] item has contentType application/vnd.microsoft.card.adaptive, contentUrl null, and the card as content. An Action.OpenUrl button opens its url in the user's browser.
// Node 18+. TEAMS_WORKFLOW_URL is the trigger's URL; keep it server-side.
async function postToTeams(title, videoUrl) {
const card = {
type: "AdaptiveCard",
$schema: "http://adaptivecards.io/schemas/adaptive-card.json",
version: "1.2",
body: [{ type: "TextBlock", text: title }],
actions: [{ type: "Action.OpenUrl", title: "Open video", url: videoUrl }],
};
const res = await fetch(process.env.TEAMS_WORKFLOW_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
type: "message",
attachments: [{
contentType: "application/vnd.microsoft.card.adaptive",
contentUrl: null,
content: card,
}],
}),
});
if (!res.ok) throw new Error(`workflow answered ${res.status}`);
}How do I post a finished Sume video to Teams?
Put your own server between Sume and the workflow, and post only after the delivery checks out:
- Register your server, not the workflow URL, as Sume's
communication.webhook_url. Sume's POST carries its run receipt, not a card, and the trigger's access options decide who may call it, not whether a Sume signature is valid. - Verify the HMAC-SHA256 signature over the raw body, record the event, and answer
2xxwithin the 10-second attempt window. Dedupe onrequest_id, which repeats on every retry, so a retried delivery doesn't post twice. Signed webhooks for Sume video runs covers the check. - Word the card from
status:OKwhen the run completed,ERRORwhen it failed. A canceled run sends no webhook. - Link
payload.primary_output_url.media.sume.comURLs are durable and public to anyone holding them, so anyone in the channel can open the video; proxy or copy it if you need per-customer access control.
What are the limits of Workflows webhooks?
- A workflow belongs to its owners, not to a team or channel. Without co-owners, it can become an orphan flow when it loses its owner, so add co-owners.
- Posts appear as the default Workflows bot (Flow bot). Bot icon and name customization isn't available when posting via a webhook.
- Throttling follows your Power Automate performance profile; the connector reference lists about 1,000 concurrent inbound calls.
Sources
- Run webhooks
- Runs and results
- Microsoft 365 Developer Blog: Retirement of Office 365 connectors within Microsoft Teams (read 2026-09-28)
- Microsoft Learn: Create Incoming Webhooks (read 2026-09-28)
- Microsoft Learn: Microsoft Teams connector (read 2026-09-28)
- Microsoft Support: Send messages in Teams using incoming webhooks (read 2026-09-28)
- Microsoft Learn: Card actions (read 2026-09-28)
Related posts
More in Integrations
- YouTube Zapier integration: upload a video from a Zap
Zapier's YouTube integration has an Upload Video action. Map a public, direct file URL into its Video field to post a finished video from a Zap.
- Zapier: upload a file to Google Drive from a URL
Use Google Drive's Upload File action in Zapier and map a file object or a public, direct-download URL into its File field. Zapier fetches it.
- How to add an MCP server to ChatGPT with developer mode
Turn on ChatGPT developer mode, create an app for the server's URL, and sign in with OAuth. The steps, with Sume's hosted MCP server as the example.
- How to add subtitles to a video in Python
Add subtitles to a video in Python with Requests: POST the video URL to Sume's /v1/video-captions, poll the job, then read the captioned video_url.
Written by Sume