Reference · Tools
Linear
Interact with the Linear issue tracking platform. Create, read, update, and delete issues; add comments; and attach links.
The Linear node manages issues and their conversation through Linear's GraphQL API — creating, reading, updating and deleting issues, adding threaded comments, and attaching links. A typical build is opening a Linear issue from an inbound bug report and commenting on it as the support thread develops.
- Node type
- Action
- Parameters
- 16
- Outputs
- Output, Error
- Credentials
- Linear
Linear
Create, read, update, and delete issues in Linear, add comments, and attach links.
Overview
The Linear tool communicates with the Linear project management platform via its GraphQL API (https://api.linear.app/graphql). It supports full CRUD operations on issues (create, get, get many, update, delete), adding URL links to issues as attachments, and creating comments on issues with optional threading (parent comment replies). All requests use Bearer token authentication with the Linear API key. Issue retrieval supports cursor-based pagination with returnAll and limit parameters. GraphQL errors are extracted and surfaced with user-presentable messages when available.
Category: Productivity
Tool Name: linear
Version: 1
Appearance: Icon: si-linear | Color: #5E6AD2
Node Type
Action — processes input items and produces output
Input / Output
| Direction | Port(s) |
|---|---|
| Input | Input |
| Output | Output, Error |
Credentials
This tool requires Linear credentials. See the Credentials Guide for setup instructions.
Resources
| Resource | Value |
|---|---|
| Comment | comment |
| Issue | issue |
Operations
Issue (issue)
| Operation | Value | Description |
|---|---|---|
| Add Link | addLink | Add a link to an issue |
| Create | create | Create an issue |
| Delete | delete | Delete an issue |
| Get | get | Get an issue |
| Get Many | getAll | Get many issues |
| Update | update | Update an issue |
Comment (comment)
| Operation | Value | Description |
|---|---|---|
| Add Comment | addComment | Add a comment to an issue |
Parameters
Issue: Add Link
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Issue ID (issueId) | string | Yes | — | The ID of the issue. Supports expressions like {{ $json.issueId }}. |
| Link | string | Yes | — | The URL to attach to the issue. Supports expressions like {{ $json.url }}. |
Issue: Create
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Team ID | string | Yes | — | ID of the team. Find in Linear: Settings > Teams > click team > copy ID from URL, or use the Linear API to list teams. Supports expressions like {{ $json.teamId }}. |
| Title | string | Yes | — | The title of the issue. Supports expressions like {{ $json.title }}. |
Additional Fields (additionalFields) | collection | No | {} | Optional issue fields set at creation time. |
| — Assignee ID | string | No | — | User ID to assign the issue to. Use the Linear API to list users and find their IDs. |
| — Description | string | No | — | Issue description. Supports Markdown formatting. |
| — Priority | options | No | 0 | The priority level for the issue. |
Options: 0 (No Priority), 1 (Urgent), 2 (High), 3 (Normal), 4 (Low) | ||||
| — State ID | string | No | — | Workflow state ID. Use the Linear API to list workflow states for a team. |
Issue: Delete
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Issue ID (issueId) | string | Yes | — | The ID of the issue. Supports expressions like {{ $json.issueId }}. |
Issue: Get
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Issue ID (issueId) | string | Yes | — | The ID of the issue. Supports expressions like {{ $json.issueId }}. |
Issue: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 50 | Max number of results to return. (shown when Return All is false) |
Issue: Update
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Issue ID (issueId) | string | Yes | — | The ID of the issue to update. Supports expressions like {{ $json.issueId }}. |
| Update Fields | collection | No | {} | The issue fields to change. Only the fields you add are sent. |
| — Assignee ID | string | No | — | User ID to reassign the issue to. |
| — Description | string | No | — | New issue description. Supports Markdown formatting. |
| — Priority | options | No | 0 | The new priority level for the issue. |
Options: 0 (No Priority), 1 (Urgent), 2 (High), 3 (Medium), 4 (Low) | ||||
| — State ID | string | No | — | New workflow state ID. |
| — Team ID | string | No | — | Move the issue to a different team by providing the new team ID. |
| — Title | string | No | — | New title for the issue. |
Comment: Add Comment
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Issue ID (issueId) | string | Yes | — | The ID of the issue to add a comment to. Supports expressions like {{ $json.issueId }}. |
| Comment | string | Yes | — | The comment body text. Supports Markdown formatting, and expressions like {{ $json.body }}. |
Additional Fields (additionalFields) | collection | No | {} | Optional comment fields. |
| — Parent Comment ID | string | No | — | ID of the parent comment if this is a reply. |
All Operations
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Max Concurrency | number | No | 10 | Maximum number of items to process concurrently. |
Output Data
The API result is merged into the item JSON at the top level, so the incoming item’s own fields pass through alongside it and binary data on the input item is forwarded unchanged. Every operation except Issue: Get Many produces exactly one output item per input item.
Issue: Get Manyfans out — it emits one output item per issue. Ten matching issues from a single input item become ten output items.- An empty result is not silently dropped. When
Issue: Get Manymatches no issues, the node still emits one item: the input item’s JSON with_noResults: trueadded. Check for that flag before treating a downstream item as a real issue. Return Allpages through the whole issue list; with it off, paging stops onceLimitissues have been collected.
The fields that land on the item depend on the operation:
| Operation | Fields merged onto the item |
|---|---|
create, get, getAll, update | id, identifier, title, description, priority, dueDate, createdAt, archivedAt, state (id, name), assignee (id, displayName), creator (id, displayName), cycle (id, name) |
delete | success |
addLink | success |
addComment | success, comment (id) |
Note that the priority you set through the Priority field comes back as priority on the issue.
Reference the result downstream by expression, e.g. {{ $json.id }} for the issue’s internal ID or {{ $json.identifier }} for its human-readable key.
Usage Examples
- Create a new issue in a Linear team
- Get all issues from Linear
- Update the priority of a Linear issue
- Delete a Linear issue
- Add a URL link to a Linear issue
- Add a comment to a Linear issue
Example Configuration
Create an issue with a description, assignee, priority and starting state:
{
"type": "linear",
"parameters": {
"resource": "issue",
"operation": "create",
"teamId": "team_12345",
"title": "Fix login bug",
"additionalFields": {
"description": "Users are unable to log in with their email addresses",
"assigneeId": "user_67890",
"priorityId": 1,
"stateId": "state_todo"
}
}
}
Read a single issue by ID:
{
"type": "linear",
"parameters": {
"resource": "issue",
"operation": "get",
"issueId": "issue_abc123"
}
}
List issues, stopping after the first 50:
{
"type": "linear",
"parameters": {
"resource": "issue",
"operation": "getAll",
"returnAll": false,
"limit": 50
}
}
List every issue the API key can see:
{
"type": "linear",
"parameters": {
"resource": "issue",
"operation": "getAll",
"returnAll": true
}
}
Update an existing issue’s title, description, state and priority:
{
"type": "linear",
"parameters": {
"resource": "issue",
"operation": "update",
"issueId": "issue_abc123",
"updateFields": {
"title": "Updated: Fix critical login bug",
"description": "Updated description with more details",
"stateId": "state_inprogress",
"priorityId": 0
}
}
}
Attach a reference URL to an issue:
{
"type": "linear",
"parameters": {
"resource": "issue",
"operation": "addLink",
"issueId": "issue_abc123",
"link": "https://docs.example.com/troubleshooting"
}
}
Delete an issue:
{
"type": "linear",
"parameters": {
"resource": "issue",
"operation": "delete",
"issueId": "issue_abc123"
}
}
Post a Markdown comment on an issue:
{
"type": "linear",
"parameters": {
"resource": "comment",
"operation": "addComment",
"issueId": "issue_abc123",
"comment": "This issue has been reproduced on staging environment. **Priority:** High"
}
}
Reply to an existing comment by threading under its ID:
{
"type": "linear",
"parameters": {
"resource": "comment",
"operation": "addComment",
"issueId": "issue_abc123",
"comment": "Thanks for the update! I'll look into this.",
"additionalFields": {
"parentId": "comment_xyz789"
}
}
}
Create an issue with only the required fields:
{
"type": "linear",
"parameters": {
"resource": "issue",
"operation": "create",
"teamId": "team_12345",
"title": "New feature request"
}
}
Chain three nodes to create an issue, comment on it, then move it: because the created issue is merged onto the item, the following nodes address it as {{ $json.id }}.
{
"type": "linear",
"parameters": {
"resource": "issue",
"operation": "create",
"teamId": "team_12345",
"title": "Implement user authentication",
"additionalFields": {
"description": "Add OAuth2 integration for user login",
"assigneeId": "user_67890",
"priorityId": 1
}
}
}
{
"type": "linear",
"parameters": {
"resource": "comment",
"operation": "addComment",
"issueId": "{{ $json.id }}",
"comment": "Starting implementation of OAuth2 flow"
}
}
{
"type": "linear",
"parameters": {
"resource": "issue",
"operation": "update",
"issueId": "{{ $json.id }}",
"updateFields": {
"stateId": "state_inprogress"
}
}
}
Error Handling
| Mode | Behavior |
|---|---|
| stop | Halts workflow on first error |
| continue | Skips failed items, passes successful ones through |
| errorPort | Routes failed items to Error output port |
Tips
Manages Linear issues and comments via GraphQL API — create, read, update, delete issues, add links, and create threaded comments.
Key Points to Remember
- All collection parameters (
additionalFields,updateFields) use flat object structure - never wrap in arrays or use_default - The
operationparameter options depend entirely on the selectedresource - Issue IDs are required for all operations except
createandgetAll - Markdown formatting is supported in comment text
Frequently asked questions
How should collection parameters be structured?
Additional Fields and Update Fields use a flat object structure. Never wrap them in arrays or use a `_default` key — that is the most common configuration mistake with this node.
Why do the available operations change?
The operation options depend entirely on the resource you select, so choose the resource first and the valid operations follow.
When is an issue ID required?
For every operation except create and getAll. Anything acting on an existing issue needs to know which one.
Can comments use formatting?
Yes — markdown is supported in comment text, so you can post structured updates rather than flat strings.
Build with the Linear node
Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Linear credentials first.
Open BusyBotLast updated . Spotted something wrong? Tell us.