GEX
Public feedInitializing terminal
The official Node.js SDK for GEX Engine. Built with TypeScript from the ground up, providing complete type safety, async/await support, and built-in WebSocket streaming. Works in Node.js 18+ and modern edge runtimes.
npm install @gexengine/sdk
Or with yarn or pnpm:
yarn add @gexengine/sdk # or pnpm add @gexengine/sdk
import { GEXClient } from "@gexengine/sdk";
const client = new GEXClient({ apiKey: "YOUR_API_KEY" });
// Or use an environment variable (recommended)
// GEX_API_KEY=your_key
const client = new GEXClient(); // reads from GEX_API_KEYconst gex = await client.gex("SPX");
console.log("Total GEX:", gex.data.total_gex.toLocaleString());
console.log("Net GEX:", gex.data.net_gex.toLocaleString());
console.log("Spot:", gex.meta.spot);const stream = client.stream("SPX", {
channels: ["gex", "signals", "regime"],
});
stream.on("gex", (data) => {
console.log("Total GEX:", data.total_gex.toLocaleString());
});
stream.on("regime", (data) => {
console.log("Regime:", data.regime, "Strength:", data.strength);
});
stream.on("error", (err) => {
console.error("Stream error:", err.message);
});
// Clean up when done
// stream.close();const result = await client.portfolio.analyze({
positions: [
{ symbol: "SPX", quantity: 10, type: "call", strike: 6000, expiry: "2026-03-21" },
{ symbol: "SPX", quantity: -5, type: "put", strike: 5800, expiry: "2026-03-21" },
],
});
console.log("Portfolio GEX:", result.data.total_gex);
console.log("Net Delta:", result.data.net_delta);
console.log("Regime Alignment:", result.data.regime_alignment);import { GEXClient, GEXError, RateLimitError } from "@gexengine/sdk";
try {
const gex = await client.gex("SPX");
} catch (err) {
if (err instanceof RateLimitError) {
console.log(`Rate limited. Retry after ${err.retryAfter}s`);
} else if (err instanceof GEXError) {
console.log(`API error ${err.statusCode}: ${err.detail}`);
}
}All response types are exported and can be used for type-safe integration:
import type { GEXResponse, RegimeResponse, LevelsResponse } from "@gexengine/sdk";
function handleGex(gex: GEXResponse) {
// Full autocomplete and type checking
const totalGex: number = gex.data.total_gex;
const spot: number = gex.meta.spot;
}import { GEXClient } from "@gexengine/sdk";
const client = new GEXClient({ apiKey: "YOUR_API_KEY" });
// Fetch all key data points in parallel
const [gex, regime, levels, dsi] = await Promise.all([
client.gex("SPX"),
client.regime("SPX"),
client.levels("SPX"),
client.dsi("SPX"),
]);
console.log("=== SPX Dashboard ===");
console.log("Spot:", gex.meta.spot);
console.log("Total GEX:", gex.data.total_gex.toLocaleString());
console.log("Regime:", regime.data.regime);
console.log("Strength:", regime.data.strength);
console.log("DSI:", dsi.data.dsi);
console.log("Gamma Flip:", levels.data.gamma_flip);
console.log("Put Wall:", levels.data.put_wall);
console.log("Call Wall:", levels.data.call_wall);
// Stream real-time updates
const stream = client.stream("SPX", {
channels: ["gex", "regime"],
});
stream.on("regime", (data) => {
if (data.strength > 0.8) {
console.log(`Strong ${data.regime} regime detected`);
}
});