linear.api.* operation is listed below with parameter shapes and return types from the plugin Zod schemas.
New to Corsair? See API access, authentication, and error handling.
Comments
create
comments.create
Post a comment on an issue
Risk: write
await corsair.linear.api.comments.create({});
| Name | Type | Required | Description |
|---|---|---|---|
issueId | string | Yes | — |
body | string | Yes | — |
parentId | string | No | — |
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
body | string | Yes | — |
issue | object | Yes | — |
user | object | Yes | — |
parent | object | No | — |
editedAt | Date | No | — |
createdAt | Date | No | — |
updatedAt | Date | No | — |
archivedAt | Date | No | — |
issue full type
issue full type
{
id: string
}
user full type
user full type
{
id: string,
name: string,
displayName: string,
email?: string | null
}
parent full type
parent full type
{
id: string
}
delete
comments.delete
Delete a comment [DESTRUCTIVE]
Risk: destructive · Irreversible
await corsair.linear.api.comments.delete({});
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
boolean
list
comments.list
List comments on an issue
Risk: read
await corsair.linear.api.comments.list({});
| Name | Type | Required | Description |
|---|---|---|---|
issueId | string | Yes | — |
first | number | No | — |
after | string | No | — |
| Name | Type | Required | Description |
|---|---|---|---|
nodes | object[] | Yes | — |
pageInfo | object | Yes | — |
nodes full type
nodes full type
{
id: string,
body: string,
issue: {
id: string,
title: string,
description?: string | null,
priority: 0 | 1 | 2 | 3 | 4,
estimate?: number | null,
sortOrder: number,
number: number,
identifier: string,
url: string,
state: {
id: string,
name: string,
type: backlog | unstarted | started | completed | canceled,
color: string,
position: number,
description?: string | null,
team: {
id: string,
name: string,
key: string,
description?: string | null,
icon?: string | null,
color?: string | null,
private: boolean,
createdAt?: Date | null,
updatedAt?: Date | null,
archivedAt?: Date | null
},
createdAt?: Date | null,
updatedAt?: Date | null
},
team: {
id: string,
name: string,
key: string,
description?: string | null,
icon?: string | null,
color?: string | null,
private: boolean,
createdAt?: Date | null,
updatedAt?: Date | null,
archivedAt?: Date | null
},
assignee?: {
id: string,
name: string,
email?: string | null,
displayName: string,
avatarUrl?: string | null,
active: boolean,
admin: boolean,
createdAt?: Date | null,
updatedAt?: Date | null
} | null,
creator: {
id: string,
name: string,
email?: string | null,
displayName: string,
avatarUrl?: string | null,
active: boolean,
admin: boolean,
createdAt?: Date | null,
updatedAt?: Date | null
},
project?: {
id: string,
name: string,
description?: string | null,
icon?: string | null,
color?: string | null,
state: backlog | planned | started | paused | completed | canceled,
priority: number,
sortOrder: number,
startDate?: Date | null,
targetDate?: Date | null,
completedAt?: Date | null,
canceledAt?: Date | null,
lead?: {
id: string,
name: string,
email?: string | null,
displayName: string,
avatarUrl?: string | null,
active: boolean,
admin: boolean,
createdAt?: Date | null,
updatedAt?: Date | null
} | null,
teams: {
id: string,
name: string,
key: string,
description?: string | null,
icon?: string | null,
color?: string | null,
private: boolean,
createdAt?: Date | null,
updatedAt?: Date | null,
archivedAt?: Date | null
}[],
createdAt?: Date | null,
updatedAt?: Date | null,
archivedAt?: Date | null
} | null,
cycle?: {
id: string,
number: number,
name?: string | null,
description?: string | null,
startsAt?: Date | null,
endsAt?: Date | null,
completedAt?: Date | null,
team: {
id: string,
name: string,
key: string,
description?: string | null,
icon?: string | null,
color?: string | null,
private: boolean,
createdAt?: Date | null,
updatedAt?: Date | null,
archivedAt?: Date | null
},
createdAt?: Date | null,
updatedAt?: Date | null,
archivedAt?: Date | null
} | null,
labels: {
id: string,
name: string,
description?: string | null,
color: string,
team?: {
id: string,
name: string,
key: string,
description?: string | null,
icon?: string | null,
color?: string | null,
private: boolean,
createdAt?: Date | null,
updatedAt?: Date | null,
archivedAt?: Date | null
} | null,
createdAt?: Date | null,
updatedAt?: Date | null,
parent: lazy
}[],
subscribers: {
id: string,
name: string,
email?: string | null,
displayName: string,
avatarUrl?: string | null,
active: boolean,
admin: boolean,
createdAt?: Date | null,
updatedAt?: Date | null
}[],
dueDate?: Date | null,
startedAt?: Date | null,
completedAt?: Date | null,
canceledAt?: Date | null,
triagedAt?: Date | null,
snoozedUntilAt?: Date | null,
createdAt?: Date | null,
updatedAt?: Date | null,
archivedAt?: Date | null,
parent: lazy
},
user: {
id: string,
name: string,
email?: string | null,
displayName: string,
avatarUrl?: string | null,
active: boolean,
admin: boolean,
createdAt?: Date | null,
updatedAt?: Date | null
},
editedAt?: Date | null,
createdAt?: Date | null,
updatedAt?: Date | null,
archivedAt?: Date | null,
parent: lazy
}[]
pageInfo full type
pageInfo full type
{
hasNextPage: boolean,
hasPreviousPage: boolean,
startCursor?: string | null,
endCursor?: string | null
}
update
comments.update
Update a comment
Risk: write
await corsair.linear.api.comments.update({});
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
input | object | Yes | — |
input full type
input full type
{
body?: string
}
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
body | string | Yes | — |
issue | object | Yes | — |
user | object | Yes | — |
parent | object | No | — |
editedAt | Date | No | — |
createdAt | Date | No | — |
updatedAt | Date | No | — |
archivedAt | Date | No | — |
issue full type
issue full type
{
id: string
}
user full type
user full type
{
id: string,
name: string,
displayName: string,
email?: string | null
}
parent full type
parent full type
{
id: string
}
Issues
create
issues.create
Create a new issue
Risk: write
await corsair.linear.api.issues.create({});
| Name | Type | Required | Description |
|---|---|---|---|
title | string | Yes | — |
description | string | No | — |
teamId | string | Yes | — |
assigneeId | string | No | — |
priority | 0 | 1 | 2 | 3 | 4 | No | — |
estimate | number | No | — |
stateId | string | No | — |
projectId | string | No | — |
cycleId | string | No | — |
parentId | string | No | — |
labelIds | string[] | No | — |
subscriberIds | string[] | No | — |
dueDate | string | No | — |
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
title | string | No | — |
description | string | No | — |
priority | 0 | 1 | 2 | 3 | 4 | No | — |
estimate | number | No | — |
sortOrder | number | No | — |
number | number | No | — |
identifier | string | No | — |
url | string | No | — |
state | object | No | — |
team | object | No | — |
assignee | object | No | — |
creator | object | No | — |
createdAt | Date | No | — |
updatedAt | Date | No | — |
state full type
state full type
{
id: string,
name: string,
type: backlog | unstarted | started | completed | canceled,
color?: string,
position?: number
}
team full type
team full type
{
id: string,
name: string,
key: string
}
assignee full type
assignee full type
{
id: string,
name: string,
displayName: string,
email?: string | null
}
creator full type
creator full type
{
id: string,
name: string,
displayName: string,
email?: string | null
}
delete
issues.delete
Permanently delete an issue [DESTRUCTIVE · IRREVERSIBLE]
Risk: destructive · Irreversible
await corsair.linear.api.issues.delete({});
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
boolean
get
issues.get
Get a specific issue
Risk: read
await corsair.linear.api.issues.get({});
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
title | string | Yes | — |
description | string | No | — |
priority | 0 | 1 | 2 | 3 | 4 | Yes | — |
estimate | number | No | — |
sortOrder | number | Yes | — |
number | number | Yes | — |
identifier | string | Yes | — |
url | string | Yes | — |
state | object | Yes | — |
team | object | Yes | — |
assignee | object | No | — |
creator | object | Yes | — |
project | object | No | — |
cycle | object | No | — |
labels | object | No | — |
subscribers | object | No | — |
dueDate | Date | No | — |
startedAt | Date | No | — |
completedAt | Date | No | — |
canceledAt | Date | No | — |
triagedAt | Date | No | — |
snoozedUntilAt | Date | No | — |
createdAt | Date | No | — |
updatedAt | Date | No | — |
archivedAt | Date | No | — |
parent | lazy | Yes | — |
state full type
state full type
{
id: string,
name: string,
type: backlog | unstarted | started | completed | canceled,
color?: string,
position?: number
}
team full type
team full type
{
id: string,
name: string,
key: string
}
assignee full type
assignee full type
{
id: string,
name: string,
displayName: string,
email?: string | null
}
creator full type
creator full type
{
id: string,
name: string,
displayName: string,
email?: string | null
}
project full type
project full type
{
id: string,
name: string,
state: backlog | planned | started | paused | completed | canceled
}
cycle full type
cycle full type
{
id: string,
number: number,
name?: string | null
}
labels full type
labels full type
{
nodes: {
id: string,
name: string,
color: string
}[]
}
subscribers full type
subscribers full type
{
nodes: {
id: string,
name: string,
displayName: string,
email?: string | null
}[]
}
list
issues.list
List issues in a team
Risk: read
await corsair.linear.api.issues.list({});
| Name | Type | Required | Description |
|---|---|---|---|
teamId | string | No | — |
first | number | No | — |
after | string | No | — |
| Name | Type | Required | Description |
|---|---|---|---|
nodes | object[] | Yes | — |
pageInfo | object | Yes | — |
nodes full type
nodes full type
{
id: string,
title: string,
description?: string | null,
priority: 0 | 1 | 2 | 3 | 4,
estimate?: number | null,
sortOrder: number,
number: number,
identifier: string,
url: string,
state: {
id: string,
name: string,
type: backlog | unstarted | started | completed | canceled,
color?: string,
position?: number
},
team: {
id: string,
name: string,
key: string
},
assignee?: {
id: string,
name: string,
displayName: string,
email?: string | null
} | null,
creator: {
id: string,
name: string,
displayName: string,
email?: string | null
},
project?: {
id: string,
name: string,
state: backlog | planned | started | paused | completed | canceled
} | null,
cycle?: {
id: string,
number: number,
name?: string | null
} | null,
labels?: {
nodes: {
id: string,
name: string,
color: string
}[]
} | null,
subscribers?: {
nodes: {
id: string,
name: string,
displayName: string,
email?: string | null
}[]
} | null,
dueDate?: Date | null,
startedAt?: Date | null,
completedAt?: Date | null,
canceledAt?: Date | null,
triagedAt?: Date | null,
snoozedUntilAt?: Date | null,
createdAt?: Date | null,
updatedAt?: Date | null,
archivedAt?: Date | null,
parent: lazy
}[]
pageInfo full type
pageInfo full type
{
hasNextPage: boolean,
hasPreviousPage: boolean,
startCursor?: string | null,
endCursor?: string | null
}
update
issues.update
Update an existing issue
Risk: write
await corsair.linear.api.issues.update({});
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
input | object | Yes | — |
input full type
input full type
{
title?: string,
description?: string,
assigneeId?: string,
priority?: 0 | 1 | 2 | 3 | 4,
estimate?: number,
stateId?: string,
projectId?: string,
cycleId?: string,
parentId?: string,
labelIds?: string[],
subscriberIds?: string[],
dueDate?: string
}
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
title | string | No | — |
description | string | No | — |
priority | 0 | 1 | 2 | 3 | 4 | No | — |
estimate | number | No | — |
sortOrder | number | No | — |
number | number | No | — |
identifier | string | No | — |
url | string | No | — |
state | object | No | — |
team | object | No | — |
assignee | object | No | — |
creator | object | No | — |
createdAt | Date | No | — |
updatedAt | Date | No | — |
state full type
state full type
{
id: string,
name: string,
type: backlog | unstarted | started | completed | canceled,
color?: string,
position?: number
}
team full type
team full type
{
id: string,
name: string,
key: string
}
assignee full type
assignee full type
{
id: string,
name: string,
displayName: string,
email?: string | null
}
creator full type
creator full type
{
id: string,
name: string,
displayName: string,
email?: string | null
}
Projects
create
projects.create
Create a new project
Risk: write
await corsair.linear.api.projects.create({});
| Name | Type | Required | Description |
|---|---|---|---|
name | string | Yes | — |
description | string | No | — |
icon | string | No | — |
color | string | No | — |
teamIds | string[] | Yes | — |
leadId | string | No | — |
state | planned | started | paused | completed | canceled | No | — |
priority | number | No | — |
startDate | string | No | — |
targetDate | string | No | — |
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
name | string | Yes | — |
description | string | No | — |
icon | string | No | — |
color | string | No | — |
state | backlog | planned | started | paused | completed | canceled | Yes | — |
priority | number | Yes | — |
sortOrder | number | No | — |
startDate | Date | No | — |
targetDate | Date | No | — |
completedAt | Date | No | — |
canceledAt | Date | No | — |
lead | object | No | — |
teams | object | Yes | — |
createdAt | Date | No | — |
updatedAt | Date | No | — |
archivedAt | Date | No | — |
lead full type
lead full type
{
id: string,
name: string,
displayName: string,
email?: string | null
}
teams full type
teams full type
{
nodes: {
id: string,
name: string,
key: string
}[]
}
delete
projects.delete
Permanently delete a project [DESTRUCTIVE · IRREVERSIBLE]
Risk: destructive · Irreversible
await corsair.linear.api.projects.delete({});
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
boolean
get
projects.get
Get a specific project
Risk: read
await corsair.linear.api.projects.get({});
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
name | string | Yes | — |
description | string | No | — |
icon | string | No | — |
color | string | No | — |
state | backlog | planned | started | paused | completed | canceled | Yes | — |
priority | number | Yes | — |
sortOrder | number | Yes | — |
startDate | Date | No | — |
targetDate | Date | No | — |
completedAt | Date | No | — |
canceledAt | Date | No | — |
lead | object | No | — |
teams | object | Yes | — |
createdAt | Date | No | — |
updatedAt | Date | No | — |
lead full type
lead full type
{
id: string,
name: string,
displayName: string,
email?: string | null
}
teams full type
teams full type
{
nodes: {
id: string,
name: string,
key: string
}[]
}
list
projects.list
List projects in a team
Risk: read
await corsair.linear.api.projects.list({});
| Name | Type | Required | Description |
|---|---|---|---|
first | number | No | — |
after | string | No | — |
| Name | Type | Required | Description |
|---|---|---|---|
nodes | object[] | Yes | — |
pageInfo | object | Yes | — |
nodes full type
nodes full type
{
id: string,
name: string,
description?: string | null,
icon?: string | null,
color?: string | null,
state: backlog | planned | started | paused | completed | canceled,
priority: number,
sortOrder: number,
startDate?: Date | null,
targetDate?: Date | null,
completedAt?: Date | null,
canceledAt?: Date | null,
lead?: {
id: string,
name: string,
displayName: string,
email?: string | null
} | null,
teams: {
nodes: {
id: string,
name: string,
key: string
}[]
},
createdAt?: Date | null,
updatedAt?: Date | null
}[]
pageInfo full type
pageInfo full type
{
hasNextPage: boolean,
hasPreviousPage: boolean,
startCursor?: string | null,
endCursor?: string | null
}
update
projects.update
Update an existing project
Risk: write
await corsair.linear.api.projects.update({});
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
input | object | Yes | — |
input full type
input full type
{
name?: string,
description?: string,
icon?: string,
color?: string,
teamIds?: string[],
leadId?: string,
state?: planned | started | paused | completed | canceled,
priority?: number,
startDate?: string,
targetDate?: string
}
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
name | string | Yes | — |
description | string | No | — |
icon | string | No | — |
color | string | No | — |
state | backlog | planned | started | paused | completed | canceled | Yes | — |
priority | number | Yes | — |
sortOrder | number | No | — |
startDate | Date | No | — |
targetDate | Date | No | — |
completedAt | Date | No | — |
canceledAt | Date | No | — |
lead | object | No | — |
teams | object | No | — |
createdAt | Date | No | — |
updatedAt | Date | No | — |
archivedAt | Date | No | — |
lead full type
lead full type
{
id: string,
name: string,
displayName: string,
email?: string | null
}
teams full type
teams full type
{
nodes: {
id: string,
name: string,
key: string
}[]
}
Teams
get
teams.get
Get a specific team
Risk: read
await corsair.linear.api.teams.get({});
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
name | string | Yes | — |
key | string | Yes | — |
description | string | No | — |
icon | string | No | — |
color | string | No | — |
private | boolean | Yes | — |
createdAt | Date | No | — |
updatedAt | Date | No | — |
archivedAt | Date | No | — |
list
teams.list
List teams in the workspace
Risk: read
await corsair.linear.api.teams.list({});
| Name | Type | Required | Description |
|---|---|---|---|
first | number | No | — |
after | string | No | — |
| Name | Type | Required | Description |
|---|---|---|---|
nodes | object[] | Yes | — |
pageInfo | object | Yes | — |
nodes full type
nodes full type
{
id: string,
name: string,
key: string,
description?: string | null,
icon?: string | null,
color?: string | null,
private: boolean,
createdAt?: Date | null,
updatedAt?: Date | null,
archivedAt?: Date | null
}[]
pageInfo full type
pageInfo full type
{
hasNextPage: boolean,
hasPreviousPage: boolean,
startCursor?: string | null,
endCursor?: string | null
}
Users
get
users.get
Get a specific user
Risk: read
await corsair.linear.api.users.get({});
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | — |
name | string | Yes | — |
email | string | No | — |
displayName | string | Yes | — |
avatarUrl | string | No | — |
active | boolean | Yes | — |
admin | boolean | Yes | — |
createdAt | Date | No | — |
updatedAt | Date | No | — |
list
users.list
List users in the workspace
Risk: read
await corsair.linear.api.users.list({});
| Name | Type | Required | Description |
|---|---|---|---|
first | number | No | — |
after | string | No | — |
| Name | Type | Required | Description |
|---|---|---|---|
nodes | object[] | Yes | — |
pageInfo | object | Yes | — |
nodes full type
nodes full type
{
id: string,
name: string,
email?: string | null,
displayName: string,
avatarUrl?: string | null,
active: boolean,
admin: boolean,
createdAt?: Date | null,
updatedAt?: Date | null
}[]
pageInfo full type
pageInfo full type
{
hasNextPage: boolean,
hasPreviousPage: boolean,
startCursor?: string | null,
endCursor?: string | null
}