XFlux

Blog/

How to Get Signed Webhooks When an X Account Posts

Set up XFlux account monitors and HMAC-SHA256 signed webhooks for new tweets. Includes payload shape, Node verification, and Make.com link.

Why monitors beat DIY polling

DIY means cron + timeline fetch + dedupe + retries + secrets. XFlux account monitors poll on a schedule (down to 1s on Starter+), store hits in the Dashboard, and — on paid plans — POST signed JSON to your HTTPS URL when something new matches.

Free tier includes 1 monitor with hit history. Live delivery of new hits requires Starter ($19/mo) or higher. You can still save a webhook URL and send test pings on Free.

Setup (Dashboard)

1. Create an account and open Dashboard → Monitors. 2. Add a target @username and optional comma-separated keywords. 3. Expand Webhook, paste an HTTPS endpoint, save. 4. Copy the signing secret shown once. 5. Click Test webhook.

Product overview: /twitter-webhook. Make.com step-by-step: /docs/integrations/make. Full field reference: /docs/webhooks.

Payload and headers

On a hit, XFlux sends Content-Type application/json with X-XFlux-Event, X-XFlux-Timestamp, and X-XFlux-Signature (sha256=…). Event name is monitor.hit. Test deliveries use monitor.test.

POST https://your-server.com/webhooks/xflux
Content-Type: application/json
X-XFlux-Event: monitor.hit
X-XFlux-Timestamp: 1710000000
X-XFlux-Signature: sha256=<hex>

{
  "event": "monitor.hit",
  "monitor": {
    "id": "clx...",
    "targetUsername": "elonmusk",
    "keywords": null
  },
  "tweet": {
    "id": "1234567890",
    "text": "Hello world",
    "authorUsername": "elonmusk",
    "createdAt": "2026-06-14T12:00:00.000Z"
  },
  "detectedAt": "2026-06-14T12:00:05.000Z"
}

Verify HMAC-SHA256

Compute HMAC-SHA256 over `{timestamp}.{raw_body}` with your webhook secret. Compare to X-XFlux-Signature with a timing-safe equal. Reject timestamps older than about five minutes. Always use the raw body bytes — parsed-then-restringified JSON will break verification.

import crypto from "crypto";

function verify(secret, timestamp, rawBody, signatureHeader) {
  const expected =
    "sha256=" +
    crypto
      .createHmac("sha256", secret)
      .update(`${timestamp}.${rawBody}`)
      .digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signatureHeader)
  );
}

Route with Make.com (or your bot)

Paste a Make.com Custom Webhook URL into the monitor. Make can fan out to Slack, Telegram, Discord, Sheets, or HTTP modules. For Discord specifically, see /twitter-discord-alerts.

Failed deliveries are logged in the Dashboard; the current product does not auto-retry — fix the endpoint and use Test webhook.

FAQ

Which plan includes live webhooks?
Starter ($19/mo) and above. Free can configure a URL and send test pings; live monitor.hit delivery needs a paid plan.
What algorithm is used for signatures?
HMAC-SHA256 over `{timestamp}.{raw_body}`, returned as sha256=<hex> in X-XFlux-Signature.
Can I filter by keywords?
Yes — optional comma-separated keywords on each monitor so only matching tweets create hits.
Does polling use my API quota?
No. Monitor polling is separate from REST /api/v1 call quotas.

Build with XFlux

Free tier for reads and one monitor. Starter from $19/mo for signed webhooks and faster polling.

More from the blog

How to Get Signed Webhooks When an X Account Posts | XFlux