Event
Registers a Linear webhook on publish and starts one run per delivery, verified against Linear-Signature and deduped on Linear-Delivery.
Start a run when Linear creates, updates or removes an issue or comment.
Connection
- Required
- Yes — the node will not save without one
- Auth type
- API key
- Providers
- Linear
- Secret shape
- the API key, or {"api_key": "…"}
- Config it needs
- team_id
- Resolved by
- config.connection_id, else node.connection_id
- Note
- A personal API key creates the webhook as the person who issued it, so it stops working if they leave the workspace. Publishing also needs MANTLE_APP_PUBLIC_BASE_URL set to a public https URL — Linear requires 'a publicly accessible HTTPS, non-localhost URL'.
Configuration
2 fields, none required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.
| Field | Type | Required | Default | Constraints | Example |
|---|---|---|---|---|---|
team_id Team to watch — its UUID, or its key (the 'ENG' in ENG-412). Leave blank to watch every public team in the workspace, including ones created later. | string | No | — | — | — |
resource_types Which Linear entities to subscribe to. Linear's docs name Comment, Issue, IssueLabel, Project, Cycle and Reaction; other entity type names are accepted but were not confirmed against Linear's docs. | array | No | ["Issue"] | 1–64 characters; array of string | — |
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"resource_types": [
"Issue"
]
}Output
One shape.
linear event
A flat envelope over Linear's data-change payload, with the body under `payload`. `payload.data` is the whole serialised entity and its keys depend on type, so the shape is open below these fields.
Extra keys beyond the ones listed can appear.
| Field | Type | Example |
|---|---|---|
action What happened: create, update or remove for a data-change event. Other Linear webhooks use their own verbs (an OAuthApp revocation sends 'revoked'). | string | create |
type The entity the event is about — Issue, Comment, Project… Branch on this when the trigger subscribes to more than one resource type. | string | Issue |
delivery_id Linear-Delivery, the UUID that identifies this payload, and the run's idempotency key. Linear retries a failed delivery up to three times (after 1 minute, 1 hour and 6 hours), so a redelivery joins the run it already started rather than starting a second. | string | 234d1a4e-b617-4388-90fe-adc3633d6b72 |
data_id Id of the entity the event is about, lifted out of data so the next node need not dig. | string | 2174add1-f7c8-44e3-bbf3-2d60b5ea8bc9 |
url Linear URL of the subject entity. | string | https://linear.app/acme/issue/ENG-412/fix-the-thing |
created_at When the action took place, ISO-8601. | string | 2026-01-23T12:53:18.084Z |
webhook_timestamp When Linear sent the webhook, epoch milliseconds. | number | 1737636798084 |
organization_id The Linear workspace the event came from. | string | — |
actor.id Who triggered the action. Empty when the actor was deleted since. | string | — |
actor.name That actor's display name. | string | Orbit |
actor.type user, oauthClient or integration. | string | user |
updated_from On an update, the previous values of the properties that changed. Empty on every other action. | object | — |
payload Linear's webhook body exactly as it arrived, including the whole serialised entity under data. Its keys depend on type. | object | — |
{
"action": "create",
"actor": {
"id": "aacdca22-6266-4c0a-ab3c-8fa70a26765c",
"name": "Orbit",
"type": "user"
},
"created_at": "2026-01-23T12:53:18.084Z",
"data_id": "2174add1-f7c8-44e3-bbf3-2d60b5ea8bc9",
"delivery_id": "234d1a4e-b617-4388-90fe-adc3633d6b72",
"organization_id": "b5ea5f1f-8adc-4f52-b4bd-ab4e84cf51ba",
"payload": {
"action": "create",
"type": "Issue"
},
"type": "Issue",
"updated_from": {},
"url": "https://linear.app/acme/issue/ENG-412/fix-the-thing",
"webhook_timestamp": 1737636798084
}Notes
- The webhook is created at publish and deleted on unpublish, disable or archive, so a workspace never keeps delivering to a workflow that is off.
- Every delivery is verified against Linear-Signature (a bare hex HMAC-SHA256 of the raw body) before a run can start; an unsigned POST gets a 401.
- One run per Linear-Delivery — Linear retries a failed delivery after 1 minute, 1 hour and 6 hours, and a retry joins the first run.
- Linear expects a 200 within 5 seconds and may disable a webhook whose URL keeps failing; re-publishing the workflow registers a fresh one.
- team_id and resource_types are read when the workflow is published, before any run exists, so neither can be a {{ expression }}.
Related Linear nodes
Solutions with Linear
See Event run in a workflow.
In a technical demo we add the Linear connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.