Skip to content

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:

ModeBest forWhat it sends
Structured (Teams card)Microsoft Teams, no JSONA Teams Adaptive Card built from simple fields
Advanced (raw Adaptive Card JSON)Microsoft Teams, full controlAn Adaptive Card you write yourself
Raw payload (any webhook)Slack, Zapier, Make, custom endpointsA 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:

twig
{{ {
    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:

twig
{{ { 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.

Digital help you can trust.