[{"data":1,"prerenderedAt":691},["ShallowReactive",2],{"content-query-VPxbemIkVv":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"layout":10,"author":11,"tags":12,"categories":17,"date":19,"image":20,"faq":21,"body":34,"_type":684,"_id":685,"_source":686,"_file":687,"_stem":688,"_extension":689,"sitemap":690},"/blog/microsoft-teams-webhook","blog",false,"","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.","post","Karolis Rusenas",[13,14,15,16],"microsoft teams","webhooks","workflows","guide",[18],"guides","2026-07-21 10:00:00","/images/generic/webhooks.png",[22,25,28,31],{"q":23,"a":24},"How do I create an incoming webhook in Microsoft Teams now?","Use Workflows (Power Automate), not the old connector. Select the ... menu next to a channel → Workflows → choose the 'Post to a channel when a webhook request is received' template → name it, sign in, pick the team and channel, then Add workflow and copy the generated HTTP POST URL.",{"q":26,"a":27},"Are Microsoft Teams incoming webhook connectors deprecated?","Yes. Microsoft is retiring Office 365 / Microsoft 365 Connectors in Teams — the classic '... → Connectors → Incoming Webhook' path is being phased out. Microsoft's guidance is to recreate incoming webhooks as Workflows (Power Automate). Verify the current retirement timeline, as Microsoft has adjusted it more than once.",{"q":29,"a":30},"What does a Teams Workflows webhook URL look like?","It's a long Power Automate URL, typically on a logic.azure.com host with a workflow path and a 'sig' query parameter, for example https://prod-XX.westus.logic.azure.com:443/workflows/.../triggers/manual/paths/invoke?...&sig=... . The sig is a secret, so treat the whole URL as sensitive.",{"q":32,"a":33},"What payload does the Teams webhook expect?","The default 'Post to a channel when a webhook request is received' template posts an Adaptive Card. Send a JSON body that wraps an adaptive card attachment (type 'message' with an attachment of contentType application/vnd.microsoft.card.adaptive). Check your flow's trigger to confirm the exact shape it expects.",{"type":35,"children":36,"toc":677},"root",[37,77,84,109,115,232,264,270,275,295,314,326,596,608,621,649,671],{"type":38,"tag":39,"props":40,"children":41},"element","p",{},[42,45,51,53,59,61,66,68,75],{"type":43,"value":44},"text","If you followed an older tutorial that said ",{"type":38,"tag":46,"props":47,"children":48},"em",{},[49],{"type":43,"value":50},"\"open the channel's Connectors and add an Incoming Webhook,\"",{"type":43,"value":52}," it may no longer work: ",{"type":38,"tag":54,"props":55,"children":56},"strong",{},[57],{"type":43,"value":58},"Microsoft is retiring Office 365 / Microsoft 365 Connectors",{"type":43,"value":60}," in Teams. The current, supported way to get an incoming webhook is ",{"type":38,"tag":54,"props":62,"children":63},{},[64],{"type":43,"value":65},"Workflows",{"type":43,"value":67}," (Power Automate). This guide walks the Workflows flow end to end. (New to webhooks? See ",{"type":38,"tag":69,"props":70,"children":72},"a",{"href":71},"/blog/what-is-webhook",[73],{"type":43,"value":74},"what is a webhook",{"type":43,"value":76},".)",{"type":38,"tag":78,"props":79,"children":81},"h2",{"id":80},"why-the-old-connector-method-is-going-away",[82],{"type":43,"value":83},"Why the old connector method is going away",{"type":38,"tag":39,"props":85,"children":86},{},[87,89,94,96,101,103,107],{"type":43,"value":88},"The classic path — channel ",{"type":38,"tag":54,"props":90,"children":91},{},[92],{"type":43,"value":93},"••• → Connectors → Incoming Webhook → Configure",{"type":43,"value":95}," — relied on Office 365 Connectors, which Microsoft has announced it's ",{"type":38,"tag":54,"props":97,"children":98},{},[99],{"type":43,"value":100},"retiring",{"type":43,"value":102},". Existing connector webhooks are being phased out and new ones are discouraged. Microsoft's replacement is a ",{"type":38,"tag":54,"props":104,"children":105},{},[106],{"type":43,"value":65},{"type":43,"value":108}," 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.)",{"type":38,"tag":78,"props":110,"children":112},{"id":111},"create-a-teams-webhook-with-workflows",[113],{"type":43,"value":114},"Create a Teams webhook with Workflows",{"type":38,"tag":116,"props":117,"children":118},"ol",{},[119,137,153,169,185,215],{"type":38,"tag":120,"props":121,"children":122},"li",{},[123,128,130,135],{"type":38,"tag":54,"props":124,"children":125},{},[126],{"type":43,"value":127},"Open the channel menu.",{"type":43,"value":129}," Select ",{"type":38,"tag":54,"props":131,"children":132},{},[133],{"type":43,"value":134},"More options (•••)",{"type":43,"value":136}," next to the channel (or chat) you want to post into.",{"type":38,"tag":120,"props":138,"children":139},{},[140,145,147,151],{"type":38,"tag":54,"props":141,"children":142},{},[143],{"type":43,"value":144},"Choose Workflows.",{"type":43,"value":146}," Click ",{"type":38,"tag":54,"props":148,"children":149},{},[150],{"type":43,"value":65},{"type":43,"value":152},".",{"type":38,"tag":120,"props":154,"children":155},{},[156,161,162,167],{"type":38,"tag":54,"props":157,"children":158},{},[159],{"type":43,"value":160},"Pick the webhook template.",{"type":43,"value":129},{"type":38,"tag":54,"props":163,"children":164},{},[165],{"type":43,"value":166},"\"Post to a channel when a webhook request is received\"",{"type":43,"value":168}," (there's a chat variant too; it may not be available on every organization type).",{"type":38,"tag":120,"props":170,"children":171},{},[172,177,179,184],{"type":38,"tag":54,"props":173,"children":174},{},[175],{"type":43,"value":176},"Name it and sign in.",{"type":43,"value":178}," Give the workflow a name and authenticate with your Microsoft account (switch accounts if needed), then ",{"type":38,"tag":54,"props":180,"children":181},{},[182],{"type":43,"value":183},"Next",{"type":43,"value":152},{"type":38,"tag":120,"props":186,"children":187},{},[188,193,195,200,202,207,209,214],{"type":38,"tag":54,"props":189,"children":190},{},[191],{"type":43,"value":192},"Choose the destination.",{"type":43,"value":194}," Select the ",{"type":38,"tag":54,"props":196,"children":197},{},[198],{"type":43,"value":199},"Team",{"type":43,"value":201}," and ",{"type":38,"tag":54,"props":203,"children":204},{},[205],{"type":43,"value":206},"Channel",{"type":43,"value":208}," the messages should land in, then ",{"type":38,"tag":54,"props":210,"children":211},{},[212],{"type":43,"value":213},"Add workflow",{"type":43,"value":152},{"type":38,"tag":120,"props":216,"children":217},{},[218,223,225,230],{"type":38,"tag":54,"props":219,"children":220},{},[221],{"type":43,"value":222},"Copy the URL.",{"type":43,"value":224}," A dialog shows the generated ",{"type":38,"tag":54,"props":226,"children":227},{},[228],{"type":43,"value":229},"HTTP POST URL",{"type":43,"value":231}," — copy it. That's your incoming webhook.",{"type":38,"tag":39,"props":233,"children":234},{},[235,237,241,243,248,250,255,257,262],{"type":43,"value":236},"You can also build it from scratch in the ",{"type":38,"tag":54,"props":238,"children":239},{},[240],{"type":43,"value":65},{"type":43,"value":242}," app: ",{"type":38,"tag":54,"props":244,"children":245},{},[246],{"type":43,"value":247},"Create → Create from blank",{"type":43,"value":249},", add the trigger ",{"type":38,"tag":54,"props":251,"children":252},{},[253],{"type":43,"value":254},"\"When a Teams webhook request is received,\"",{"type":43,"value":256}," then an action like ",{"type":38,"tag":54,"props":258,"children":259},{},[260],{"type":43,"value":261},"Post card in a chat or channel",{"type":43,"value":263},", and copy the trigger's URL.",{"type":38,"tag":78,"props":265,"children":267},{"id":266},"the-url-and-payload",[268],{"type":43,"value":269},"The URL and payload",{"type":38,"tag":39,"props":271,"children":272},{},[273],{"type":43,"value":274},"The URL is a long Power Automate endpoint, roughly:",{"type":38,"tag":276,"props":277,"children":280},"pre",{"className":278,"code":279,"language":43,"meta":7,"style":7},"language-text shiki shiki-themes github-dark","https://prod-00.westus.logic.azure.com:443/workflows/abc.../triggers/manual/paths/invoke?api-version=2016-06-01&sp=...&sig=SECRET\n",[281],{"type":38,"tag":282,"props":283,"children":284},"code",{"__ignoreMap":7},[285],{"type":38,"tag":286,"props":287,"children":290},"span",{"class":288,"line":289},"line",1,[291],{"type":38,"tag":286,"props":292,"children":293},{},[294],{"type":43,"value":279},{"type":38,"tag":39,"props":296,"children":297},{},[298,300,306,308,313],{"type":43,"value":299},"The ",{"type":38,"tag":282,"props":301,"children":303},{"className":302},[],[304],{"type":43,"value":305},"sig",{"type":43,"value":307}," parameter is a secret — ",{"type":38,"tag":54,"props":309,"children":310},{},[311],{"type":43,"value":312},"treat the whole URL as sensitive",{"type":43,"value":152},{"type":38,"tag":39,"props":315,"children":316},{},[317,319,324],{"type":43,"value":318},"The default template posts an ",{"type":38,"tag":54,"props":320,"children":321},{},[322],{"type":43,"value":323},"Adaptive Card",{"type":43,"value":325},", so send a JSON body shaped like a card attachment:",{"type":38,"tag":276,"props":327,"children":331},{"className":328,"code":329,"language":330,"meta":7,"style":7},"language-json shiki shiki-themes github-dark","{\n  \"type\": \"message\",\n  \"attachments\": [\n    {\n      \"contentType\": \"application/vnd.microsoft.card.adaptive\",\n      \"content\": {\n        \"type\": \"AdaptiveCard\",\n        \"version\": \"1.4\",\n        \"body\": [\n          { \"type\": \"TextBlock\", \"text\": \"Deploy finished: build #142 is live\", \"wrap\": true }\n        ]\n      }\n    }\n  ]\n}\n","json",[332],{"type":38,"tag":282,"props":333,"children":334},{"__ignoreMap":7},[335,344,370,384,393,415,429,451,473,486,551,560,569,578,587],{"type":38,"tag":286,"props":336,"children":337},{"class":288,"line":289},[338],{"type":38,"tag":286,"props":339,"children":341},{"style":340},"--shiki-default:#E1E4E8",[342],{"type":43,"value":343},"{\n",{"type":38,"tag":286,"props":345,"children":347},{"class":288,"line":346},2,[348,354,359,365],{"type":38,"tag":286,"props":349,"children":351},{"style":350},"--shiki-default:#79B8FF",[352],{"type":43,"value":353},"  \"type\"",{"type":38,"tag":286,"props":355,"children":356},{"style":340},[357],{"type":43,"value":358},": ",{"type":38,"tag":286,"props":360,"children":362},{"style":361},"--shiki-default:#9ECBFF",[363],{"type":43,"value":364},"\"message\"",{"type":38,"tag":286,"props":366,"children":367},{"style":340},[368],{"type":43,"value":369},",\n",{"type":38,"tag":286,"props":371,"children":373},{"class":288,"line":372},3,[374,379],{"type":38,"tag":286,"props":375,"children":376},{"style":350},[377],{"type":43,"value":378},"  \"attachments\"",{"type":38,"tag":286,"props":380,"children":381},{"style":340},[382],{"type":43,"value":383},": [\n",{"type":38,"tag":286,"props":385,"children":387},{"class":288,"line":386},4,[388],{"type":38,"tag":286,"props":389,"children":390},{"style":340},[391],{"type":43,"value":392},"    {\n",{"type":38,"tag":286,"props":394,"children":396},{"class":288,"line":395},5,[397,402,406,411],{"type":38,"tag":286,"props":398,"children":399},{"style":350},[400],{"type":43,"value":401},"      \"contentType\"",{"type":38,"tag":286,"props":403,"children":404},{"style":340},[405],{"type":43,"value":358},{"type":38,"tag":286,"props":407,"children":408},{"style":361},[409],{"type":43,"value":410},"\"application/vnd.microsoft.card.adaptive\"",{"type":38,"tag":286,"props":412,"children":413},{"style":340},[414],{"type":43,"value":369},{"type":38,"tag":286,"props":416,"children":418},{"class":288,"line":417},6,[419,424],{"type":38,"tag":286,"props":420,"children":421},{"style":350},[422],{"type":43,"value":423},"      \"content\"",{"type":38,"tag":286,"props":425,"children":426},{"style":340},[427],{"type":43,"value":428},": {\n",{"type":38,"tag":286,"props":430,"children":432},{"class":288,"line":431},7,[433,438,442,447],{"type":38,"tag":286,"props":434,"children":435},{"style":350},[436],{"type":43,"value":437},"        \"type\"",{"type":38,"tag":286,"props":439,"children":440},{"style":340},[441],{"type":43,"value":358},{"type":38,"tag":286,"props":443,"children":444},{"style":361},[445],{"type":43,"value":446},"\"AdaptiveCard\"",{"type":38,"tag":286,"props":448,"children":449},{"style":340},[450],{"type":43,"value":369},{"type":38,"tag":286,"props":452,"children":454},{"class":288,"line":453},8,[455,460,464,469],{"type":38,"tag":286,"props":456,"children":457},{"style":350},[458],{"type":43,"value":459},"        \"version\"",{"type":38,"tag":286,"props":461,"children":462},{"style":340},[463],{"type":43,"value":358},{"type":38,"tag":286,"props":465,"children":466},{"style":361},[467],{"type":43,"value":468},"\"1.4\"",{"type":38,"tag":286,"props":470,"children":471},{"style":340},[472],{"type":43,"value":369},{"type":38,"tag":286,"props":474,"children":476},{"class":288,"line":475},9,[477,482],{"type":38,"tag":286,"props":478,"children":479},{"style":350},[480],{"type":43,"value":481},"        \"body\"",{"type":38,"tag":286,"props":483,"children":484},{"style":340},[485],{"type":43,"value":383},{"type":38,"tag":286,"props":487,"children":489},{"class":288,"line":488},10,[490,495,500,504,509,514,519,523,528,532,537,541,546],{"type":38,"tag":286,"props":491,"children":492},{"style":340},[493],{"type":43,"value":494},"          { ",{"type":38,"tag":286,"props":496,"children":497},{"style":350},[498],{"type":43,"value":499},"\"type\"",{"type":38,"tag":286,"props":501,"children":502},{"style":340},[503],{"type":43,"value":358},{"type":38,"tag":286,"props":505,"children":506},{"style":361},[507],{"type":43,"value":508},"\"TextBlock\"",{"type":38,"tag":286,"props":510,"children":511},{"style":340},[512],{"type":43,"value":513},", ",{"type":38,"tag":286,"props":515,"children":516},{"style":350},[517],{"type":43,"value":518},"\"text\"",{"type":38,"tag":286,"props":520,"children":521},{"style":340},[522],{"type":43,"value":358},{"type":38,"tag":286,"props":524,"children":525},{"style":361},[526],{"type":43,"value":527},"\"Deploy finished: build #142 is live\"",{"type":38,"tag":286,"props":529,"children":530},{"style":340},[531],{"type":43,"value":513},{"type":38,"tag":286,"props":533,"children":534},{"style":350},[535],{"type":43,"value":536},"\"wrap\"",{"type":38,"tag":286,"props":538,"children":539},{"style":340},[540],{"type":43,"value":358},{"type":38,"tag":286,"props":542,"children":543},{"style":350},[544],{"type":43,"value":545},"true",{"type":38,"tag":286,"props":547,"children":548},{"style":340},[549],{"type":43,"value":550}," }\n",{"type":38,"tag":286,"props":552,"children":554},{"class":288,"line":553},11,[555],{"type":38,"tag":286,"props":556,"children":557},{"style":340},[558],{"type":43,"value":559},"        ]\n",{"type":38,"tag":286,"props":561,"children":563},{"class":288,"line":562},12,[564],{"type":38,"tag":286,"props":565,"children":566},{"style":340},[567],{"type":43,"value":568},"      }\n",{"type":38,"tag":286,"props":570,"children":572},{"class":288,"line":571},13,[573],{"type":38,"tag":286,"props":574,"children":575},{"style":340},[576],{"type":43,"value":577},"    }\n",{"type":38,"tag":286,"props":579,"children":581},{"class":288,"line":580},14,[582],{"type":38,"tag":286,"props":583,"children":584},{"style":340},[585],{"type":43,"value":586},"  ]\n",{"type":38,"tag":286,"props":588,"children":590},{"class":288,"line":589},15,[591],{"type":38,"tag":286,"props":592,"children":593},{"style":340},[594],{"type":43,"value":595},"}\n",{"type":38,"tag":39,"props":597,"children":598},{},[599,601,606],{"type":43,"value":600},"The exact shape depends on how the flow's ",{"type":38,"tag":54,"props":602,"children":603},{},[604],{"type":43,"value":605},"Post card",{"type":43,"value":607}," action is configured, so open your workflow to confirm what its trigger expects.",{"type":38,"tag":78,"props":609,"children":611},{"id":610},"sending-any-event-to-teams",[612,614,619],{"type":43,"value":613},"Sending ",{"type":38,"tag":46,"props":615,"children":616},{},[617],{"type":43,"value":618},"any",{"type":43,"value":620}," event to Teams",{"type":38,"tag":39,"props":622,"children":623},{},[624,626,632,634,640,642,648],{"type":43,"value":625},"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, ",{"type":38,"tag":69,"props":627,"children":629},{"href":628},"/features/transform-webhooks",[630],{"type":43,"value":631},"transform the payload",{"type":43,"value":633}," into a Teams card, and forward it to your Workflows URL — ",{"type":38,"tag":69,"props":635,"children":637},{"href":636},"/features/webhook-multiple-destinations",[638],{"type":43,"value":639},"fanning out",{"type":43,"value":641}," to Slack or Discord at the same time if you like. See ",{"type":38,"tag":69,"props":643,"children":645},{"href":644},"/blog/webhook-to-microsoft-teams",[646],{"type":43,"value":647},"send a webhook to Microsoft Teams",{"type":43,"value":152},{"type":38,"tag":39,"props":650,"children":651},{},[652,654,660,662,670],{"type":43,"value":653},"Ready to route real events into Teams? ",{"type":38,"tag":69,"props":655,"children":657},{"href":656},"/webhook-bin",[658],{"type":43,"value":659},"Test a webhook now",{"type":43,"value":661}," or ",{"type":38,"tag":69,"props":663,"children":667},{"href":664,"rel":665},"https://my.webhookrelay.com/register",[666],"nofollow",[668],{"type":43,"value":669},"start forwarding for free",{"type":43,"value":152},{"type":38,"tag":672,"props":673,"children":674},"style",{},[675],{"type":43,"value":676},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":7,"searchDepth":372,"depth":372,"links":678},[679,680,681,682],{"id":80,"depth":346,"text":83},{"id":111,"depth":346,"text":114},{"id":266,"depth":346,"text":269},{"id":610,"depth":346,"text":683},"Sending any event to Teams","markdown","content:blog:microsoft-teams-webhook.md","content","blog/microsoft-teams-webhook.md","blog/microsoft-teams-webhook","md",{"loc":4},1784660737278]