Alerts & automation

n8n workflows for Microsoft Bookings

n8n suits teams that want bookings to reach internal systems, often self-hosted, with full control over each step. BookingsXP sends a signed JSON webhook for every confirmed widget booking, and n8n's Webhook node can receive it, verify it and pass it on.

Plan
Plan: ProNeeds Pro ($19 a month) or Business ($49 a month).
In short
Trigger an n8n workflow from the Webhook node, with room to verify the HMAC signature before anything else runs.
Microsoft Bookings
Stays your system of record. Bookings land in Outlook and Teams and Microsoft sends the invites and reminders.

How it works

What happens with n8n

  • n8n's Webhook node exposes a test URL and a production URL. The test URL only listens while you click "Listen for test event"; the production URL works while the workflow is active.
  • BookingsXP posts the booking.created envelope with a BookingsXP-Signature header (t=…,v1=…).
  • With the Webhook node's Raw Body option on, you can compute HMAC-SHA256 over "<t>.<raw body>" with the Crypto node and compare it with v1 before continuing.

Setup

Set up n8n

5 steps. Names of menus and buttons are as they appear today; vendors rename things, so look for the closest match.
  1. Step 1: Turn on Store bookings

    Dashboard → widget → Data & access → "Store bookings in BookingsXP".

  2. Step 2: Add a Webhook node

    HTTP Method: POST. Path: something unguessable, such as bookingsxp-7f3a. Respond: Immediately. Under Options, add Raw Body if you plan to verify signatures.

  3. Step 3: Add the production URL to BookingsXP

    Dashboard → Integrations → Add an endpoint → Webhook (JSON). Paste the Production URL, not the test URL, and copy the signing secret shown after saving. Activate the workflow.

  4. Step 4: Verify the signature

    Split the header into t and v1, use a Crypto node (Action: Hmac, Type: SHA256, Secret: your whsec_ secret) on the string t + "." + raw body, and add an If node that stops when the result differs from v1.

    Code node alternative
    // Mode: Run Once for All Items (self-hosted: allow the crypto module)
    const crypto = require("crypto");
    const item = $input.first();
    const header = item.json.headers["bookingsxp-signature"];
    const { t, v1 } = Object.fromEntries(header.split(",").map((p) => p.split("=")));
    const raw = Buffer.from(item.binary.data.data, "base64").toString("utf8");
    const mac = crypto.createHmac("sha256", $env.BXP_SECRET).update(t + "." + raw).digest("hex");
    if (mac !== v1) throw new Error("Bad BookingsXP signature");
    return [{ json: JSON.parse(raw) }];
  5. Step 5: Continue with your nodes

    Add a Switch on type (booking.created, booking.failed) and route to your CRM, database, email or chat nodes.

Outcomes and caveats

What you get

The result

  • Booking data in self-hosted systems without a third-party automation cloud in between, if you self-host n8n.
  • Signature verification inside the workflow.
  • Attribution, answers and the BXP reference for every booking.

Good to know

Limits and caveats

  • BookingsXP Pro is needed for webhooks.
  • A self-hosted n8n must be reachable from the internet over a public address. BookingsXP refuses private and local network URLs.
  • The test URL stops listening after one event; use the production URL for real traffic.
  • How n8n exposes the raw body can differ between versions; check the node's output before relying on the Code node example.

FAQ

n8n questions

Something not covered? Email hello@bookingsxp.com.

Start free, no card

Start on Free with the widget and GA4 events, then move to Pro when you want ad conversions, webhooks and chat alerts.