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:
| Way | Takes | Hires show in Linear as |
|---|---|---|
| An OAuth app, acting as each hire | Five minutes | Themselves: each hire's name and picture |
| A personal API key | A minute | You, 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.
- In Linear, open Settings → API → OAuth applications and click Create new.
- Application name:
Roster. Add a picture if you like. - Callback URLs: copy the address Roster shows on the Linear connection (it ends in
/api/integrations/linear/oauth/callback) and paste it here. - Save, then copy the Client ID and Client secret.
2. Connect it in Roster
- Open Integrations → Tools, click Add a tool, then Linear.
- Leave API key empty. Paste the OAuth app client ID and OAuth app client secret. Click Connect.
- On the new connection, click Connect with Linear.

The Linear connection, ready to connect - 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 - 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
| Scope | Why |
|---|---|
read | Search and read issues, teams and workflow states |
write | Open 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.
- Open Linear's Security & access settings (the form in Roster links there too) and, under Personal API keys, click New API key.
- Name it
Roster. If Linear asks for permissions, choose Read, Write, Create issues and Create comments, and the teams hires work in. - Copy the key. It starts with
lin_api_; Roster tells you at once if what you paste doesn't. - 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.

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 can | Needs |
|---|---|
| Search issues; read one with its comments | Read |
| Open an issue | Read and write |
| Comment on an issue | Read and write |
| Move an issue to another state | Read 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:
readwrite
When making a key, use these permissions from the connection guide:
- Read
- Write
- Create issues
- Create comments
Connection fields
| Field | What to provide |
|---|---|
API keyapiKeyOptional · sealed secret | A personal API key: hires' work shows as you. Or leave it empty and use an OAuth app below. |
OAuth app client IDclientIdOptional | From a Linear OAuth application (Settings → API → OAuth applications), so each hire shows as itself. Then use Connect with Linear. |
OAuth app client secretclientSecretOptional · 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.
| Field | What to provide |
|---|---|
TeamsteamsOptional | 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.
| Argument | Type | Details |
|---|---|---|
queryRequired | string | See 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.
| Argument | Type | Details |
|---|---|---|
idRequired | string | See 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.
| Argument | Type | Details |
|---|---|---|
teamRequired | string | team key, e.g. ENG |
titleRequired | string | See input schema below. |
descriptionOptional | string | See 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.
| Argument | Type | Details |
|---|---|---|
idRequired | string | See input schema below. |
bodyRequired | string | See 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.
| Argument | Type | Details |
|---|---|---|
idRequired | string | See input schema below. |
stateRequired | string | See 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.