PullNotifier Logo

PullNotifier

Webhook Tester

Microsoft Teams webhook tester for Power Automate Workflows

Paste a Microsoft Teams Workflow webhook URL, pick a sample Adaptive Card, hit Send. See the exact HTTP status, latency, and response body — so you can tell whether your card actually delivered, or whether the Workflow swallowed it silently. Built after the March 2026 Office 365 Connector retirement, when every team had to migrate.

Targeting: microsoft teams webhook tester · Last updated 2026-05-02

Contents

Try the testerWhen to use this toolAfter the O365 Connector retirementCommon error codes explainedHow the tester works under the hood

Skip the manual setup

PullNotifier installs from Microsoft AppSource in 5 minutes — no YAML, no Power Automate flows.

Try the tester

Webhook URL

Paste the HTTP POST URL from your Power Automate Workflow (or your legacywebhook.office.comURL to verify it's really dead).

Card preset

Adaptive card announcing a freshly opened pull request.

Card JSON

Valid JSON

What the response codes usually mean

200 OK but nothing in Teams — the Workflow ran but the "Compose Adaptive Card" step dropped the message. Open the Workflow run history to see which step failed silently.

400 Bad Request — JSON schema is invalid, or the Workflow rejected the body shape. Use the Adaptive Card Designer to validate the v1.5 schema before sending.

404 Not Found — the URL is wrong or the underlying Power Automate Workflow has been deleted or disabled. Recreate the Workflow and copy the new URL.

401 / 403 Unauthorized — the URL has been rotated or the SAS token expired. Recreate the Workflow trigger to mint a fresh URL.

0 / Network error — the proxy couldn't reach Microsoft. Try again, or check the Microsoft 365 status page.

Recent sends (0/5)

No sends yet. Your last 5 sends will appear here, stored in your browser only.

Want to skip webhook plumbing entirely?

Install PullNotifier from AppSource and get GitHub PR adaptive cards in Microsoft Teams in 5 minutes — no Power Automate flow, no JSON, no rotating URLs.

When to use this tool

  • You just created a new Power Automate Workflow webhook URL and want to verify it accepts traffic before you wire it up to GitHub Actions, an alerting system, or a custom script.
  • You're debugging a silent failure — the upstream service says it sent the webhook, but nothing appeared in the Microsoft Teams channel. Was it the URL? The schema? The Workflow?
  • You're testing whether your old webhook.office.com URL is still alive (it isn't — the O365 Connector platform retired on March 31, 2026, but you can confirm the 404 with this tool).
  • You want to see how a specific Adaptive Card v1.5 payload renders in Teams without writing a one-off cURL command, finding a sample card, or building a script.
  • You're demoing webhook plumbing to a teammate and want a clean, browser-based send-and-inspect loop instead of a terminal.

After the Office 365 Connector retirement

Office 365 Connectors — the legacy "incoming webhook" pattern with URLs of the form https://{tenant}.webhook.office.com/... — were retired on March 31, 2026. Microsoft's recommended replacement is a Power Automate Workflow URL, accessible from the Workflows app inside Microsoft Teams.

The new URLs look like:

https://prod-NN.westus.logic.azure.com/workflows/{guid}/triggers/manual/...

This tester accepts both old (webhook.office.com) and new (logic.azure.com) hostnames so you can verify either case. If you get a 404 on a webhook.office.com URL, the Connector is dead — migrate to a Workflow URL or use a managed service like PullNotifier.

Common error codes explained

  • 200 OK, but the card never appears in Teams — the Workflow accepted the HTTP request but the "Compose Adaptive Card" or "Post in chat or channel" step inside the Workflow failed silently. Open the Workflow in Power Automate, click Run history, and inspect the failed step. Most often the JSON shape doesn't match what the Compose step expects.
  • 400 Bad Request — the JSON schema is invalid, or the Workflow trigger explicitly rejected the body shape. If you're sending a raw Adaptive Card, check it against the v1.5 schema using our Adaptive Card Designer.
  • 404 Not Found — the URL is wrong (typo, truncated copy-paste) or the underlying Workflow has been deleted, disabled, or moved to a different Microsoft 365 tenant. Recreate the Workflow in the Workflows app inside Microsoft Teams and copy the new URL.
  • 401 / 403 Unauthorized — the URL has been rotated. Power Automate Workflow URLs contain a SAS token; rotating the trigger mints a fresh URL and invalidates the old one. Recreate the trigger and update everywhere the URL is used.
  • 429 Too Many Requests — Power Automate enforces per-flow throttling. If you're blasting many tests in a tight loop, slow down. (This tester also enforces 10 sends per minute per IP to keep the proxy honest.)
  • 5xx Server Error — Microsoft-side outage or transient Power Automate issue. Check the Microsoft 365 status page and retry.

How the tester works under the hood

Microsoft Teams webhook URLs (both logic.azure.com and webhook.office.com) reject browser-origin requests because of CORS. That means a pure client-side tester would always fail — even when the URL is correct.

This tool gets around that with a thin server-side proxy at /api/tools/teams-webhook-test. The proxy:

  • Validates that the destination hostname is one of the allowed Microsoft Teams webhook hostnames (*.logic.azure.com, *.webhook.office.com, prod-*.azure.com) — not an arbitrary URL.
  • Rejects payloads larger than 10 KB and rate-limits to 10 requests per minute per IP to prevent abuse.
  • POSTs your JSON to the destination URL with Content-Type: application/json, captures the upstream status, latency, and (truncated) response body, and returns it.
  • Stores nothing. The proxy is stateless — your URL and payload are not logged or persisted on the server side.

Your last 5 sends are kept in your browser's localStorage so you can re-fire them quickly. Clear the history at any time with the Clear history button.


Frequently asked

Why can't I send a webhook from my browser directly?

Microsoft Teams webhook endpoints (both Power Automate logic.azure.com URLs and the legacy webhook.office.com URLs) reject browser-origin requests via CORS. That means a pure client-side fetch will always fail. This tester runs a thin server-side proxy on the same domain so the request can complete; the proxy adds the required server-to-server headers and forwards your payload unchanged.

Does this tool log my webhook URL?

No. The proxy is stateless — it does not persist your webhook URL, payload, or response body anywhere. Your last 5 sends are stored only in your own browser via localStorage so you can re-fire them; clear the history at any time. The server holds nothing.

What URL should I use here?

Use the HTTP POST URL generated by a Power Automate Workflow inside Microsoft Teams. To get one: open Microsoft Teams → Workflows app → New flow → choose a "When a webhook request is received" template → save the flow and copy the URL it surfaces. The URL starts with prod-NN.westus.logic.azure.com or similar.

My old webhook.office.com URL gives 404 — why?

Office 365 Connectors (the legacy "incoming webhook" feature) were retired on March 31, 2026. URLs of the form https://{tenant}.webhook.office.com/... no longer accept incoming requests. The 404 is expected. Migrate to a Power Automate Workflow URL, or skip the manual setup entirely with a managed service like PullNotifier.

Can I send Adaptive Cards or only MessageCards?

Both formats are accepted by Power Automate Workflows, but Adaptive Card v1.5 is the recommended (and actively supported) format. MessageCards still work for backwards compatibility, but new features and design tooling target Adaptive Cards. The presets in this tester all use Adaptive Card v1.5 wrapped in the standard Workflow message envelope.

What's the rate limit?

The proxy enforces a soft rate limit of 10 requests per minute per IP to keep things fair and prevent abuse. If you exceed this, the proxy returns a 429. Power Automate itself also throttles per-flow — if you blast many tests in a row you may see throttling on the Microsoft side too.

Why is my card not appearing in the channel even though I get 200?

A 200 from a Power Automate Workflow URL means the HTTP request was accepted, NOT that the card was successfully posted. The most common cause of a "200 but no card" is that the "Compose Adaptive Card" or "Post in chat or channel" step inside the Workflow failed silently — usually because the JSON shape your sender produced does not match what the Compose step is expecting. Open the Workflow in Power Automate and check Run history.

Can I save my test cards?

Your last 5 sends are saved automatically to your browser localStorage. Each entry shows the destination hostname, response status, and timestamp, with a Resend button that re-sends the original payload. Clear the history any time with the Clear history button. Nothing is stored server-side.

Keep reading

Microsoft Teams incoming webhook for GitHub (setup guide)Microsoft Teams Adaptive Card designerOffice 365 Connector URL converter

Stop debugging webhooks. Install PullNotifier.

Get GitHub PR adaptive cards in Microsoft Teams in 5 minutes — no Power Automate Workflow, no rotating URLs, no JSON. Free for small teams.

PullNotifier Logo

PullNotifier

© 2026 PullNotifier. All rights reserved

Microsoft Teams

Overview

Integration

Setup Guide

Pricing

Code Review Reminders

vs Official @github

O365 Connector Replacement

Read our Blog

Privacy Policy

Terms of Service

Changelog