To post into a Teams channel from your website or app today, open the channel's Workflows menu, pick a template such as Send webhook alerts to a channel, save it and copy the link it gives you. Then send an HTTP POST with a JSON body to that link. The old Office 365 Connector webhooks are retired.
| Office 365 Connector webhook | Workflows webhook | |
|---|---|---|
| Status | Retired: Microsoft said they stop working after a rollout set for May 18 to 22, 2026 | The method Microsoft documents now |
| Where you create it | Channel connectors settings | Channel menu, then Workflows |
| Powered by | Microsoft 365 Connectors | Power Automate |
| Card formats | Message cards | Adaptive Cards and Message Card format (buttons not rendered) |
| Owned by | The channel | The user who made the workflow (add co-owners) |
Updated
A webhook is a private web address that accepts a message from another system, here your shop, form or monitoring tool, and drops it into a Teams channel. Fill in the builder below to get a ready JSON body and a curl command. It runs only in your browser.
Message format: Plain text, Adaptive Card
Message: Order 1042 was paid. Ship by Friday.
{
"text": "Order 1042 was paid. Ship by Friday."
}Webhook link (stays in your browser)
curl -X POST "<WEBHOOK_URL>" \
-H "Content-Type: application/json" \
-d '{
"text": "Order 1042 was paid. Ship by Friday."
}'Both examples send to the link your workflow gave you. Keep the link in an environment variable on your server.
This is the shape Microsoft's own samples use: a message with one attachment whose content is the card.
{
"type": "message",
"attachments": [
{
"contentType": "application/vnd.microsoft.card.adaptive",
"content": {
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.2",
"body": [
{ "type": "TextBlock", "text": "New order", "weight": "Bolder", "size": "Medium" },
{ "type": "TextBlock", "text": "Order 1042 was paid.", "wrap": true }
]
}
}
]
}A 429 status means too many requests. The loop waits longer after each refusal before trying again.
async function postToTeams(body, tries = 4) {
const url = process.env.TEAMS_WEBHOOK_URL;
for (let i = 0; i < tries; i++) {
const res = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});
if (res.status !== 429) return res.ok;
await new Promise((r) => setTimeout(r, 500 * 2 ** i));
}
return false;
}
postToTeams({ text: "Backup finished" });
Microsoft announced on July 3, 2024 that Office 365 Connectors in Teams would be retired, then moved the dates several times. Its latest update, dated April 14, 2026, set the final rollout for May 18 to May 22, 2026.
The replacement is the Workflows app inside Teams, which runs on Power Automate. A workflow starts with the trigger called When a Teams webhook request is received and then posts the message to a chat or channel.
The simplest body is one field called text. An Adaptive Card is a JSON layout that Teams draws as a tidy box with headings and facts, which suits order alerts or form entries. It is wrapped in an attachments list with the content type application/vnd.microsoft.card.adaptive.
Microsoft's April 14, 2026 update said the rollout would run from May 18 to May 22, 2026, and that after those dates Office 365 Connectors would no longer function. Move anything still pointing at an old connector link to a Workflows link.
Yes. Microsoft lists Adaptive Cards and the older Message Card format as supported in Workflows, with one known gap: buttons in message cards are not rendered.
Microsoft's page lists posting as the flow bot in private channels as still under development, while posting on behalf of a user works. Check the known issues on the official page before you rely on it.
Not always. Many form tools, shop apps and uptime monitors have a webhook field: paste the Workflows link there. Code is only needed when you build the message yourself.
Yes. Anyone who has it can post into your channel, so keep it in a server setting or environment variable, never in website code that visitors can read.
Related: Discord webhook guide, Webhook vs API, Add a contact form, Build an AI agent.
Start for free or see all free tools. We.Inc is free to start, with no card needed. AI building is on paid plans from $20 a month.
We.Inc is an AI-powered website builder you can resell under your own brand. Launch a branded client dashboard, bill on Stripe Connect, and deliver AI-generated websites in minutes. White-label plans start at $99 a month for 25 client sites, with a 7-day free trial and no per-site fees.