Documentation

Developers · Guides

Integration recipes

Common ways developers integrate with intSignal — post events to chat, file records from your own tools, keep a mirror in sync, and power an AI assistant.

Patterns for wiring intSignal into the tools you already run. Each recipe uses the REST API, webhooks, and the code examples — no server-side setup required on your end beyond a place to receive webhooks. If you'd rather consolidate consoles than write integrations, the unified security management and analytics platform is the packaged version of the same idea.

Post events to chat (Slack / Teams)

Goal: a message in your team channel the moment something happens.

How: subscribe a webhook to the events you care about, verify the signature, and forward a summary to your chat provider's incoming webhook.

// Express handler — verify, then forward to Slack
app.post("/hooks/intsignal", express.raw({ type: "*/*" }), async (req, res) => {
  if (!verify(req)) return res.sendStatus(401); // see Webhooks → Verify
  const evt = JSON.parse(req.body);
  if (evt.type === "case.opened") {
    await fetch(process.env.SLACK_WEBHOOK, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ text: `🚨 New ${evt.data.severity} case: ${evt.data.id}` }),
    });
  }
  res.sendStatus(200);
});

File records from your own tools

Goal: raise a ticket/case from a monitoring tool, a form, or a script.

How: POST with a scoped key. Records created this way are tagged with source API, so you can tell them apart later.

session.post(f"{BASE}/soc/cases", json={
    "title": "Disk 90% full on web-03",
    "severity": "medium",
})

Tip

Give each integration its own key scoped to just what it needs (e.g. a create-only key). If it leaks, you revoke one key without breaking the others.

Keep a mirror in sync

Goal: a local copy of your records for reporting or a data warehouse.

How: do one initial backfill with pagination, then stay current two ways — a periodic incremental pull with since, and/or webhooks for near-real-time updates.

# incremental: only what changed since last run
new = list_all("/soc/cases", params={"since": last_run_iso})
upsert(new)                     # your DB write
last_run_iso = now_iso()

Prefer webhooks over tight polling — you'll get changes faster and stay under the rate limits.

Build a live status view

Goal: an internal dashboard or wallboard.

How: read the list endpoints on a sensible interval (30–60s), cache the results, and render. Filter with query params so you only pull what you show.

const open = await api("/soc/cases?status=open&limit=100");
render(open.data);

Power an AI assistant over your data

Goal: let an AI tool answer questions from your intSignal data and docs.

How: point an MCP-capable client at the MCP server with a read-only scoped key. The assistant can search the docs and, with the token, query your account — no custom API glue.

Warning

An AI integration gets its own least-privilege, read-only key like any other. Rotate it on a schedule and revoke it if a tool is decommissioned.

Need a hand with Developers?Talk to our team →