Payloads and cards
The payload is what actually gets sent to your webhook. Webhook Notifier gives you three ways to build one, chosen with the Mode dropdown in a rule's Card / payload section:
| Mode | Best for | What it sends |
|---|---|---|
| Structured (Teams card) | Microsoft Teams, no JSON | A Teams Adaptive Card built from simple fields |
| Advanced (raw Adaptive Card JSON) | Microsoft Teams, full control | An Adaptive Card you write yourself |
| Raw payload (any webhook) | Slack, Zapier, Make, custom endpoints | A body you write, POSTed as-is |
The first two produce Microsoft Teams cards (wrapped in the Power Automate envelope Teams expects). The third sends whatever you write to any webhook. See Microsoft Teams for the Teams-specific setup.
Variables
Every mode is rendered as a Twig template against the triggering event's context, so you can drop values from the event straight into the payload. There are two forms, and they're interchangeable:
- Shorthand:
{title},{section},{fields.email}- quick and readable. - Full Twig:
{{ event.sender.title }},{% if isNew %}…{% endif %}- for anything with logic, loops or property access.
The rule editor shows an Available variables hint listing exactly what the selected source provides, so you never have to guess. Each source page lists them too.
Structured mode
The friendliest option, and the one to reach for with Microsoft Teams. You fill in plain fields and the plugin assembles a tidy Adaptive Card:
- Title - the card heading. Supports Twig, e.g.
New article: {title}. - Body - the main text. Markdown and Twig are both supported.
- Facts - key/value rows shown beneath the body, e.g. Section → News, Author → {authorName}.
- Button label and Button URL - an optional "Open URL" button, e.g. a "View entry" button pointing at
{url}or{cpEditUrl}.
No JSON, no envelope to worry about - just fill in what you want to see.
Advanced mode
When you want full control over the Teams card, switch to Advanced and write the Adaptive Card JSON yourself. Twig still works inside it, so you can inject values as you go.
To save you starting from a blank box, there's a Start from an example picker that drops a ready-made card into the editor - including a "Freeform: all submitted fields" example that lists every submitted field automatically. Pick one, click Insert, and adjust from there.
You're writing the Adaptive Card body; the plugin still wraps it in the Power Automate envelope Teams needs, so you don't have to.
Raw payload mode
This is the mode for any non-Teams webhook. Your template's output is POSTed to the connection exactly as rendered, with Content-Type: application/json and no wrapping of any kind. That makes it a fit for Slack, Zapier, Make, or your own endpoint - anything that expects its own body shape.
A typical raw payload builds a JSON object from the event and encodes it:
{{ {
id: event.sender.id,
title: event.sender.title,
site: event.sender.site.handle
}|json_encode|raw }}The |json_encode|raw at the end turns your data into JSON and stops Twig from escaping it.
Don't leave the |raw off
Without it, Twig escapes the JSON and your endpoint receives " where it expected ". Most services answer that with a 400, which shows up in the delivery log as a failed delivery with an unhelpful message.
For a Slack incoming webhook you'd shape it to Slack's format instead:
{{ { text: "New entry: #{title}" }|json_encode|raw }}Because it's just Twig, you can include conditions and loops - for example, only send a body at all when a value is present, or build a list from a repeating field.
Which mode should I use?
- Sending to Microsoft Teams? Start with Structured. Move to Advanced only if you need a layout the structured fields can't express.
- Sending anywhere else (Slack, Zapier, Make, your own API)? Use Raw payload, and shape the body to whatever that service expects.