Signal infrastructure
Build on FilingIQ
REST API, an OpenAPI 3.1 spec, HMAC-signed webhooks. Every payload carries the elapsed time from SEC release to scoring. We are not another insider dashboard. We are real-time signal infrastructure.
Curl in 30 seconds
RESTcurl https://api.filingiq.io/v1/signals/latest?limit=10 \
-H "Authorization: Bearer fiq_live_<your_key>" Cursor pagination, ticker filters, score thresholds, all flat query params. Stripe-shape error envelopes for clean error handling.
Typed, in any language
OpenAPI 3.1// Generate a typed client straight from our spec. No SDK to install,
// and the same trick works in any language (openapi-generator, etc.):
// npx openapi-typescript https://api.filingiq.io/v1/openapi.json -o filingiq.d.ts
const res = await fetch(
"https://api.filingiq.io/v1/signals/latest?limit=10&min_score=75",
{ headers: { Authorization: `Bearer ${process.env.FILINGIQ_API_KEY}` } },
);
const { data } = await res.json();
console.log(data.length, "high-conviction signals"); Point any OpenAPI generator at our spec for a fully typed client in TypeScript, Python, Go, or Rust. No SDK to install, nothing to keep in sync but the spec itself.
HMAC-signed webhooks
Copy-paste, zero depsimport { createHmac, timingSafeEqual } from "node:crypto";
// FilingIQ-Signature: t=<unix>,v1=<hex hmac-sha256 of `${t}.${rawBody}`>
function verify(raw, secret, header) {
const { t, v1 } = Object.fromEntries(header.split(",").map((p) => p.split("=")));
if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false; // 5-min replay window
const want = createHmac("sha256", secret).update(`${t}.${raw}`).digest("hex");
return v1.length === want.length &&
timingSafeEqual(Buffer.from(v1, "hex"), Buffer.from(want, "hex"));
}
app.post("/filingiq", express.raw({ type: "application/json" }), (req, res) => {
const raw = req.body.toString("utf8");
if (!verify(raw, SECRET, req.header("FilingIQ-Signature"))) {
return res.status(401).send("invalid");
}
const event = JSON.parse(raw);
console.log(event.ticker, event.signal_score, `${event.latency_ms}ms after SEC`);
res.sendStatus(200);
}); Every webhook carries a FilingIQ-Signature header. Verification is a dozen lines of standard-library crypto, no dependency required, with a 5-minute replay window. Copy-paste receivers in Node and Python live at docs.filingiq.io/webhooks/verification .
Latency, surfaced everywhere
Every signal exposes the elapsed time from SEC publication to scoring. Pull it via ?expand=latency or read it from webhook payloads.
Native integrations
Discord, Slack, Telegram. Paste a URL or click connect. Same retry queue, same delivery log, same replay flow.
Built for retries
Idempotency keys on every mutating endpoint. 8-attempt webhook delivery with exponential backoff. Replay any delivery from the dashboard.
Ready to ship?
API access is included on the Professional and Enterprise tiers. Issue your first key from the dashboard's Settings page and start pulling signals.