Linear · event: Issue (action: update) ·
content type: application/json; charset=utf-8
This is a representative sample — fake IDs, real structure. To see a payload with your data, point the provider at a capture URL (button below).
One click creates a free capture bin with this exact payload already in it — pretty-printed, headers inspectable, replayable to your own endpoint:
Then paste the bin's URL into Linear's webhook settings to capture a real delivery. No signup.
content-type: application/json; charset=utf-8 user-agent: Linear-Webhook linear-delivery: 234d1a4e-b617-4388-90fe-adc3633d6b72 linear-event: Issue linear-signature: da3dad837ffa6dac925068614f5d55f467d0bc44c43326dea3813c82316b4461 linear-timestamp: 1787990400508
{
"action": "update",
"actor": {
"id": "b5ea5f1f-8adc-4f52-b4bd-ab4e84cf51ba",
"type": "user",
"name": "Ada Deveraux",
"email": "ada@acme.dev",
"url": "https://linear.app/acme/profiles/ada"
},
"createdAt": "2026-08-29T19:30:00.000Z",
"data": {
"id": "539068e2-ae88-4d09-bd75-22eb4a59612f",
"createdAt": "2026-08-20T09:12:44.000Z",
"updatedAt": "2026-08-29T19:30:00.000Z",
"number": 1778,
"title": "Webhook handler drops out-of-order deliveries",
"priority": 2,
"boardOrder": 0,
"teamId": "72b2a2dc-6f4f-4423-9d34-24b5bd10634a",
"stateId": "f3a1b2c4-d5e6-4f7a-8b9c-0d1e2f3a4b5c",
"assigneeId": "aacdca22-6266-4c0a-ab3c-8fa70a26765c"
},
"updatedFrom": {
"updatedAt": "2026-08-28T14:02:10.000Z",
"stateId": "a9b8c7d6-e5f4-4a3b-2c1d-0e9f8a7b6c5d"
},
"type": "Issue",
"url": "https://linear.app/acme/issue/ENG-1778/webhook-handler-drops-out-of-order-deliveries",
"organizationId": "dc844923-f9a4-40a3-825c-dea7747e57d6",
"webhookTimestamp": 1787990400508,
"webhookId": "000042e3-d123-4980-b49f-8e140eef9329"
}
lin_wh_sample_secret_Yc3vT9qPk1x. Paste body + header value into the
signature debugger (generic scheme), or set the
same secret on a capture bin for a live ✓/✗ badge on every delivery.webhookTimestamp (epoch
ms, also in Linear-Timestamp) is more than ~60 seconds old —
a replay-attack guard that also bites you when replaying old captures at a strict handler.update actions, updatedFrom holds the previous
values of every changed property (never-set properties come back null) —
diff it against data instead of storing your own last-seen state.admin scope) can create webhooks, and the endpoint must be public
HTTPS — for local dev, relay to localhost.Reproduce this delivery against any endpoint (your handler, a bin, staging):
$ curl -X POST https://your-endpoint.example/hook \
-H 'content-type: application/json; charset=utf-8' \
-H 'user-agent: Linear-Webhook' \
-H 'linear-delivery: 234d1a4e-b617-4388-90fe-adc3633d6b72' \
-H 'linear-event: Issue' \
-H 'linear-signature: da3dad837ffa6dac925068614f5d55f467d0bc44c43326dea3813c82316b4461' \
-H 'linear-timestamp: 1787990400508' \
-d '{
"action": "update",
"actor": {
"id": "b5ea5f1f-8adc-4f52-b4bd-ab4e84cf51ba",
"type": "user",
"name": "Ada Deveraux",
"email": "ada@acme.dev",
"url": "https://linear.app/acme/profiles/ada"
},
"createdAt": "2026-08-29T19:30:00.000Z",
"data": {
"id": "539068e2-ae88-4d09-bd75-22eb4a59612f",
"createdAt": "2026-08-20T09:12:44.000Z",
"updatedAt": "2026-08-29T19:30:00.000Z",
"number": 1778,
"title": "Webhook handler drops out-of-order deliveries",
"priority": 2,
"boardOrder": 0,
"teamId": "72b2a2dc-6f4f-4423-9d34-24b5bd10634a",
"stateId": "f3a1b2c4-d5e6-4f7a-8b9c-0d1e2f3a4b5c",
"assigneeId": "aacdca22-6266-4c0a-ab3c-8fa70a26765c"
},
"updatedFrom": {
"updatedAt": "2026-08-28T14:02:10.000Z",
"stateId": "a9b8c7d6-e5f4-4a3b-2c1d-0e9f8a7b6c5d"
},
"type": "Issue",
"url": "https://linear.app/acme/issue/ENG-1778/webhook-handler-drops-out-of-order-deliveries",
"organizationId": "dc844923-f9a4-40a3-825c-dea7747e57d6",
"webhookTimestamp": 1787990400508,
"webhookId": "000042e3-d123-4980-b49f-8e140eef9329"
}'