CONNECT APP
Build with Linear (API key)
Productivity
- API key
MCP
Give your agent Linear (API key) tools
Every Linear (API key) action is exposed as an MCP tool on Pipedream's remote server. Point a client at it with your end user's ID and Connect resolves that user's Linear (API key) account for each tool call — you store no tokens.
// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "linear_app",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// e.g. run Create Comment:
const result = await mcp.callTool({
name: "linear_app-create-comment",
arguments: {
issueId: "Issue",
body: "Body",
},
})# access_token: mint a short-lived token with the Connect SDK — see the MCP guide
headers = {
"Authorization": f"Bearer {access_token}",
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", # any stable ID for this user in your system
"x-pd-app-slug": "linear_app",
}
async with streamablehttp_client("https://remote.mcp.pipedream.net/v3", headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
# e.g. run Create Comment:
result = await session.call_tool("linear_app-create-comment", {
"issueId": "Issue",
"body": "Body",
})API PROXY
Call the Linear (API key) API directly
For an endpoint with no pre-built tool, the Connect proxy forwards your request to the Linear (API key) API with the connected user's credentials attached. You store no tokens and write no refresh logic.
const resp = await pd.proxy.get({
externalUserId: "{external_user_id}", // any stable ID for this user in your system
accountId: "apn_xxxxxxx",
url: "https://api.linear.app/graphql",
})
// Any allowed Linear (API key) endpoint works here. Pipedream attaches the
// connected account's credentials to the outgoing request.# The path segment is the target URL, URL-safe base64 encoded:
# https://api.linear.app/graphql
curl "https://api.pipedream.com/v1/connect/{project_id}/proxy/aHR0cHM6Ly9hcGkubGluZWFyLmFwcC9ncmFwaHFs?external_user_id={external_user_id}&account_id=apn_xxxxxxx" \
-H "Authorization: Bearer {access_token}" \
-H "x-pd-environment: production"SDK
Run Linear (API key) actions from your backend
Connect a user's Linear (API key) account once, then run Create Comment on their behalf from your own code — TypeScript, Python, or plain HTTP.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "linear_app-create-comment",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
linear_app: { authProvisionId: "apn_xxxxxxx" },
issueId: "Issue",
body: "Body",
},
})from pipedream import Pipedream
pd = Pipedream(
client_id="{oauth_client_id}",
client_secret="{oauth_client_secret}",
project_id="{project_id}",
project_environment="production",
)
result = pd.actions.run(
id="linear_app-create-comment",
external_user_id="{external_user_id}", # any stable ID for this user in your system
configured_props={
"linear_app": {"authProvisionId": "apn_xxxxxxx"},
"issueId": "Issue",
"body": "Body",
},
)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "linear_app-create-comment",
"configured_props": {
"linear_app": { "authProvisionId": "apn_xxxxxxx" },
"issueId": "Issue",
"body": "Body"
}
}'TOOLS
Linear (API key) actions
On-demand operations your product or agent can configure and run on behalf of a connected user.
-
Create Comment
actionAdd a comment to a Linear issue. Use Search Issues to find the target issue ID first. Returns the new comment's ID and body. Example:issueId: "iss_01abc",body: "Fixed in PR #123."→ returns{success: true, comment: {id: "cmt_xyz", body: "Fixed in PR #123."}}. See the documentationWritev1.0.0 -
Create Initiative
actionCreate a new initiative in Linear to track a cross-team strategic goal. Initiatives group multiple projects toward a shared objective. Use List Users to find a valid owner ID. Example:initiativeName: "Q4 Platform Upgrade",status: "Active",targetDate: "2024-12-31"→ returns{success: true, initiative: {id: "ini_01abc", name: "Q4 Platform Upgrade"}}. See the documentationWritev1.0.0 -
Create Initiative Update
actionPost a status update on a Linear initiative. Use List Initiatives first to obtain the initiative ID. Updates appear in the initiative's activity feed and can include a health status. Example:initiativeId: "b2c3d4e5-0000-0000-0000-000000000002",body: "Two projects completed; on track for Q4.",health: "onTrack"→ returns{success: true, initiativeUpdate: {id: "iu_01xyz"}}. See the documentation.Writev0.0.1 -
Create Issue
actionCreates a new issue in Linear. Requires a team ID and title; all other fields are optional. Use Get Teams to discover valid team IDs, List Workflow States to find state IDs, List Users to find assignee IDs, and List Labels to find label IDs. Example:teamId: "9d1c3f7e-2b48-4c6a-9f1e-5a7b8c9d0e1f",title: "Fix login redirect on mobile"→ returns{success: true, issue: {id: "iss_01", identifier: "ENG-42", title: "Fix login redirect on mobile"}}. See the documentation.Writev0.4.22 -
Create Project
actionCreate a new project in Linear to track a body of work. Projects group related issues within a team. Use Get Teams for team IDs, List Project Statuses to find status IDs, List Users for member IDs, and List Project Labels for label IDs. Example:teamId: "9d1c3f7e-...",projectName: "Mobile App v2",statusId: "s2abc"→ returns{success: true, project: {id: "proj_01", name: "Mobile App v2"}}. See the documentation.Writev1.0.0 -
Create Project Update
actionPost a status update on a Linear project. Use List Projects first to obtain the project ID. Updates appear in the project's activity feed. Example:projectId: "a1b2c3d4-0000-0000-0000-000000000001",body: "Q3 milestone complete; all P0 issues resolved.",health: "onTrack"→ returns{success: true, projectUpdate: {id: "pu_01xyz"}}. See the documentation.Writev0.0.1 -
Get Initiative Update
actionRetrieve a single initiative update by its ID in Linear. Use List Initiative Updates first to obtain a valid update ID. Returns the full update includingid,body,health,createdAt, and author. Example:initiativeUpdateId: "530f4366-88ab-4866-a44b-c2326728c32d"→ returns{id: "530f4366-88ab-4866-a44b-c2326728c32d", body: "Two projects completed.", health: "onTrack", createdAt: "2024-01-15T10:00:00Z"}. See the documentation.Read-onlyv0.0.1 -
Get Issue
actionRetrieve a single Linear issue by its UUID or human-readable identifier. Provide exactly one ofissueId(UUID) orissueIdentifier(e.g.ENG-42). Returns complete issue details: title, description, state, assignee, team, project, labels, and timestamps. Use the optionalfieldsprop to narrow the response to only the keys you need (reduces context for large result sets). Example:issueIdentifier: "ENG-42"→ returns{id: "iss_01abc", identifier: "ENG-42", title: "Fix login redirect", state: {name: "In Progress"}}. See the documentation.Read-onlyv0.2.0 -
Get Project Update
actionRetrieve a single project update by its ID in Linear. Use List Project Updates first to obtain a valid update ID. Returns the full update includingid,body,health,createdAt, and author. Example:projectUpdateId: "7df5e7f9-a357-4539-ae94-4a004fec635f"→ returns{id: "7df5e7f9-a357-4539-ae94-4a004fec635f", body: "Q3 milestone complete.", health: "onTrack", createdAt: "2024-01-15T10:00:00Z"}. See the documentation.Read-onlyv0.0.1 -
Get Teams
actionRetrieves teams in your Linear workspace. Returns team objects withid,name,key, and more (including internal settings fields). Use this to discover valid team IDs (UUIDs) for creating or filtering issues and projects. Supports pagination: passafterwith the previous response'spageInfo.endCursorto load the next page. Use the optionalfieldsprop to narrow the response to only the keys you need (reduces context for large result sets). Example: call withlimit: 50→ returns{nodes: [{id: "9d1c3f7e-...", name: "Engineering", key: "ENG"}, ...], pageInfo: {endCursor: "...", hasNextPage: true}}. See the documentation.Read-onlyv1.0.0 -
Get View Issues
actionRetrieve issues filtered by a saved custom view in Linear. Custom views encapsulate pre-configured filters (team, state, assignee, labels, etc.). Use List Views to find the view ID. Use the optionalfieldsprop to narrow the response to only the keys you need (reduces context for large result sets). Example:viewId: "cv1b2c3d4-..."→ returns{nodes: [{id: "iss_01", identifier: "ENG-42", title: "Fix login", state: {name: "In Progress"}}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentationRead-onlyv0.1.0 -
List Comments
actionList comments in Linear, optionally filtered by issue or body text. Returns comment objects withid,body,createdAt, and author details. Supports pagination viafirst/after. Use Search Issues to find an issue ID to filter by. Example:issueId: "iss_01abc", body: "PR #"→ returns{nodes: [{id: "cmt_xyz", body: "Fixed in PR #123.", createdAt: "2024-01-15T10:00:00Z"}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentationRead-onlyv0.1.0 -
List Initiative Updates
actionList initiative updates in Linear, optionally scoped to a single initiative. Use List Initiatives to find an initiative ID. Returns update objects withid,body,health,createdAt, and author. Example:initiativeId: "b2c3d4e5-0000-0000-0000-000000000002",first: 10→ returns{nodes: [{id: "iu_01xyz", body: "Two projects completed.", health: "onTrack"}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentation.Read-onlyv0.0.1 -
List Initiatives
actionList initiatives in Linear, optionally filtered by name or status. Use this to discover valid initiative IDs for creating updates or linking projects. Returns initiative objects withid,name,status, andtargetDate. Example:status: "Active"→ returns{nodes: [{id: "ini_01abc", name: "Q4 Platform Upgrade", status: "Active"}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentationRead-onlyv0.1.0 -
List Labels
actionList issue labels in the Linear workspace. Use this to discover valid label names and IDs for creating or filtering issues. Returns label objects withid,name, andcolor. Example:first: 50→ returns{nodes: [{id: "lbl_bug123", name: "Bug", color: "#ef4444"}, {id: "lbl_fe456", name: "Frontend", color: "#0ea5e9"}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentation.Read-onlyv0.1.0 -
List Project Labels
actionList available project labels in the Linear workspace. Use this to discover valid label IDs when creating or updating projects. Returns{nodes, pageInfo}, where each node includesid,name, and optionalcolor. IfpageInfo.hasNextPageistrue, call again withafterset topageInfo.endCursorto fetch more. Example: returns{nodes: [{id: "9a1b2c3d-0000-0000-0000-000000000007", name: "Frontend", color: "#0ea5e9"}], pageInfo: {endCursor: "9a1b2c3d-0000-0000-0000-000000000007", hasNextPage: false}}. See the documentation.Read-onlyv0.0.1 -
List Project Statuses
actionList available project statuses in the Linear workspace. Use this to discover valid status IDs when creating or updating projects. Returns{nodes, pageInfo}, where each node includesid,name, andtype. IfpageInfo.hasNextPageistrue, call again withafterset topageInfo.endCursorto fetch more. Example: returns{nodes: [{id: "5a1b2c3d-0000-0000-0000-000000000006", name: "Planned", type: "planned"}], pageInfo: {endCursor: "5a1b2c3d-0000-0000-0000-000000000006", hasNextPage: false}}. See the documentation.Read-onlyv0.0.1 -
List Project Updates
actionList project updates in Linear, optionally scoped to a single project. Use List Projects to find a project ID. Returns update objects withid,body,health,createdAt, and author. Example:projectId: "a1b2c3d4-0000-0000-0000-000000000001",first: 10→ returns{nodes: [{id: "pu_01xyz", body: "Q3 milestone complete.", health: "onTrack"}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentation.Read-onlyv0.0.1 -
List Projects
actionList projects in Linear, optionally filtered by team. Returns project objects includingid,name,state,priority, and progress history. Use Get Teams to find team IDs. Use the optionalfieldsprop to narrow the response when only specific fields are needed (reduces context for large result sets). Example:teamId: "9d1c3f7e-..."→ returns{nodes: [{id: "proj_01", name: "Mobile App v2", state: {name: "In Progress"}}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentation.Read-onlyv0.1.0 -
List Users
actionList members of the Linear workspace. Use this to discover valid user IDs for assigning issues or initiatives. Returns{nodes, pageInfo}, where each node includesid,name, andemail. IfpageInfo.hasNextPageistrue, call again withafterset topageInfo.endCursorto fetch more. Example: call with no filters to list all members → returns{nodes: [{id: "abc123", name: "Alice", email: "alice@acme.com"}], pageInfo: {endCursor: "abc123", hasNextPage: false}}. See the documentation.Read-onlyv0.0.1 -
List Views
actionList saved custom views in Linear. Use this to discover valid view IDs for the Get View Issues action. Custom views combine filters (team, assignee, state, labels, etc.) into a reusable saved search. Optionally filter by team. Example:teamId: "9d1c3f7e-..."→ returns{nodes: [{id: "cv1abc", name: "My Open Issues", teamId: "9d1c3f7e-..."}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentationRead-onlyv0.1.0 -
List Workflow States
actionList workflow states (statuses) in Linear. Returns state IDs, names, types (e.g. backlog, started, completed, cancelled), and team info. Optionally filter by team (use the Get Teams action to discover valid team IDs, e.g.4e80f53c-da9e-4dee-b14e-2cab3e2e8716). Example:teamId: "9d1c3f7e-..."→ returns{nodes: [{id: "state_done_xyz", name: "Done", type: "completed"}, {id: "state_prog_abc", name: "In Progress", type: "started"}], pageInfo: {endCursor: "...", hasNextPage: false}}. See the documentation.Read-onlyv0.1.0 -
Remove Label from Issue
actionRemove a label from an issue in Linear. The label can be re-added at any time, so this operation is reversible. Use Search Issues to find the issue ID, and List Labels to find the label ID. Example:issueId: "iss_01abc",labelId: "lbl_bug123"→ removes the label and returns{success: true}. See the documentationWritev0.0.5 -
Search Issues
actionSearch Linear issues by team, project, assignee, labels, state, or text query. Returns up to 200 matching issues (paginated internally). Use Get Teams for team IDs, List Projects for project IDs, List Workflow States for state IDs, List Users for assignee IDs, and List Labels for label names. Use the optionalfieldsprop to narrow the response to only the keys you need (reduces context size for large result sets). Example:teamId: "9d1c3f7e-...", query: "login redirect"→ returns[{id: "iss_01", identifier: "ENG-42", title: "Fix login redirect on mobile", state: {name: "In Progress"}}]. See the documentation.Read-onlyv1.0.0 -
Update Initiative
actionUpdate an existing initiative in Linear. All fields are optional; only provided fields are updated. Use List Initiatives to find the initiative ID. Example:initiativeId: "b2c3d4e5-0000-0000-0000-000000000002",status: "Completed"→ returns{success: true, initiative: {id: "b2c3d4e5-...", name: "Q4 Platform Upgrade", status: "Completed"}}. See the documentationWritev0.0.5 -
Update Issue
actionUpdates an existing Linear issue. All fields are optional; only provided fields are changed — prior values are preserved for any omitted field. Use Get Teams for team IDs, List Workflow States for state IDs, List Users for assignee IDs, List Labels for label IDs, and Search Issues for the issue ID. Example:issueId: "iss_01abc",stateId: "state_done_xyz"→ returns{success: true, issue: {id: "iss_01abc", identifier: "ENG-42", state: {name: "Done"}}}. See the documentation.Writev1.0.0
EVENTS
Linear (API key) triggers
Event sources your backend can deploy for users and receive through a webhook.
-
Issue Status Updated (Instant)
triggerEmit new event when an issue's workflow state changes (e.g., Todo to In Progress). Returns issue with previous and current state info. Can filter by specific target state. See Linear docs for additional info See the documentation.Instantv0.1.24 -
Issue Updated (Instant)
triggerEmit new event when any issue is updated in Linear. Provides complete issue details with changes. Supports filtering by team and project. Includes all updates except status changes. See Linear docs for additional info See the documentation.Instantv0.3.24 -
New Comment Created (Instant)
triggerEmit new event when a new comment is added to an issue in Linear. Returns comment details including content, author, issue reference, and timestamps. Supports filtering by team. See Linear docs for additional info See the documentation.Instantv0.1.24 -
New Issue Created (Instant)
triggerEmit new event when a new issue is created in Linear. Provides complete issue details including title, description, team, assignee, state, and timestamps. Supports filtering by team and project. See Linear docs for additional info See the documentation.Instantv0.3.24 -
New Project Update Written (Instant)
triggerEmit new event when a project update (status report) is created in Linear. Returns update content, author, project details, and health status. Filters by team and optionally by project. See Linear docs for additional info See the documentation.Instantv0.0.16 -
Project Updated (Instant)
triggerEmit new event when a project is updated in Linear. Returns project details including name, description, status, dates, and team info. Supports filtering by specific teams. See Linear docs for additional info See the documentation.Instantv0.0.17
MULTI-APP
Use Linear (API key) with other popular apps
Most products don't stop at one integration. Pair Linear (API key) with the other apps your users rely on, and ship use cases that span both.
REFERENCE
App details
Reference metadata for the Linear (API key) connector in the Pipedream registry.
- App slug
- linear_app
- Authentication
- API key
- Categories
- Productivity
- Actions
- 26
- Triggers
- 6
- API proxy
- Available