Skip to main content
Linear logo

Overview

Add Linear to any ModuleX agent or workflow. Project-management and issue-tracking integration for Linear via the GraphQL API at api.linear.app/graphql. Covers team discovery, issue CRUD + search, and project list/create.
Categories: Project & Task Management · Task Management · Collaboration · Auth: OAuth2, API Key · Actions: 7

Authentication

OAuth2 Authentication

Connect using Linear OAuth (recommended for most use cases)

Required Credentials

FieldDescriptionRequiredFormat
Client IDLinear OAuth application Client IDYesxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Client SecretLinear OAuth application Client SecretYesxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

OAuth Configuration

  • Authorization URL: https://linear.app/oauth/authorize
  • Token URL: https://api.linear.app/oauth/token
  • Scopes: read, write

Available Actions

Parameters

limit
integer
Maximum number of teams to return (Default: 50)
after
string
Cursor for pagination

Response

{
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "count": {
      "default": 0,
      "title": "Count",
      "type": "integer"
    },
    "page_info": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Page Info"
    },
    "teams": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Teams",
      "type": "array"
    }
  },
  "required": [
    "success"
  ],
  "title": "GetTeamsOutput",
  "type": "object"
}

Parameters

issue_id
string
required
The ID of the issue to retrieve

Response

{
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "issue": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Issue"
    }
  },
  "required": [
    "success"
  ],
  "title": "GetIssueOutput",
  "type": "object"
}

Parameters

team_id
string
Filter by team ID
project_id
string
Filter by project ID
assignee_id
string
Filter by assignee user ID
state_id
string
Filter by workflow state ID
query
string
Substring to match in issue titles
label_names
array
Filter by label names
include_archived
boolean
Include archived issues (Default: false)
order_by
string
Field to order by (‘createdAt’ or ‘updatedAt’) (Default: updatedAt)
limit
integer
Maximum number of issues to return (Default: 50)

Response

{
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "count": {
      "default": 0,
      "title": "Count",
      "type": "integer"
    },
    "page_info": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Page Info"
    },
    "issues": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Issues",
      "type": "array"
    }
  },
  "required": [
    "success"
  ],
  "title": "SearchIssuesOutput",
  "type": "object"
}

Parameters

team_id
string
required
The team’s UUID (the ‘id’ field returned by get_teams) — NOT the short team key like ‘ENG’. Call get_teams first to resolve it.
title
string
required
The title of the issue
description
string
Markdown description
assignee_id
string
UUID of the user to assign the issue to
project_id
string
UUID of the project to add the issue to
state_id
string
UUID of the workflow state
label_ids
array
Label UUIDs to attach
priority
integer
Priority level: 0=No priority, 1=Urgent, 2=High, 3=Normal, 4=Low

Response

{
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "issue": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Issue"
    }
  },
  "required": [
    "success"
  ],
  "title": "CreateIssueOutput",
  "type": "object"
}

Parameters

issue_id
string
required
The ID of the issue to update
title
string
New title
description
string
New markdown description
assignee_id
string
New assignee user ID
team_id
string
Move to a different team
project_id
string
Move to a different project
state_id
string
Change workflow state
label_ids
array
Replace labels with these IDs
priority
integer
New priority level (0-4)

Response

{
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "issue": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Issue"
    }
  },
  "required": [
    "success"
  ],
  "title": "UpdateIssueOutput",
  "type": "object"
}

Parameters

team_id
string
Filter by team ID
order_by
string
Field to order by (‘createdAt’ or ‘updatedAt’) (Default: updatedAt)
limit
integer
Maximum number of projects to return (Default: 50)
after
string
Cursor for pagination

Response

{
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "count": {
      "default": 0,
      "title": "Count",
      "type": "integer"
    },
    "page_info": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Page Info"
    },
    "projects": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Projects",
      "type": "array"
    }
  },
  "required": [
    "success"
  ],
  "title": "ListProjectsOutput",
  "type": "object"
}

Parameters

team_id
string
required
The team’s UUID (the ‘id’ field returned by get_teams) — NOT the short team key like ‘ENG’. Call get_teams first to resolve it.
name
string
required
The name of the project
description
string
The description of the project
status_id
string
The project-status ID
priority
integer
Priority level (0-4)
member_ids
array
IDs of users to add as members
start_date
string
Start date (YYYY-MM-DD)
target_date
string
Target date (YYYY-MM-DD)
label_ids
array
Label IDs to attach

Response

{
  "additionalProperties": false,
  "properties": {
    "success": {
      "title": "Success",
      "type": "boolean"
    },
    "error": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Error"
    },
    "project": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Project"
    }
  },
  "required": [
    "success"
  ],
  "title": "CreateProjectOutput",
  "type": "object"
}

Limits & Quotas

  • All tools share a single GraphQL endpoint; failures (HTTP non-200, GraphQL errors, exceptions) surface as success=False + error.
  • The search_issues and list_projects actions interpolate filter values into the GraphQL string verbatim (matching legacy). Inputs are scoped to internal IDs / label names — not user prose — and treated as opaque tokens.
  • Output objects keep their nested GraphQL shape unchanged (state, team, assignee, creator, labels.nodes for issues; lead, status for projects).

Airtable

ClickUp

Jira