Skip to content
Docs
Project management

Linear

Let hires find, create, comment on and move issues, as themselves or with your API key.

Explore 5 actions and their permissionsExact inputs, sign-in scopes, access limits and approval rules.

With Linear, a hire can search issues, read one with its comments, open issues, comment, and move issues between states. There are two ways to connect it:

WayTakesHires show in Linear as
An OAuth app, acting as each hireFive minutesThemselves: each hire's name and picture
A personal API keyA minuteYou, the key's owner

As each hire

You make one Linear OAuth application for your workspace; Roster then acts as that application, and puts each hire's name and picture on what it creates. People see "Builder" on the comment, not you.

1. Make an OAuth application in Linear

You need to be a Linear admin.

  1. In Linear, open Settings → API → OAuth applications and click Create new.
  2. Application name: Roster. Add a picture if you like.
  3. Callback URLs: copy the address Roster shows on the Linear connection (it ends in /api/integrations/linear/oauth/callback) and paste it here.
  4. Save, then copy the Client ID and Client secret.

2. Connect it in Roster

  1. Open Integrations → Tools, click Add a tool, then Linear.
  2. Leave API key empty. Paste the OAuth app client ID and OAuth app client secret. Click Connect.
  3. On the new connection, click Connect with Linear.
    The Linear connection, ready to connect
    The Linear connection, ready to connect
  4. Linear asks you to authorise Roster for your Linear workspace. Click Authorize.
    Screenshot coming soonLinear's own authorise screen; capture by hand with a real Linear OAuth app.
    Linear asking to authorise Roster
  5. Back in Roster, the connection says Connected with Linear: issues and comments now show each hire's name and picture.

What Roster asks Linear for

ScopeWhy
readSearch and read issues, teams and workflow states
writeOpen issues, comment, and move issues between states (only for hires allowed to)

It acts as the application (actor=app), so nothing it does uses your own account.

A personal API key

The quick way: everything hires do shows as you.

  1. Open Linear's Security & access settings (the form in Roster links there too) and, under Personal API keys, click New API key.
  2. Name it Roster. If Linear asks for permissions, choose Read, Write, Create issues and Create comments, and the teams hires work in.
  3. Copy the key. It starts with lin_api_; Roster tells you at once if what you paste doesn't.
  4. In Roster, open Integrations → Tools → Add a tool → Linear, paste it into API key and click Connect. Roster asks Linear who the key belongs to, and the connection shows Connected as your Linear workspace. If Linear refuses the key, Roster says so and saves nothing.
Adding Linear
Adding Linear

What each hire may do

On the hire's Tools tab, add Linear (or click Change access on it) and choose:

  • Teams: team keys like ENG, one per line. The hire can only see and change issues in these teams. Empty means every team the key or app can reach.
  • What they can do: Read only (search and read) or Read and write (also create, comment and move).
They canNeeds
Search issues; read one with its commentsRead
Open an issueRead and write
Comment on an issueRead and write
Move an issue to another stateRead and write

A responsibility can also watch Linear: Roster checks for updated issues on its own, off the clock, and wakes the hire only when something changed.

Tools and permissions reference

This reference is built from the same definitions Roster uses to connect Linear and give hires access. It updates with each release.

Authentication and requested permissions

The account or app you connect sets the outer limit. Each hire's access can narrow it further. Connecting a tool gives it to no hire until you give access on that hire's Tools tab.

API key or access token

A personal API key: hires' work shows as you. Or leave it empty and use an OAuth app below.

OAuth 2.0

From a Linear OAuth application (Settings → API → OAuth applications), so each hire shows as itself. Then use Connect with Linear.

Requested scopes:

  • read
  • write

When making a key, use these permissions from the connection guide:

  • Read
  • Write
  • Create issues
  • Create comments

Connection fields

Linear connection fields
FieldWhat to provide
API key
apiKey
Optional · sealed secret
A personal API key: hires' work shows as you. Or leave it empty and use an OAuth app below.
OAuth app client ID
clientId
Optional
From a Linear OAuth application (Settings → API → OAuth applications), so each hire shows as itself. Then use Connect with Linear.
OAuth app client secret
clientSecret
Optional · sealed secret
Use the value for your account or connection.

Per-hire limits

Read-only hires receive only actions that read. Read-and-write access also allows actions that change things, where the connection itself permits them. An empty resource allowlist usually means everything the connected account can reach; each field below explains its meaning.

Linear per-hire limits
FieldWhat to provide
Teams
teams
Optional
Team keys like ENG. Leave empty for all teams.

Actions

5 actions: 2 only read and 3 change something. A read action may still need approval when your workspace or hire is set to ask. A locked approval requirement always applies.

5 of 5 actions. Open an action for its arguments and full input schema.

search_issuesRead only

Search issues by text. Returns up to 20 matches.

Approval: Uses your workspace and hire approval settings.

Arguments for search_issues
ArgumentTypeDetails
queryRequiredstringSee input schema below.
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "query"
  ]
}
get_issueRead only

An issue's description, status and latest comments.

Approval: Uses your workspace and hire approval settings.

Arguments for get_issue
ArgumentTypeDetails
idRequiredstringSee input schema below.
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9]+-\\d+$"
    }
  },
  "required": [
    "id"
  ]
}
create_issueRead and write

Create an issue in a team.

Approval: Uses your workspace and hire approval settings.

Arguments for create_issue
ArgumentTypeDetails
teamRequiredstringteam key, e.g. ENG
titleRequiredstringSee input schema below.
descriptionOptionalstringSee input schema below.Default: ""
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "team": {
      "type": "string",
      "minLength": 1,
      "description": "team key, e.g. ENG"
    },
    "title": {
      "type": "string",
      "minLength": 1
    },
    "description": {
      "default": "",
      "type": "string"
    }
  },
  "required": [
    "team",
    "title"
  ]
}
commentRead and write

Comment on an issue.

Approval: Uses your workspace and hire approval settings.

Arguments for comment
ArgumentTypeDetails
idRequiredstringSee input schema below.
bodyRequiredstringSee input schema below.
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9]+-\\d+$"
    },
    "body": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id",
    "body"
  ]
}
set_stateRead and write

Move an issue to a workflow state by name, e.g. In Progress or Done.

Approval: Uses your workspace and hire approval settings.

Arguments for set_state
ArgumentTypeDetails
idRequiredstringSee input schema below.
stateRequiredstringSee input schema below.
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9]+-\\d+$"
    },
    "state": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id",
    "state"
  ]
}

Watches and incoming events

  • This integration supports a responsibility that watches for changes. The guide above explains what it checks and how to limit it.
  • No incoming webhook handler is declared for this integration.

Limits and troubleshooting

  • Permission errors: check both the connected account's rights and the hire's resource and read/write limits.
  • Expired or revoked access: reconnect or replace the key on the connection.
  • Rate limits and unavailable services can interrupt work. The hire's timecard records the outcome.
  • The action schema describes accepted inputs. It does not grant additional access or bypass approvals.

Service documentation

On this page