Linear GraphQL — issue and comment lifecycle

This reference is readable without JavaScript. Download the GraphQL schema.

Runtime

/api/purple-suite/{instanceId}/contracts/pm/linear
[
  {
    "method": "post",
    "path": "/graphql",
    "operationId": "linearGraphql"
  }
]

Credentials

Coverage and limitations

{
  "documentScope": "bounded",
  "runtimeFidelity": "modeled",
  "counts": {
    "operations": 1,
    "roots": 17
  },
  "notes": [
    "17 of 630 official GraphQL roots are published, with explicitly narrowed fields and inputs. They execute against persistent per-instance state.",
    "Issues and comments support create/read/update/delete; issue archive/restore and Relay pagination are modeled. Teams, users and workflow states are a synthetic read-only directory.",
    "The complete official 630 root schema is pinned and inventoried in COVERAGE_LEDGER.md. Unimplemented ordinary roots are pending work, not claimed as external-service limitations; they are absent from this executable schema.",
    "OAuth grants, projects, cycles, labels, filters, subscriptions, uploads and integrations are not implemented. This is not complete Linear compatibility."
  ]
}

GraphQL operations and types

Send a JSON object containing query, variables and optional operationName to the declared GraphQL runtime. Check the errors field even when the HTTP response is successful. Operation templates are schema examples; replace placeholder variables with values from the instance.

query issue

One specific issue, looked up by its unique identifier.

issue(id: String!): Issue!

Runtime availability: core.

Arguments

[
  {
    "name": "id",
    "type": "String!",
    "description": "The identifier of the issue to retrieve.",
    "references": [
      "String"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

query Issue($id: String!) {
  issue(id: $id) { archivedAt createdAt description }
}

Variables

{
  "id": ""
}

query issues

All issues. Returns a paginated list of issues visible to the authenticated user. Can be filtered by various criteria including team, assignee, state, labels, project, and cycle.

issues(after: String, before: String, first: Int, includeArchived: Boolean, last: Int, orderBy: PaginationOrderBy): IssueConnection!

Runtime availability: core.

Arguments

[
  {
    "name": "after",
    "type": "String",
    "description": "A cursor to be used with first for forward pagination",
    "references": [
      "String"
    ]
  },
  {
    "name": "before",
    "type": "String",
    "description": "A cursor to be used with last for backward pagination.",
    "references": [
      "String"
    ]
  },
  {
    "name": "first",
    "type": "Int",
    "description": "The number of items to forward paginate (used with after). Defaults to 50.",
    "references": [
      "Int"
    ]
  },
  {
    "name": "includeArchived",
    "type": "Boolean",
    "description": "Should archived resources be included (default: false)",
    "references": [
      "Boolean"
    ]
  },
  {
    "name": "last",
    "type": "Int",
    "description": "The number of items to backward paginate (used with before). Defaults to 50.",
    "references": [
      "Int"
    ]
  },
  {
    "name": "orderBy",
    "type": "PaginationOrderBy",
    "description": "By which field should the pagination order by. Available options are createdAt (default) and updatedAt.",
    "references": [
      "PaginationOrderBy"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

query Issues {
  issues { __typename }
}

Variables

{}

query team

Fetches a specific team by its ID.

team(id: String!): Team!

Runtime availability: core.

Arguments

[
  {
    "name": "id",
    "type": "String!",
    "description": "The identifier of the team to retrieve.",
    "references": [
      "String"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

query Team($id: String!) {
  team(id: $id) { createdAt description id }
}

Variables

{
  "id": ""
}

query teams

All teams whose issues the user can access. This includes public teams and private teams the user is a member of. This may differ from `administrableTeams`, which returns teams whose settings the user can change but whose issues they don't necessarily have access to.

teams(after: String, before: String, first: Int, includeArchived: Boolean, last: Int, orderBy: PaginationOrderBy): TeamConnection!

Runtime availability: core.

Arguments

[
  {
    "name": "after",
    "type": "String",
    "description": "A cursor to be used with first for forward pagination",
    "references": [
      "String"
    ]
  },
  {
    "name": "before",
    "type": "String",
    "description": "A cursor to be used with last for backward pagination.",
    "references": [
      "String"
    ]
  },
  {
    "name": "first",
    "type": "Int",
    "description": "The number of items to forward paginate (used with after). Defaults to 50.",
    "references": [
      "Int"
    ]
  },
  {
    "name": "includeArchived",
    "type": "Boolean",
    "description": "Should archived resources be included (default: false)",
    "references": [
      "Boolean"
    ]
  },
  {
    "name": "last",
    "type": "Int",
    "description": "The number of items to backward paginate (used with before). Defaults to 50.",
    "references": [
      "Int"
    ]
  },
  {
    "name": "orderBy",
    "type": "PaginationOrderBy",
    "description": "By which field should the pagination order by. Available options are createdAt (default) and updatedAt.",
    "references": [
      "PaginationOrderBy"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

query Teams {
  teams { __typename }
}

Variables

{}

query user

Fetches a specific user by their ID.

user(id: String!): User!

Runtime availability: core.

Arguments

[
  {
    "name": "id",
    "type": "String!",
    "description": "The identifier of the user to retrieve. To retrieve the authenticated user, use `viewer` query.",
    "references": [
      "String"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

query User($id: String!) {
  user(id: $id) { active avatarUrl createdAt }
}

Variables

{
  "id": ""
}

query users

All users in the workspace. Supports filtering, sorting, and pagination.

users(after: String, before: String, first: Int, includeArchived: Boolean, last: Int, orderBy: PaginationOrderBy): UserConnection!

Runtime availability: core.

Arguments

[
  {
    "name": "after",
    "type": "String",
    "description": "A cursor to be used with first for forward pagination",
    "references": [
      "String"
    ]
  },
  {
    "name": "before",
    "type": "String",
    "description": "A cursor to be used with last for backward pagination.",
    "references": [
      "String"
    ]
  },
  {
    "name": "first",
    "type": "Int",
    "description": "The number of items to forward paginate (used with after). Defaults to 50.",
    "references": [
      "Int"
    ]
  },
  {
    "name": "includeArchived",
    "type": "Boolean",
    "description": "Should archived resources be included (default: false)",
    "references": [
      "Boolean"
    ]
  },
  {
    "name": "last",
    "type": "Int",
    "description": "The number of items to backward paginate (used with before). Defaults to 50.",
    "references": [
      "Int"
    ]
  },
  {
    "name": "orderBy",
    "type": "PaginationOrderBy",
    "description": "By which field should the pagination order by. Available options are createdAt (default) and updatedAt.",
    "references": [
      "PaginationOrderBy"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

query Users {
  users { __typename }
}

Variables

{}

query viewer

The currently authenticated user making the API request.

viewer: User!

Runtime availability: core.

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

query Viewer {
  viewer { active avatarUrl createdAt }
}

Variables

{}

query workflowState

One specific workflow state (issue status), looked up by its unique identifier.

workflowState(id: String!): WorkflowState!

Runtime availability: core.

Arguments

[
  {
    "name": "id",
    "type": "String!",
    "description": "The identifier of the workflow state to retrieve.",
    "references": [
      "String"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

query WorkflowState($id: String!) {
  workflowState(id: $id) { color createdAt id }
}

Variables

{
  "id": ""
}

query workflowStates

All issue workflow states (issue statuses). Returns a paginated list of workflow states visible to the authenticated user, across all teams they have access to.

workflowStates(after: String, before: String, first: Int, includeArchived: Boolean, last: Int, orderBy: PaginationOrderBy): WorkflowStateConnection!

Runtime availability: core.

Arguments

[
  {
    "name": "after",
    "type": "String",
    "description": "A cursor to be used with first for forward pagination",
    "references": [
      "String"
    ]
  },
  {
    "name": "before",
    "type": "String",
    "description": "A cursor to be used with last for backward pagination.",
    "references": [
      "String"
    ]
  },
  {
    "name": "first",
    "type": "Int",
    "description": "The number of items to forward paginate (used with after). Defaults to 50.",
    "references": [
      "Int"
    ]
  },
  {
    "name": "includeArchived",
    "type": "Boolean",
    "description": "Should archived resources be included (default: false)",
    "references": [
      "Boolean"
    ]
  },
  {
    "name": "last",
    "type": "Int",
    "description": "The number of items to backward paginate (used with before). Defaults to 50.",
    "references": [
      "Int"
    ]
  },
  {
    "name": "orderBy",
    "type": "PaginationOrderBy",
    "description": "By which field should the pagination order by. Available options are createdAt (default) and updatedAt.",
    "references": [
      "PaginationOrderBy"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

query WorkflowStates {
  workflowStates { __typename }
}

Variables

{}

mutation commentCreate

Creates a new comment.

commentCreate(input: CommentCreateInput!): CommentPayload!

Runtime availability: core.

Arguments

[
  {
    "name": "input",
    "type": "CommentCreateInput!",
    "description": "The comment object to create.",
    "references": [
      "CommentCreateInput"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

mutation CommentCreate($input: CommentCreateInput!) {
  commentCreate(input: $input) { lastSyncId success }
}

Variables

{
  "input": {}
}

mutation commentDelete

Deletes a comment.

commentDelete(id: String!): DeletePayload!

Runtime availability: core.

Arguments

[
  {
    "name": "id",
    "type": "String!",
    "description": "The identifier of the comment to delete.",
    "references": [
      "String"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

mutation CommentDelete($id: String!) {
  commentDelete(id: $id) { entityId lastSyncId success }
}

Variables

{
  "id": ""
}

mutation commentUpdate

Updates a comment.

commentUpdate(id: String!, input: CommentUpdateInput!): CommentPayload!

Runtime availability: core.

Arguments

[
  {
    "name": "id",
    "type": "String!",
    "description": "The identifier of the comment to update.",
    "references": [
      "String"
    ]
  },
  {
    "name": "input",
    "type": "CommentUpdateInput!",
    "description": "A partial comment object to update the comment with.",
    "references": [
      "CommentUpdateInput"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

mutation CommentUpdate($id: String!, $input: CommentUpdateInput!) {
  commentUpdate(id: $id, input: $input) { lastSyncId success }
}

Variables

{
  "id": "",
  "input": {}
}

mutation issueArchive

Archives an issue.

issueArchive(id: String!): IssueArchivePayload!

Runtime availability: core.

Arguments

[
  {
    "name": "id",
    "type": "String!",
    "description": "The identifier of the issue to archive.",
    "references": [
      "String"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

mutation IssueArchive($id: String!) {
  issueArchive(id: $id) { lastSyncId success }
}

Variables

{
  "id": ""
}

mutation issueCreate

Creates a new issue.

issueCreate(input: IssueCreateInput!): IssuePayload!

Runtime availability: core.

Arguments

[
  {
    "name": "input",
    "type": "IssueCreateInput!",
    "description": "The issue object to create.",
    "references": [
      "IssueCreateInput"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

mutation IssueCreate($input: IssueCreateInput!) {
  issueCreate(input: $input) { lastSyncId success }
}

Variables

{
  "input": {
    "teamId": ""
  }
}

mutation issueDelete

Deletes (trashes) an issue.

issueDelete(id: String!): IssueArchivePayload!

Runtime availability: core.

Arguments

[
  {
    "name": "id",
    "type": "String!",
    "description": "The identifier of the issue to delete.",
    "references": [
      "String"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

mutation IssueDelete($id: String!) {
  issueDelete(id: $id) { lastSyncId success }
}

Variables

{
  "id": ""
}

mutation issueUnarchive

Unarchives an issue.

issueUnarchive(id: String!): IssueArchivePayload!

Runtime availability: core.

Arguments

[
  {
    "name": "id",
    "type": "String!",
    "description": "The identifier of the issue to unarchive.",
    "references": [
      "String"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

mutation IssueUnarchive($id: String!) {
  issueUnarchive(id: $id) { lastSyncId success }
}

Variables

{
  "id": ""
}

mutation issueUpdate

Updates an issue.

issueUpdate(id: String!, input: IssueUpdateInput!): IssuePayload!

Runtime availability: core.

Arguments

[
  {
    "name": "id",
    "type": "String!",
    "description": "The identifier of the issue to update.",
    "references": [
      "String"
    ]
  },
  {
    "name": "input",
    "type": "IssueUpdateInput!",
    "description": "A partial issue object to update the issue with.",
    "references": [
      "IssueUpdateInput"
    ]
  }
]

Metadata

[
  {
    "label": "Execution",
    "value": "HTTP request"
  }
]

Request template

mutation IssueUpdate($id: String!, $input: IssueUpdateInput!) {
  issueUpdate(id: $id, input: $input) { lastSyncId success }
}

Variables

{
  "id": "",
  "input": {}
}

object Comment

A comment associated with an issue, project update, initiative update, document content, post, project, or initiative. Comments support rich text (ProseMirror), emoji reactions, and threaded replies via parentId. Comments can be created by workspace users or by external users through integrations (e.g., Slack, Intercom). Each comment belongs to exactly one parent entity.

Fields

[
  {
    "name": "body",
    "type": "String!",
    "description": "The comment content in markdown format. This is a derived representation of the canonical bodyData ProseMirror content.",
    "references": [
      "String"
    ]
  },
  {
    "name": "createdAt",
    "type": "DateTime!",
    "description": "The time at which the entity was created.",
    "references": [
      "DateTime"
    ]
  },
  {
    "name": "editedAt",
    "type": "DateTime",
    "description": "The time the comment was last edited by its author. Null if the comment has not been edited since creation.",
    "references": [
      "DateTime"
    ]
  },
  {
    "name": "id",
    "type": "ID!",
    "description": "The unique identifier of the entity.",
    "references": [
      "ID"
    ]
  },
  {
    "name": "issue",
    "type": "Issue",
    "description": "The issue that the comment is associated with. Null if the comment belongs to a different parent entity type.",
    "references": [
      "Issue"
    ]
  },
  {
    "name": "updatedAt",
    "type": "DateTime!",
    "description": "The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\n    been updated after creation.",
    "references": [
      "DateTime"
    ]
  },
  {
    "name": "user",
    "type": "User",
    "description": "The user who wrote the comment. Null for comments created by integrations or bots without a user association.",
    "references": [
      "User"
    ]
  }
]

object CommentConnection

Fields

[
  {
    "name": "edges",
    "type": "[CommentEdge!]!",
    "references": [
      "CommentEdge"
    ]
  },
  {
    "name": "nodes",
    "type": "[Comment!]!",
    "references": [
      "Comment"
    ]
  },
  {
    "name": "pageInfo",
    "type": "PageInfo!",
    "references": [
      "PageInfo"
    ]
  }
]

input CommentCreateInput

Input for creating a new comment.

Fields

[
  {
    "name": "body",
    "type": "String",
    "description": "The comment content in markdown format.",
    "references": [
      "String"
    ]
  },
  {
    "name": "id",
    "type": "String",
    "description": "The identifier in UUID v4 format. If none is provided, the backend will generate one.",
    "references": [
      "String"
    ]
  },
  {
    "name": "issueId",
    "type": "String",
    "description": "The issue to associate the comment with. Can be a UUID or issue identifier (e.g., 'LIN-123').",
    "references": [
      "String"
    ]
  }
]

object CommentEdge

Fields

[
  {
    "name": "cursor",
    "type": "String!",
    "description": "Used in `before` and `after` args",
    "references": [
      "String"
    ]
  },
  {
    "name": "node",
    "type": "Comment!",
    "references": [
      "Comment"
    ]
  }
]

object CommentPayload

The result of a comment mutation.

Fields

[
  {
    "name": "comment",
    "type": "Comment!",
    "description": "The comment that was created or updated.",
    "references": [
      "Comment"
    ]
  },
  {
    "name": "lastSyncId",
    "type": "Float!",
    "description": "The identifier of the last sync operation.",
    "references": [
      "Float"
    ]
  },
  {
    "name": "success",
    "type": "Boolean!",
    "description": "Whether the operation was successful.",
    "references": [
      "Boolean"
    ]
  }
]

input CommentUpdateInput

Input for updating an existing comment.

Fields

[
  {
    "name": "body",
    "type": "String",
    "description": "The comment content.",
    "references": [
      "String"
    ]
  }
]

scalar DateTime

Represents a date and time in ISO 8601 format. Accepts shortcuts like `2021` to represent midnight Fri Jan 01 2021. Also accepts ISO 8601 durations strings which are added to the current date to create the represented date (e.g '-P2W1D' represents the date that was two weeks and 1 day ago)

object DeletePayload

A generic payload return from entity deletion mutations.

Fields

[
  {
    "name": "entityId",
    "type": "String!",
    "description": "The identifier of the deleted entity.",
    "references": [
      "String"
    ]
  },
  {
    "name": "lastSyncId",
    "type": "Float!",
    "description": "The identifier of the last sync operation.",
    "references": [
      "Float"
    ]
  },
  {
    "name": "success",
    "type": "Boolean!",
    "description": "Whether the operation was successful.",
    "references": [
      "Boolean"
    ]
  }
]

object Issue

An issue is the core work item in Linear. Issues belong to a team, have a workflow status, can be assigned to users, carry a priority level, and can be organized into projects and cycles. Issues support sub-issues (parent-child hierarchy up to 10 levels deep), labels, due dates, estimates, and SLA tracking. They can also be linked to other issues via relations, attached to releases, and tracked through their full history of changes.

Fields

[
  {
    "name": "archivedAt",
    "type": "DateTime",
    "description": "The time at which the entity was archived. Null if the entity has not been archived.",
    "references": [
      "DateTime"
    ]
  },
  {
    "name": "assignee",
    "type": "User",
    "description": "The user to whom the issue is assigned. Null if the issue is unassigned.",
    "references": [
      "User"
    ]
  },
  {
    "name": "comments",
    "type": "CommentConnection!",
    "description": "Comments associated with the issue, including inline comments on the issue's description.",
    "arguments": [
      {
        "name": "after",
        "type": "String",
        "description": "A cursor to be used with first for forward pagination",
        "references": [
          "String"
        ]
      },
      {
        "name": "before",
        "type": "String",
        "description": "A cursor to be used with last for backward pagination.",
        "references": [
          "String"
        ]
      },
      {
        "name": "first",
        "type": "Int",
        "description": "The number of items to forward paginate (used with after). Defaults to 50.",
        "references": [
          "Int"
        ]
      },
      {
        "name": "includeArchived",
        "type": "Boolean",
        "description": "Should archived resources be included (default: false)",
        "references": [
          "Boolean"
        ]
      },
      {
        "name": "last",
        "type": "Int",
        "description": "The number of items to backward paginate (used with before). Defaults to 50.",
        "references": [
          "Int"
        ]
      },
      {
        "name": "orderBy",
        "type": "PaginationOrderBy",
        "description": "By which field should the pagination order by. Available options are createdAt (default) and updatedAt.",
        "references": [
          "PaginationOrderBy"
        ]
      }
    ],
    "references": [
      "CommentConnection",
      "String",
      "Int",
      "Boolean",
      "PaginationOrderBy"
    ]
  },
  {
    "name": "createdAt",
    "type": "DateTime!",
    "description": "The time at which the entity was created.",
    "references": [
      "DateTime"
    ]
  },
  {
    "name": "creator",
    "type": "User",
    "description": "The user who created the issue. Null if the creator's account has been deleted or if the issue was created by an integration or system process.",
    "references": [
      "User"
    ]
  },
  {
    "name": "description",
    "type": "String",
    "description": "The issue's description in markdown format.",
    "references": [
      "String"
    ]
  },
  {
    "name": "estimate",
    "type": "Float",
    "description": "The estimate of the complexity of the issue. The specific scale used depends on the team's estimation configuration (e.g., points, T-shirt sizes). Null if no estimate has been set.",
    "references": [
      "Float"
    ]
  },
  {
    "name": "id",
    "type": "ID!",
    "description": "The unique identifier of the entity.",
    "references": [
      "ID"
    ]
  },
  {
    "name": "identifier",
    "type": "String!",
    "description": "Issue's human readable identifier (e.g. ENG-123).",
    "references": [
      "String"
    ]
  },
  {
    "name": "number",
    "type": "Float!",
    "description": "The issue's unique number, scoped to the issue's team. Together with the team key, this forms the issue's human-readable identifier (e.g., ENG-123).",
    "references": [
      "Float"
    ]
  },
  {
    "name": "priority",
    "type": "Float!",
    "description": "The priority of the issue. 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low.",
    "references": [
      "Float"
    ]
  },
  {
    "name": "priorityLabel",
    "type": "String!",
    "description": "Label for the priority.",
    "references": [
      "String"
    ]
  },
  {
    "name": "state",
    "type": "WorkflowState!",
    "description": "The workflow state (issue status) that the issue is currently in. Workflow states represent the issue's progress through the team's workflow, such as Triage, Todo, In Progress, Done, or Canceled.",
    "references": [
      "WorkflowState"
    ]
  },
  {
    "name": "team",
    "type": "Team!",
    "description": "The team that the issue belongs to. Every issue must belong to exactly one team, which determines the available workflow states, labels, and other team-specific configuration.",
    "references": [
      "Team"
    ]
  },
  {
    "name": "title",
    "type": "String!",
    "description": "The issue's title. This is the primary human-readable summary of the work item.",
    "references": [
      "String"
    ]
  },
  {
    "name": "updatedAt",
    "type": "DateTime!",
    "description": "The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\n    been updated after creation.",
    "references": [
      "DateTime"
    ]
  }
]

object IssueArchivePayload

A generic payload return from entity archive mutations.

Fields

[
  {
    "name": "entity",
    "type": "Issue",
    "description": "The archived/unarchived entity. Null if entity was deleted.",
    "references": [
      "Issue"
    ]
  },
  {
    "name": "lastSyncId",
    "type": "Float!",
    "description": "The identifier of the last sync operation.",
    "references": [
      "Float"
    ]
  },
  {
    "name": "success",
    "type": "Boolean!",
    "description": "Whether the operation was successful.",
    "references": [
      "Boolean"
    ]
  }
]

object IssueConnection

Fields

[
  {
    "name": "edges",
    "type": "[IssueEdge!]!",
    "references": [
      "IssueEdge"
    ]
  },
  {
    "name": "nodes",
    "type": "[Issue!]!",
    "references": [
      "Issue"
    ]
  },
  {
    "name": "pageInfo",
    "type": "PageInfo!",
    "references": [
      "PageInfo"
    ]
  }
]

input IssueCreateInput

Input for creating a new issue. At minimum, a team must be specified. A title is required unless a template is provided. All other fields are optional and will use defaults from the team or template if not specified.

Fields

[
  {
    "name": "assigneeId",
    "type": "String",
    "description": "The identifier of the user to assign the issue to.",
    "references": [
      "String"
    ]
  },
  {
    "name": "description",
    "type": "String",
    "description": "The issue description in markdown format.",
    "references": [
      "String"
    ]
  },
  {
    "name": "estimate",
    "type": "Int",
    "description": "The estimated complexity of the issue.",
    "references": [
      "Int"
    ]
  },
  {
    "name": "id",
    "type": "String",
    "description": "The identifier in UUID v4 format. If none is provided, the backend will generate one.",
    "references": [
      "String"
    ]
  },
  {
    "name": "priority",
    "type": "Int",
    "description": "The priority of the issue. 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low.",
    "references": [
      "Int"
    ]
  },
  {
    "name": "stateId",
    "type": "String",
    "description": "The team state of the issue.",
    "references": [
      "String"
    ]
  },
  {
    "name": "teamId",
    "type": "String!",
    "description": "The identifier of the team associated with the issue.",
    "references": [
      "String"
    ]
  },
  {
    "name": "title",
    "type": "String",
    "description": "The title of the issue.",
    "references": [
      "String"
    ]
  }
]

object IssueEdge

Fields

[
  {
    "name": "cursor",
    "type": "String!",
    "description": "Used in `before` and `after` args",
    "references": [
      "String"
    ]
  },
  {
    "name": "node",
    "type": "Issue!",
    "references": [
      "Issue"
    ]
  }
]

object IssuePayload

The result of an issue mutation, containing the created or updated issue and a success indicator.

Fields

[
  {
    "name": "issue",
    "type": "Issue",
    "description": "The issue that was created or updated.",
    "references": [
      "Issue"
    ]
  },
  {
    "name": "lastSyncId",
    "type": "Float!",
    "description": "The identifier of the last sync operation.",
    "references": [
      "Float"
    ]
  },
  {
    "name": "success",
    "type": "Boolean!",
    "description": "Whether the operation was successful.",
    "references": [
      "Boolean"
    ]
  }
]

input IssueUpdateInput

Input for updating an existing issue. All fields are optional; only provided fields will be updated. Setting a field to null (where supported) will clear the value.

Fields

[
  {
    "name": "assigneeId",
    "type": "String",
    "description": "The identifier of the user to assign the issue to.",
    "references": [
      "String"
    ]
  },
  {
    "name": "description",
    "type": "String",
    "description": "The issue description in markdown format.",
    "references": [
      "String"
    ]
  },
  {
    "name": "estimate",
    "type": "Int",
    "description": "The estimated complexity of the issue.",
    "references": [
      "Int"
    ]
  },
  {
    "name": "priority",
    "type": "Int",
    "description": "The priority of the issue. 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low.",
    "references": [
      "Int"
    ]
  },
  {
    "name": "stateId",
    "type": "String",
    "description": "The team state of the issue.",
    "references": [
      "String"
    ]
  },
  {
    "name": "title",
    "type": "String",
    "description": "The issue title.",
    "references": [
      "String"
    ]
  }
]

object PageInfo

Fields

[
  {
    "name": "endCursor",
    "type": "String",
    "description": "Cursor representing the last result in the paginated results.",
    "references": [
      "String"
    ]
  },
  {
    "name": "hasNextPage",
    "type": "Boolean!",
    "description": "Indicates if there are more results when paginating forward.",
    "references": [
      "Boolean"
    ]
  },
  {
    "name": "hasPreviousPage",
    "type": "Boolean!",
    "description": "Indicates if there are more results when paginating backward.",
    "references": [
      "Boolean"
    ]
  },
  {
    "name": "startCursor",
    "type": "String",
    "description": "Cursor representing the first result in the paginated results.",
    "references": [
      "String"
    ]
  }
]

enum PaginationOrderBy

By which field should the pagination order by

Values

[
  {
    "name": "createdAt"
  },
  {
    "name": "updatedAt"
  }
]

object Team

A team is the primary organizational unit in Linear. Issues belong to teams, and each team has its own workflow states, cycles, labels, and settings. Teams can be public (visible to all workspace members), private (visible only to team members), or restricted (visible only within an enclosing private-team boundary). Teams can also have sub-teams that inherit settings from their parent.

Fields

[
  {
    "name": "createdAt",
    "type": "DateTime!",
    "description": "The time at which the entity was created.",
    "references": [
      "DateTime"
    ]
  },
  {
    "name": "description",
    "type": "String",
    "description": "The team's description.",
    "references": [
      "String"
    ]
  },
  {
    "name": "id",
    "type": "ID!",
    "description": "The unique identifier of the entity.",
    "references": [
      "ID"
    ]
  },
  {
    "name": "issues",
    "type": "IssueConnection!",
    "description": "Issues belonging to the team. Supports filtering and optional inclusion of sub-team issues.",
    "arguments": [
      {
        "name": "after",
        "type": "String",
        "description": "A cursor to be used with first for forward pagination",
        "references": [
          "String"
        ]
      },
      {
        "name": "before",
        "type": "String",
        "description": "A cursor to be used with last for backward pagination.",
        "references": [
          "String"
        ]
      },
      {
        "name": "first",
        "type": "Int",
        "description": "The number of items to forward paginate (used with after). Defaults to 50.",
        "references": [
          "Int"
        ]
      },
      {
        "name": "includeArchived",
        "type": "Boolean",
        "description": "Should archived resources be included (default: false)",
        "references": [
          "Boolean"
        ]
      },
      {
        "name": "last",
        "type": "Int",
        "description": "The number of items to backward paginate (used with before). Defaults to 50.",
        "references": [
          "Int"
        ]
      },
      {
        "name": "orderBy",
        "type": "PaginationOrderBy",
        "description": "By which field should the pagination order by. Available options are createdAt (default) and updatedAt.",
        "references": [
          "PaginationOrderBy"
        ]
      }
    ],
    "references": [
      "IssueConnection",
      "String",
      "Int",
      "Boolean",
      "PaginationOrderBy"
    ]
  },
  {
    "name": "key",
    "type": "String!",
    "description": "The team's unique key, used as a prefix in issue identifiers (e.g., 'ENG' in 'ENG-123') and in URLs.",
    "references": [
      "String"
    ]
  },
  {
    "name": "members",
    "type": "UserConnection!",
    "description": "Users who are members of this team. Supports filtering and pagination.",
    "arguments": [
      {
        "name": "after",
        "type": "String",
        "description": "A cursor to be used with first for forward pagination",
        "references": [
          "String"
        ]
      },
      {
        "name": "before",
        "type": "String",
        "description": "A cursor to be used with last for backward pagination.",
        "references": [
          "String"
        ]
      },
      {
        "name": "first",
        "type": "Int",
        "description": "The number of items to forward paginate (used with after). Defaults to 50.",
        "references": [
          "Int"
        ]
      },
      {
        "name": "includeArchived",
        "type": "Boolean",
        "description": "Should archived resources be included (default: false)",
        "references": [
          "Boolean"
        ]
      },
      {
        "name": "last",
        "type": "Int",
        "description": "The number of items to backward paginate (used with before). Defaults to 50.",
        "references": [
          "Int"
        ]
      },
      {
        "name": "orderBy",
        "type": "PaginationOrderBy",
        "description": "By which field should the pagination order by. Available options are createdAt (default) and updatedAt.",
        "references": [
          "PaginationOrderBy"
        ]
      }
    ],
    "references": [
      "UserConnection",
      "String",
      "Int",
      "Boolean",
      "PaginationOrderBy"
    ]
  },
  {
    "name": "name",
    "type": "String!",
    "description": "The team's name.",
    "references": [
      "String"
    ]
  },
  {
    "name": "states",
    "type": "WorkflowStateConnection!",
    "description": "The states that define the workflow associated with the team.",
    "arguments": [
      {
        "name": "after",
        "type": "String",
        "description": "A cursor to be used with first for forward pagination",
        "references": [
          "String"
        ]
      },
      {
        "name": "before",
        "type": "String",
        "description": "A cursor to be used with last for backward pagination.",
        "references": [
          "String"
        ]
      },
      {
        "name": "first",
        "type": "Int",
        "description": "The number of items to forward paginate (used with after). Defaults to 50.",
        "references": [
          "Int"
        ]
      },
      {
        "name": "includeArchived",
        "type": "Boolean",
        "description": "Should archived resources be included (default: false)",
        "references": [
          "Boolean"
        ]
      },
      {
        "name": "last",
        "type": "Int",
        "description": "The number of items to backward paginate (used with before). Defaults to 50.",
        "references": [
          "Int"
        ]
      },
      {
        "name": "orderBy",
        "type": "PaginationOrderBy",
        "description": "By which field should the pagination order by. Available options are createdAt (default) and updatedAt.",
        "references": [
          "PaginationOrderBy"
        ]
      }
    ],
    "references": [
      "WorkflowStateConnection",
      "String",
      "Int",
      "Boolean",
      "PaginationOrderBy"
    ]
  },
  {
    "name": "updatedAt",
    "type": "DateTime!",
    "description": "The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\n    been updated after creation.",
    "references": [
      "DateTime"
    ]
  }
]

object TeamConnection

Fields

[
  {
    "name": "edges",
    "type": "[TeamEdge!]!",
    "references": [
      "TeamEdge"
    ]
  },
  {
    "name": "nodes",
    "type": "[Team!]!",
    "references": [
      "Team"
    ]
  },
  {
    "name": "pageInfo",
    "type": "PageInfo!",
    "references": [
      "PageInfo"
    ]
  }
]

object TeamEdge

Fields

[
  {
    "name": "cursor",
    "type": "String!",
    "description": "Used in `before` and `after` args",
    "references": [
      "String"
    ]
  },
  {
    "name": "node",
    "type": "Team!",
    "references": [
      "Team"
    ]
  }
]

object User

A user that belongs to a workspace. Users can have different roles (admin, member, guest, or app) that determine their level of access. Users can be members of multiple teams, and can be active or deactivated. Guest users have limited access scoped to specific teams they are invited to.

Fields

[
  {
    "name": "active",
    "type": "Boolean!",
    "description": "Whether the user account is active or disabled (suspended).",
    "references": [
      "Boolean"
    ]
  },
  {
    "name": "avatarUrl",
    "type": "String",
    "description": "An URL to the user's avatar image.",
    "references": [
      "String"
    ]
  },
  {
    "name": "createdAt",
    "type": "DateTime!",
    "description": "The time at which the entity was created.",
    "references": [
      "DateTime"
    ]
  },
  {
    "name": "displayName",
    "type": "String!",
    "description": "The user's display (nick) name. Must be unique within the workspace.",
    "references": [
      "String"
    ]
  },
  {
    "name": "email",
    "type": "String!",
    "description": "The user's email address.",
    "references": [
      "String"
    ]
  },
  {
    "name": "id",
    "type": "ID!",
    "description": "The unique identifier of the entity.",
    "references": [
      "ID"
    ]
  },
  {
    "name": "name",
    "type": "String!",
    "description": "The user's full name.",
    "references": [
      "String"
    ]
  },
  {
    "name": "updatedAt",
    "type": "DateTime!",
    "description": "The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\n    been updated after creation.",
    "references": [
      "DateTime"
    ]
  }
]

object UserConnection

Fields

[
  {
    "name": "edges",
    "type": "[UserEdge!]!",
    "references": [
      "UserEdge"
    ]
  },
  {
    "name": "nodes",
    "type": "[User!]!",
    "references": [
      "User"
    ]
  },
  {
    "name": "pageInfo",
    "type": "PageInfo!",
    "references": [
      "PageInfo"
    ]
  }
]

object UserEdge

Fields

[
  {
    "name": "cursor",
    "type": "String!",
    "description": "Used in `before` and `after` args",
    "references": [
      "String"
    ]
  },
  {
    "name": "node",
    "type": "User!",
    "references": [
      "User"
    ]
  }
]

object WorkflowState

A state in a team's workflow, representing an issue status such as Triage, Backlog, Todo, In Progress, In Review, Done, or Canceled. Each team has its own set of workflow states that define the progression of issues through the team's process. Workflow states have a type that categorizes them (triage, backlog, unstarted, started, completed, canceled), a position that determines their display order, and a color for visual identification. States can be inherited from parent teams to sub-teams.

Fields

[
  {
    "name": "color",
    "type": "String!",
    "description": "The state's UI color as a HEX string.",
    "references": [
      "String"
    ]
  },
  {
    "name": "createdAt",
    "type": "DateTime!",
    "description": "The time at which the entity was created.",
    "references": [
      "DateTime"
    ]
  },
  {
    "name": "id",
    "type": "ID!",
    "description": "The unique identifier of the entity.",
    "references": [
      "ID"
    ]
  },
  {
    "name": "name",
    "type": "String!",
    "description": "The state's human-readable name (e.g., 'In Progress', 'Done', 'Backlog').",
    "references": [
      "String"
    ]
  },
  {
    "name": "position",
    "type": "Float!",
    "description": "The position of the state in the team's workflow. States are displayed in ascending order of position within their type group.",
    "references": [
      "Float"
    ]
  },
  {
    "name": "team",
    "type": "Team!",
    "description": "The team that this workflow state belongs to. Each team has its own set of workflow states.",
    "references": [
      "Team"
    ]
  },
  {
    "name": "type",
    "type": "String!",
    "description": "The type of the state. One of \"triage\", \"backlog\", \"unstarted\", \"started\", \"completed\", \"canceled\", \"duplicate\".",
    "references": [
      "String"
    ]
  },
  {
    "name": "updatedAt",
    "type": "DateTime!",
    "description": "The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\n    been updated after creation.",
    "references": [
      "DateTime"
    ]
  }
]

object WorkflowStateConnection

Fields

[
  {
    "name": "edges",
    "type": "[WorkflowStateEdge!]!",
    "references": [
      "WorkflowStateEdge"
    ]
  },
  {
    "name": "nodes",
    "type": "[WorkflowState!]!",
    "references": [
      "WorkflowState"
    ]
  },
  {
    "name": "pageInfo",
    "type": "PageInfo!",
    "references": [
      "PageInfo"
    ]
  }
]

object WorkflowStateEdge

Fields

[
  {
    "name": "cursor",
    "type": "String!",
    "description": "Used in `before` and `after` args",
    "references": [
      "String"
    ]
  },
  {
    "name": "node",
    "type": "WorkflowState!",
    "references": [
      "WorkflowState"
    ]
  }
]

directive @include

Directs the executor to include this field or fragment only when the `if` argument is true.

@include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

Arguments

[
  {
    "name": "if",
    "type": "Boolean!",
    "description": "Included when true.",
    "references": [
      "Boolean"
    ]
  }
]

directive @skip

Directs the executor to skip this field or fragment when the `if` argument is true.

@skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

Arguments

[
  {
    "name": "if",
    "type": "Boolean!",
    "description": "Skipped when true.",
    "references": [
      "Boolean"
    ]
  }
]

directive @deprecated

Marks an element of a GraphQL schema as no longer supported.

@deprecated(reason: String = "No longer supported") on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION | ENUM_VALUE

Arguments

[
  {
    "name": "reason",
    "type": "String",
    "description": "Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).",
    "defaultValue": "\"No longer supported\"",
    "references": [
      "String"
    ]
  }
]

directive @specifiedBy

Exposes a URL that specifies the behavior of this scalar.

@specifiedBy(url: String!) on SCALAR

Arguments

[
  {
    "name": "url",
    "type": "String!",
    "description": "The URL that specifies the behavior of this scalar.",
    "references": [
      "String"
    ]
  }
]

directive @oneOf

Indicates exactly one field must be supplied and this field must not be `null`.

@oneOf on INPUT_OBJECT
Complete GraphQL schema
"""
A comment associated with an issue, project update, initiative update, document content, post, project, or initiative. Comments support rich text (ProseMirror), emoji reactions, and threaded replies via parentId. Comments can be created by workspace users or by external users through integrations (e.g., Slack, Intercom). Each comment belongs to exactly one parent entity.
"""
type Comment {
  """
  The comment content in markdown format. This is a derived representation of the canonical bodyData ProseMirror content.
  """
  body: String!
  """The time at which the entity was created."""
  createdAt: DateTime!
  """
  The time the comment was last edited by its author. Null if the comment has not been edited since creation.
  """
  editedAt: DateTime
  """The unique identifier of the entity."""
  id: ID!
  """
  The issue that the comment is associated with. Null if the comment belongs to a different parent entity type.
  """
  issue: Issue
  """
  The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't
      been updated after creation.
  """
  updatedAt: DateTime!
  """
  The user who wrote the comment. Null for comments created by integrations or bots without a user association.
  """
  user: User
}

type CommentConnection {
  edges: [CommentEdge!]!
  nodes: [Comment!]!
  pageInfo: PageInfo!
}

"""Input for creating a new comment."""
input CommentCreateInput {
  """The comment content in markdown format."""
  body: String
  """
  The identifier in UUID v4 format. If none is provided, the backend will generate one.
  """
  id: String
  """
  The issue to associate the comment with. Can be a UUID or issue identifier (e.g., 'LIN-123').
  """
  issueId: String
}

type CommentEdge {
  """Used in `before` and `after` args"""
  cursor: String!
  node: Comment!
}

"""The result of a comment mutation."""
type CommentPayload {
  """The comment that was created or updated."""
  comment: Comment!
  """The identifier of the last sync operation."""
  lastSyncId: Float!
  """Whether the operation was successful."""
  success: Boolean!
}

"""Input for updating an existing comment."""
input CommentUpdateInput {
  """The comment content."""
  body: String
}

"""
Represents a date and time in ISO 8601 format. Accepts shortcuts like `2021` to represent midnight Fri Jan 01 2021. Also accepts ISO 8601 durations strings which are added to the current date to create the represented date (e.g '-P2W1D' represents the date that was two weeks and 1 day ago)
"""
scalar DateTime

"""A generic payload return from entity deletion mutations."""
type DeletePayload {
  """The identifier of the deleted entity."""
  entityId: String!
  """The identifier of the last sync operation."""
  lastSyncId: Float!
  """Whether the operation was successful."""
  success: Boolean!
}

"""
An issue is the core work item in Linear. Issues belong to a team, have a workflow status, can be assigned to users, carry a priority level, and can be organized into projects and cycles. Issues support sub-issues (parent-child hierarchy up to 10 levels deep), labels, due dates, estimates, and SLA tracking. They can also be linked to other issues via relations, attached to releases, and tracked through their full history of changes.
"""
type Issue {
  """
  The time at which the entity was archived. Null if the entity has not been archived.
  """
  archivedAt: DateTime
  """
  The user to whom the issue is assigned. Null if the issue is unassigned.
  """
  assignee: User
  """
  Comments associated with the issue, including inline comments on the issue's description.
  """
  comments(
    """A cursor to be used with first for forward pagination"""
    after: String
    """A cursor to be used with last for backward pagination."""
    before: String
    """
    The number of items to forward paginate (used with after). Defaults to 50.
    """
    first: Int
    """Should archived resources be included (default: false)"""
    includeArchived: Boolean
    """
    The number of items to backward paginate (used with before). Defaults to 50.
    """
    last: Int
    """
    By which field should the pagination order by. Available options are createdAt (default) and updatedAt.
    """
    orderBy: PaginationOrderBy
  ): CommentConnection!
  """The time at which the entity was created."""
  createdAt: DateTime!
  """
  The user who created the issue. Null if the creator's account has been deleted or if the issue was created by an integration or system process.
  """
  creator: User
  """The issue's description in markdown format."""
  description: String
  """
  The estimate of the complexity of the issue. The specific scale used depends on the team's estimation configuration (e.g., points, T-shirt sizes). Null if no estimate has been set.
  """
  estimate: Float
  """The unique identifier of the entity."""
  id: ID!
  """Issue's human readable identifier (e.g. ENG-123)."""
  identifier: String!
  """
  The issue's unique number, scoped to the issue's team. Together with the team key, this forms the issue's human-readable identifier (e.g., ENG-123).
  """
  number: Float!
  """
  The priority of the issue. 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low.
  """
  priority: Float!
  """Label for the priority."""
  priorityLabel: String!
  """
  The workflow state (issue status) that the issue is currently in. Workflow states represent the issue's progress through the team's workflow, such as Triage, Todo, In Progress, Done, or Canceled.
  """
  state: WorkflowState!
  """
  The team that the issue belongs to. Every issue must belong to exactly one team, which determines the available workflow states, labels, and other team-specific configuration.
  """
  team: Team!
  """
  The issue's title. This is the primary human-readable summary of the work item.
  """
  title: String!
  """
  The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't
      been updated after creation.
  """
  updatedAt: DateTime!
}

"""A generic payload return from entity archive mutations."""
type IssueArchivePayload {
  """The archived/unarchived entity. Null if entity was deleted."""
  entity: Issue
  """The identifier of the last sync operation."""
  lastSyncId: Float!
  """Whether the operation was successful."""
  success: Boolean!
}

type IssueConnection {
  edges: [IssueEdge!]!
  nodes: [Issue!]!
  pageInfo: PageInfo!
}

"""
Input for creating a new issue. At minimum, a team must be specified. A title is required unless a template is provided. All other fields are optional and will use defaults from the team or template if not specified.
"""
input IssueCreateInput {
  """The identifier of the user to assign the issue to."""
  assigneeId: String
  """The issue description in markdown format."""
  description: String
  """The estimated complexity of the issue."""
  estimate: Int
  """
  The identifier in UUID v4 format. If none is provided, the backend will generate one.
  """
  id: String
  """
  The priority of the issue. 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low.
  """
  priority: Int
  """The team state of the issue."""
  stateId: String
  """The identifier of the team associated with the issue."""
  teamId: String!
  """The title of the issue."""
  title: String
}

type IssueEdge {
  """Used in `before` and `after` args"""
  cursor: String!
  node: Issue!
}

"""
The result of an issue mutation, containing the created or updated issue and a success indicator.
"""
type IssuePayload {
  """The issue that was created or updated."""
  issue: Issue
  """The identifier of the last sync operation."""
  lastSyncId: Float!
  """Whether the operation was successful."""
  success: Boolean!
}

"""
Input for updating an existing issue. All fields are optional; only provided fields will be updated. Setting a field to null (where supported) will clear the value.
"""
input IssueUpdateInput {
  """The identifier of the user to assign the issue to."""
  assigneeId: String
  """The issue description in markdown format."""
  description: String
  """The estimated complexity of the issue."""
  estimate: Int
  """
  The priority of the issue. 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low.
  """
  priority: Int
  """The team state of the issue."""
  stateId: String
  """The issue title."""
  title: String
}

type Mutation {
  """Creates a new comment."""
  commentCreate(
    """The comment object to create."""
    input: CommentCreateInput!
  ): CommentPayload!
  """Deletes a comment."""
  commentDelete(
    """The identifier of the comment to delete."""
    id: String!
  ): DeletePayload!
  """Updates a comment."""
  commentUpdate(
    """The identifier of the comment to update."""
    id: String!
    """A partial comment object to update the comment with."""
    input: CommentUpdateInput!
  ): CommentPayload!
  """Archives an issue."""
  issueArchive(
    """The identifier of the issue to archive."""
    id: String!
  ): IssueArchivePayload!
  """Creates a new issue."""
  issueCreate(
    """The issue object to create."""
    input: IssueCreateInput!
  ): IssuePayload!
  """Deletes (trashes) an issue."""
  issueDelete(
    """The identifier of the issue to delete."""
    id: String!
  ): IssueArchivePayload!
  """Unarchives an issue."""
  issueUnarchive(
    """The identifier of the issue to unarchive."""
    id: String!
  ): IssueArchivePayload!
  """Updates an issue."""
  issueUpdate(
    """The identifier of the issue to update."""
    id: String!
    """A partial issue object to update the issue with."""
    input: IssueUpdateInput!
  ): IssuePayload!
}

type PageInfo {
  """Cursor representing the last result in the paginated results."""
  endCursor: String
  """Indicates if there are more results when paginating forward."""
  hasNextPage: Boolean!
  """Indicates if there are more results when paginating backward."""
  hasPreviousPage: Boolean!
  """Cursor representing the first result in the paginated results."""
  startCursor: String
}

"""By which field should the pagination order by"""
enum PaginationOrderBy {
  createdAt
  updatedAt
}

type Query {
  """One specific issue, looked up by its unique identifier."""
  issue(
    """The identifier of the issue to retrieve."""
    id: String!
  ): Issue!
  """
  All issues. Returns a paginated list of issues visible to the authenticated user. Can be filtered by various criteria including team, assignee, state, labels, project, and cycle.
  """
  issues(
    """A cursor to be used with first for forward pagination"""
    after: String
    """A cursor to be used with last for backward pagination."""
    before: String
    """
    The number of items to forward paginate (used with after). Defaults to 50.
    """
    first: Int
    """Should archived resources be included (default: false)"""
    includeArchived: Boolean
    """
    The number of items to backward paginate (used with before). Defaults to 50.
    """
    last: Int
    """
    By which field should the pagination order by. Available options are createdAt (default) and updatedAt.
    """
    orderBy: PaginationOrderBy
  ): IssueConnection!
  """Fetches a specific team by its ID."""
  team(
    """The identifier of the team to retrieve."""
    id: String!
  ): Team!
  """
  All teams whose issues the user can access. This includes public teams and private teams the user is a member of. This may differ from `administrableTeams`, which returns teams whose settings the user can change but whose issues they don't necessarily have access to.
  """
  teams(
    """A cursor to be used with first for forward pagination"""
    after: String
    """A cursor to be used with last for backward pagination."""
    before: String
    """
    The number of items to forward paginate (used with after). Defaults to 50.
    """
    first: Int
    """Should archived resources be included (default: false)"""
    includeArchived: Boolean
    """
    The number of items to backward paginate (used with before). Defaults to 50.
    """
    last: Int
    """
    By which field should the pagination order by. Available options are createdAt (default) and updatedAt.
    """
    orderBy: PaginationOrderBy
  ): TeamConnection!
  """Fetches a specific user by their ID."""
  user(
    """
    The identifier of the user to retrieve. To retrieve the authenticated user, use `viewer` query.
    """
    id: String!
  ): User!
  """
  All users in the workspace. Supports filtering, sorting, and pagination.
  """
  users(
    """A cursor to be used with first for forward pagination"""
    after: String
    """A cursor to be used with last for backward pagination."""
    before: String
    """
    The number of items to forward paginate (used with after). Defaults to 50.
    """
    first: Int
    """Should archived resources be included (default: false)"""
    includeArchived: Boolean
    """
    The number of items to backward paginate (used with before). Defaults to 50.
    """
    last: Int
    """
    By which field should the pagination order by. Available options are createdAt (default) and updatedAt.
    """
    orderBy: PaginationOrderBy
  ): UserConnection!
  """The currently authenticated user making the API request."""
  viewer: User!
  """
  One specific workflow state (issue status), looked up by its unique identifier.
  """
  workflowState(
    """The identifier of the workflow state to retrieve."""
    id: String!
  ): WorkflowState!
  """
  All issue workflow states (issue statuses). Returns a paginated list of workflow states visible to the authenticated user, across all teams they have access to.
  """
  workflowStates(
    """A cursor to be used with first for forward pagination"""
    after: String
    """A cursor to be used with last for backward pagination."""
    before: String
    """
    The number of items to forward paginate (used with after). Defaults to 50.
    """
    first: Int
    """Should archived resources be included (default: false)"""
    includeArchived: Boolean
    """
    The number of items to backward paginate (used with before). Defaults to 50.
    """
    last: Int
    """
    By which field should the pagination order by. Available options are createdAt (default) and updatedAt.
    """
    orderBy: PaginationOrderBy
  ): WorkflowStateConnection!
}

"""
A team is the primary organizational unit in Linear. Issues belong to teams, and each team has its own workflow states, cycles, labels, and settings. Teams can be public (visible to all workspace members), private (visible only to team members), or restricted (visible only within an enclosing private-team boundary). Teams can also have sub-teams that inherit settings from their parent.
"""
type Team {
  """The time at which the entity was created."""
  createdAt: DateTime!
  """The team's description."""
  description: String
  """The unique identifier of the entity."""
  id: ID!
  """
  Issues belonging to the team. Supports filtering and optional inclusion of sub-team issues.
  """
  issues(
    """A cursor to be used with first for forward pagination"""
    after: String
    """A cursor to be used with last for backward pagination."""
    before: String
    """
    The number of items to forward paginate (used with after). Defaults to 50.
    """
    first: Int
    """Should archived resources be included (default: false)"""
    includeArchived: Boolean
    """
    The number of items to backward paginate (used with before). Defaults to 50.
    """
    last: Int
    """
    By which field should the pagination order by. Available options are createdAt (default) and updatedAt.
    """
    orderBy: PaginationOrderBy
  ): IssueConnection!
  """
  The team's unique key, used as a prefix in issue identifiers (e.g., 'ENG' in 'ENG-123') and in URLs.
  """
  key: String!
  """Users who are members of this team. Supports filtering and pagination."""
  members(
    """A cursor to be used with first for forward pagination"""
    after: String
    """A cursor to be used with last for backward pagination."""
    before: String
    """
    The number of items to forward paginate (used with after). Defaults to 50.
    """
    first: Int
    """Should archived resources be included (default: false)"""
    includeArchived: Boolean
    """
    The number of items to backward paginate (used with before). Defaults to 50.
    """
    last: Int
    """
    By which field should the pagination order by. Available options are createdAt (default) and updatedAt.
    """
    orderBy: PaginationOrderBy
  ): UserConnection!
  """The team's name."""
  name: String!
  """The states that define the workflow associated with the team."""
  states(
    """A cursor to be used with first for forward pagination"""
    after: String
    """A cursor to be used with last for backward pagination."""
    before: String
    """
    The number of items to forward paginate (used with after). Defaults to 50.
    """
    first: Int
    """Should archived resources be included (default: false)"""
    includeArchived: Boolean
    """
    The number of items to backward paginate (used with before). Defaults to 50.
    """
    last: Int
    """
    By which field should the pagination order by. Available options are createdAt (default) and updatedAt.
    """
    orderBy: PaginationOrderBy
  ): WorkflowStateConnection!
  """
  The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't
      been updated after creation.
  """
  updatedAt: DateTime!
}

type TeamConnection {
  edges: [TeamEdge!]!
  nodes: [Team!]!
  pageInfo: PageInfo!
}

type TeamEdge {
  """Used in `before` and `after` args"""
  cursor: String!
  node: Team!
}

"""
A user that belongs to a workspace. Users can have different roles (admin, member, guest, or app) that determine their level of access. Users can be members of multiple teams, and can be active or deactivated. Guest users have limited access scoped to specific teams they are invited to.
"""
type User {
  """Whether the user account is active or disabled (suspended)."""
  active: Boolean!
  """An URL to the user's avatar image."""
  avatarUrl: String
  """The time at which the entity was created."""
  createdAt: DateTime!
  """The user's display (nick) name. Must be unique within the workspace."""
  displayName: String!
  """The user's email address."""
  email: String!
  """The unique identifier of the entity."""
  id: ID!
  """The user's full name."""
  name: String!
  """
  The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't
      been updated after creation.
  """
  updatedAt: DateTime!
}

type UserConnection {
  edges: [UserEdge!]!
  nodes: [User!]!
  pageInfo: PageInfo!
}

type UserEdge {
  """Used in `before` and `after` args"""
  cursor: String!
  node: User!
}

"""
A state in a team's workflow, representing an issue status such as Triage, Backlog, Todo, In Progress, In Review, Done, or Canceled. Each team has its own set of workflow states that define the progression of issues through the team's process. Workflow states have a type that categorizes them (triage, backlog, unstarted, started, completed, canceled), a position that determines their display order, and a color for visual identification. States can be inherited from parent teams to sub-teams.
"""
type WorkflowState {
  """The state's UI color as a HEX string."""
  color: String!
  """The time at which the entity was created."""
  createdAt: DateTime!
  """The unique identifier of the entity."""
  id: ID!
  """
  The state's human-readable name (e.g., 'In Progress', 'Done', 'Backlog').
  """
  name: String!
  """
  The position of the state in the team's workflow. States are displayed in ascending order of position within their type group.
  """
  position: Float!
  """
  The team that this workflow state belongs to. Each team has its own set of workflow states.
  """
  team: Team!
  """
  The type of the state. One of "triage", "backlog", "unstarted", "started", "completed", "canceled", "duplicate".
  """
  type: String!
  """
  The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't
      been updated after creation.
  """
  updatedAt: DateTime!
}

type WorkflowStateConnection {
  edges: [WorkflowStateEdge!]!
  nodes: [WorkflowState!]!
  pageInfo: PageInfo!
}

type WorkflowStateEdge {
  """Used in `before` and `after` args"""
  cursor: String!
  node: WorkflowState!
}
Interactive API explorer (requires JavaScript)