XFlux

Node.js guide

Use fetch (Node 18+) with a Bearer API key. Base URL: https://www.xfluxapi.com/api/v1.

Setup

  1. Register and copy your API key
  2. Export XFLUX_API_KEY
export XFLUX_API_KEY=xflux_YOUR_KEY

Shared headers

const BASE = "https://www.xfluxapi.com/api/v1";
const headers = {
  Authorization: `Bearer ${process.env.XFLUX_API_KEY}`,
};

async function getJson(path, query) {
  const url = new URL(BASE + path);
  if (query) {
    for (const [k, v] of Object.entries(query)) {
      url.searchParams.set(k, String(v));
    }
  }
  const res = await fetch(url, { headers });
  if (!res.ok) {
    throw new Error(`${res.status} ${await res.text()}`);
  }
  return res.json();
}

Get a user profile

const { data: user } = await getJson("/users/elonmusk");
console.log(user.username, user.followers_count);

User timeline

const { data: tweets } = await getJson("/users/OpenAI/tweets", {
  limit: 10,
});
for (const t of tweets) {
  console.log(t.id, (t.text || "").slice(0, 100));
}

See Search operators for from:, phrases, and lang:.

const { data: results } = await getJson("/search", {
  q: "from:OpenAI lang:en",
  limit: 10,
});
console.log(results.length, "results");

Tweet by ID

const tweetId = "1234567890";
const { data: tweet } = await getJson(`/tweets/${tweetId}`);
console.log(tweet);

Verify monitor webhooks (Express)

Live monitor.hit delivery requires Starter+. Always verify HMAC — full reference in Webhooks.

import crypto from "crypto";
import express from "express";

const app = express();
const SECRET = process.env.XFLUX_WEBHOOK_SECRET;

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)
  );
}

app.post(
  "/webhooks/xflux",
  express.raw({ type: "application/json" }),
  (req, res) => {
    const timestamp = req.headers["x-xflux-timestamp"];
    const signature = req.headers["x-xflux-signature"];
    const rawBody = req.body.toString("utf8");
    if (!verify(SECRET, timestamp, rawBody, signature)) {
      return res.status(401).send("Invalid signature");
    }
    const event = JSON.parse(rawBody);
    // handle monitor.hit ...
    res.status(200).send("ok");
  }
);

MCP for agents

Prefer @xflux/xflux-mcp-server inside Claude or Cursor instead of hand-rolling tool wrappers. Marketing overview: /mcp.
Node.js Guide — XFlux X/Twitter API