issueCreate), so every incident lands in your team’s backlog with the failure context and a link back to DevHelm.
Setup
Get your Linear API key and team ID
- In Linear, go to Settings → Security & access → Personal API keys
- Click Create API key, name it (e.g. “DevHelm”), and copy it immediately — Linear shows it only once
- Find the team ID (a UUID) for the team where issues should be created. The fastest way is
Cmd/Ctrl + K→ Copy model UUID while viewing the team. You can also query the API:
- (Optional) To attach a label, grab its label ID the same way (
Copy model UUIDon the label). The label must belong to the team you selected above.
Configuration
| Field | Description | Required |
|---|---|---|
apiKey | Linear personal API key (sent as the raw Authorization header — no Bearer prefix) | Yes |
teamId | UUID of the Linear team where issues are created | Yes |
labelId | Label ID attached to created issues; must belong to the selected team | No |
What gets created
Linear is a fire-and-forget channel: DevHelm creates a new issue for each incident event routed to it — it does not transition or reopen an existing issue. Each issue includes:- Title — incident severity and the affected monitor name
- Body — failure reason, last status code, check duration, and affected regions
- A View in DevHelm link back to the incident
Troubleshooting
Issues aren't being created
Issues aren't being created
- A personal API key inherits the permissions of the user who created it — confirm that user can create issues in the target team.
- Run
devhelm alert-channels test <id>to surface the exact Linear error. - Regenerate the key if it was revoked or scoped too narrowly.
Linear rejects the team ID
Linear rejects the team ID
teamId must be the team’s UUID (e.g. a1b2c3d4-...), not its short key like ENG. Use Cmd/Ctrl + K → Copy model UUID, or the teams GraphQL query above, to get the correct value.Label isn't applied
Label isn't applied
A label can only be attached to issues in the team that owns it. Make sure
labelId belongs to the same team as teamId — cross-team label IDs are rejected.