| name | linear-webhooks-events |
| description | Configure and handle Linear webhooks for real-time event processing.
Use when setting up webhooks, handling issue/project/cycle events,
or building real-time integrations with Linear.
Trigger: "linear webhooks", "linear events", "linear real-time",
"handle linear webhook", "linear webhook setup", "linear webhook payload".
|
| allowed-tools | Read, Write, Edit, Bash(ngrok:*), Grep |
| version | 1.12.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","linear","webhooks"] |
| compatibility | Designed for Claude Code, also compatible with Codex and OpenClaw |
Linear Webhooks & Events
Overview
Set up and handle Linear webhooks for real-time event processing. Linear sends HTTP POST requests for data changes on Issues, Comments, Issue Attachments, Documents, Emoji Reactions, Projects, Project Updates, Cycles, Labels, Users, and Issue SLAs.
Webhook headers:
Linear-Signature — HMAC-SHA256 hex digest of the raw body
Linear-Delivery — Unique delivery ID for deduplication
Linear-Event — Event type (e.g., "Issue")
Content-Type: application/json; charset=utf-8
Payload body includes: action, type, data, url, actor, updatedFrom (previous values on update), createdAt, webhookTimestamp (UNIX ms).
Prerequisites
- Linear workspace admin access (required for webhook creation)
- Public HTTPS endpoint for webhook delivery
- Webhook signing secret (generated in Linear Settings > API > Webhooks)
Instructions
Step 1: Build Webhook Receiver with Signature Verification
import express from "express";
import crypto from "crypto";
const app = express();
app.post("/webhooks/linear", express.raw({ type: "*/*" }), (req, res) => {
const signature = req.headers["linear-signature"] as string;
const delivery = req.headers[] ;
eventType = req.[] ;
rawBody = req..();
expected = crypto
.(, process..!)
.(rawBody)
.();
(!crypto.(.(signature), .(expected))) {
.();
res.().({ : });
}
event = .(rawBody);
age = .() - event.;
(age > ) {
res.().({ : });
}
res.({ : });
(event, delivery).(
.(, err)
);
});
app.(, .());