Node.js guide
Use fetch (Node 18+) with a Bearer API key. Base URL: https://www.xfluxapi.com/api/v1.
Setup
- Register and copy your API key
- Export
XFLUX_API_KEY
export XFLUX_API_KEY=xflux_YOUR_KEYShared 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));
}Search
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.