How to Create a Microsoft Teams Webhook (Workflows, 2026)
Microsoft retired Office 365 Connectors, so the old 'Incoming Webhook connector' method is going away. Here's the current way to create a Microsoft Teams incoming webhook using Workflows (Power Automate) — step by step, with the URL format and payload.
If you followed an older tutorial that said "open the channel's Connectors and add an Incoming Webhook," it may no longer work: Microsoft is retiring Office 365 / Microsoft 365 Connectors in Teams. The current, supported way to get an incoming webhook is Workflows (Power Automate). This guide walks the Workflows flow end to end. (New to webhooks? See what is a webhook.)
Why the old connector method is going away
The classic path — channel ••• → Connectors → Incoming Webhook → Configure — relied on Office 365 Connectors, which Microsoft has announced it's retiring. Existing connector webhooks are being phased out and new ones are discouraged. Microsoft's replacement is a Workflows template that does the same job: accept an HTTP POST and post the result into a channel. (Timelines have shifted more than once — verify the current status for your tenant.)
Create a Teams webhook with Workflows
- Open the channel menu. Select More options (•••) next to the channel (or chat) you want to post into.
- Choose Workflows. Click Workflows.
- Pick the webhook template. Select "Post to a channel when a webhook request is received" (there's a chat variant too; it may not be available on every organization type).
- Name it and sign in. Give the workflow a name and authenticate with your Microsoft account (switch accounts if needed), then Next.
- Choose the destination. Select the Team and Channel the messages should land in, then Add workflow.
- Copy the URL. A dialog shows the generated HTTP POST URL — copy it. That's your incoming webhook.
You can also build it from scratch in the Workflows app: Create → Create from blank, add the trigger "When a Teams webhook request is received," then an action like Post card in a chat or channel, and copy the trigger's URL.
The URL and payload
The URL is a long Power Automate endpoint, roughly:
https://prod-00.westus.logic.azure.com:443/workflows/abc.../triggers/manual/paths/invoke?api-version=2016-06-01&sp=...&sig=SECRET
The sig parameter is a secret — treat the whole URL as sensitive.
The default template posts an Adaptive Card, so send a JSON body shaped like a card attachment:
{
"type": "message",
"attachments": [
{
"contentType": "application/vnd.microsoft.card.adaptive",
"content": {
"type": "AdaptiveCard",
"version": "1.4",
"body": [
{ "type": "TextBlock", "text": "Deploy finished: build #142 is live", "wrap": true }
]
}
}
]
}
The exact shape depends on how the flow's Post card action is configured, so open your workflow to confirm what its trigger expects.
Sending any event to Teams
Getting the URL is the first half; you still need to POST an Adaptive Card in the right shape whenever something happens. Webhook Relay handles that: point a provider at Webhook Relay, transform the payload into a Teams card, and forward it to your Workflows URL — fanning out to Slack or Discord at the same time if you like. See send a webhook to Microsoft Teams.
Ready to route real events into Teams? Test a webhook now or start forwarding for free.
