About Linear
Linear is the issue tracker many engineering and product teams use to plan and ship work. Serval’s Linear integration connects to your Linear workspace so Serval tickets and Linear issues stay in sync - with comments attributed to the original requester rather than a generic app identity - and ships 15 installable workflows for issue management and workspace lookups. All traffic goes to Linear’s GraphQL API (host: api.linear.app). Authentication: OAuth 2.0 - sign in with the Serval-managed Linear OAuth app (recommended), or bring your own Linear OAuth application. Both modes request only the read and write scopes, and tokens are refreshed automatically. Data sync: Two-way ticket syncing runs in the background once a Linear team is connected as a ticket channel: Serval regularly checks the team for new and updated issues and comments and pulls them in, and pushes Serval-side changes out to Linear as they happen. Workflow actions run on demand, calling Linear at the moment they run.What the Linear integration enables
| Capability | Description |
|---|---|
| Ticket syncing | Two-way sync between Serval tickets and Linear issues. Outbound, Serval creates and updates issues, adds comments (duplicates are automatically detected and reused), maps issue states, and applies SLA timestamps - and issues and comments show up in Linear attributed to the original requester. Inbound, Serval regularly checks the connected Linear team and pulls new and updated issues and comments into Serval. |
| Issue management workflows | 11 installable workflows: Get Linear Issue Info (by URL, key like ENG-123, or ID), Add Comment to Linear Issue, Add Label to Linear Issue, Archive Linear Issue, Delete Linear Issue, Clear Linear Issue Priority, Move Linear Issue to Different Cycle, Reopen Issue Based on Related Issues, Update Linear Issue Description (markdown supported), Update Linear Issue Title, and Update Linear Issue Project. Destructive workflows (archive, delete, clear priority, move cycle, reopen, update project) default to requiring installer approval. |
| Workspace workflows | 4 installable workflows: Get Linear User ID (email to user ID, including suspended users), Invite Linear User (requires installer approval), List Linear Labels (active global and team labels), and List Linear Teams. |
| Generic API access | Serval workflows can call any operation in Linear’s GraphQL API through the integration, with authentication injected automatically and cursor-based pagination supported. See Linear’s GraphQL API guide. |
| Access management (deprecated for new installs) | Built-in workflows that invite a user with the Admin or Member role, or suspend a user by email. Existing installs keep working, but this is deprecated for new installs - see Gotchas and troubleshooting below. |
Get your credentials
- Serval-managed OAuth app (recommended)
- Bring your own Linear OAuth app
Connect in Serval
Choose how to connect
Serval-managed: authorize on Linear
Your own app: fill in the form
- Callback URL - read-only, with a Copy button. Register this value on your Linear OAuth application before connecting.
- Display name (optional) - “A friendly name shown in Serval - you choose this.” Placeholder: “My Company Linear”.
- Client ID (required) - “Found on the application’s settings page in Linear, under OAuth.” Serval rejects a blank value with “clientId is required”.
- Client secret (required, hidden as you type) - “Linear only shows this once when the app is created - if you don’t have it, regenerate the secret on the application’s settings page.” Serval rejects a blank value with “clientSecret is required”.
Complete the authorization on Linear
Verifying the connection
The Linear integration runs three health checks:- Test Linear Connection - verifies the integration is connected and the OAuth token is valid by reading a single user from your workspace.
- Success: “Successfully authenticated with Linear (found [number] user)”
- Failure: “Unable to authenticate with Linear. Please verify the integration is still connected and the OAuth token has not been revoked.”
- List Linear Users - checks that Serval can read users from the connected workspace.
- Success: “Successfully listed Linear users (sample size: [number])”
- Failure: “Unable to list users from Linear. Please verify the integration has the read scope and has not been disconnected.”
- List Linear Teams - checks that Serval can read teams from the connected workspace.
- Success: “Successfully listed Linear teams (sample size: [number])”
- Failure: “Unable to list teams from Linear. Please verify the integration has the read scope and has not been disconnected.”
Gotchas and troubleshooting
Only the read and write scopes are granted - there is no admin scope
Only the read and write scopes are granted - there is no admin scope
Issues and comments are attributed to the original requester
Issues and comments are attributed to the original requester
Bring-your-own app: the Callback URL must match exactly, and the secret is shown once
Bring-your-own app: the Callback URL must match exactly, and the secret is shown once
"Invalid or expired OAuth state" during a bring-your-own connection
"Invalid or expired OAuth state" during a bring-your-own connection
Tokens refresh automatically - with one hard failure case
Tokens refresh automatically - with one hard failure case
SLA timestamps only apply to unstarted or started issues
SLA timestamps only apply to unstarted or started issues
"invalid_grant: authorization code is invalid" when testing your OAuth app outside Serval
"invalid_grant: authorization code is invalid" when testing your OAuth app outside Serval
Need help? Contact support@serval.com for assistance with your Linear integration.

