Skip to main content

Summary

This page explains the Linear integration at a glance and the two integration directions:
  • Outbound (Nota → Linear): Nota uses a Linear API key to read issues, users, teams, and labels, and to post comments and file issues from workflow runs.
  • Inbound (Linear → Nota): Linear sends webhook events (comments, issues created/updated) into Nota to trigger workflows and produce in-thread replies.
Includes the required identifiers, a setup checklist, testing steps, and common troubleshooting scenarios.

➿ Linear (team feature)

Connecting Linear has two directions:
  • Outbound (Nota → Linear) — Nota reads issues and posts comments / files issues. Needs an API key.
  • Inbound (Linear → Nota) — @nota mentions in Linear comments get an in-thread reply, and new / assigned issues can auto-run your workflows. Needs a dedicated Nota account and a webhook.
Set up outbound first, then inbound.
For the full experience — where replies post as Nota and teammates can @-mention it — create the dedicated Nota account in the Inbound section first, then use its API key for the outbound field below. Linear attributes every API action to whichever account owns the key.

Outbound — let Nota act on your workspace

Step 1 — Create the Linear API key

  1. Log in to your workspace at linear.app.
  2. Click your profile name (top-left) → Settings.
  3. Under Personal → Security & access, find Personal API keys.
  4. Click New API key, name it, and choose permissions.
  5. Click Create, then copy and save the key — Linear shows it only once. This is your Linear API Key.
Nota’s read tools (linearListIssues, linearSearchIssues, linearListTeams, …) work with a read-scoped key. But inbound @mention replies and issue-filing post comments/issues with this same key, so grant write access if you want those. Actions are attributed to the account that owns the key — create it as the dedicated Nota account (Inbound → Step 1) so replies appear under Nota.

Step 2 — Find your Team ID (the UUID)

Linear has two team identifiers and this field needs the UUID, not the short key:
  • Team key — the prefix in issue IDs, e.g. NTA in NTA-123. This is not what goes here.
  • Team UUID — a xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx string the Linear API requires. This is the value.
Entering the key produces teamId must be a UUID the moment Nota tries to file an issue (see Troubleshooting).
Get the UUID either way:
  • From the Linear API (needs only the key from Step 1):
    Copy the id (the UUID) of the team whose key matches yours. Linear’s Authorization header takes the raw key — no Bearer prefix.
  • From Nota chat (once the API key is saved in Step 3): ask “list my Linear teams” — Nota returns each team’s UUID, key, and name.

Step 3 — Configure Nota

Go to app.trynota.ai/integrations and click Linear Settings. Fill in: Click Update Settings — Nota uses it immediately, no redeploy needed. On save Nota also resolves and stores your Linear Organization ID automatically; that’s what routes inbound webhooks to your team later.
You’re done with outbound. In Nota chat, say “list my top 10 Linear issues” — you should see your issues. Then try “file a Linear ticket for the last failing run” — it should create an issue (this is the path that fails with teamId must be a UUID if Step 2 holds the key instead of the UUID).

Inbound — @nota mentions & issue events

For @nota mentions to work, Nota needs a real, mentionable Linear account. Teammates must be able to @-mention it, and Nota must be able to tell its own comments apart from users’ (so it never replies to itself).

Step 1 — Create a dedicated Nota account

  1. Create (or reuse) an email for the bot, e.g. nota@<your-domain>.
  2. In Linear → Settings → Members → Invite, invite that email to the workspace.
  3. Accept the invite from that inbox, set the display name to Nota, and note its username / handle — the exact text after @ when you mention it (if the @-menu shows @nota, the handle is nota).

Step 2 — Note the two Nota identities

Linear uses different identifiers for the two inbound features. Grab whichever you need: The bot user UUID (for assignment only) — Linear doesn’t show it in the UI:
Mention detection reads the Nota Bot Username (the handle in the comment text), not the UUID. The Nota Bot User ID (UUID) drives assignment detection only. You can set just the username for mentions, just the UUID for assignment, or both.

Step 3 — Create the webhook in Linear

  1. In Linear → Settings → API → Webhooks, click New webhook.
  2. Set the URL to:
  3. Under data-change events, enable:
  4. Create. Linear generates a Signing secretcopy it (you paste it into Nota next).
Unlike GitLab, you don’t invent this secret — Linear generates it on webhook creation, and Nota HMAC-verifies every event against it.

Step 4 — Configure Nota

Back in app.trynota.ai/integrationsLinear Settings, fill in: Click Update Settings.

Step 5 — Test it

Mention Nota from a different account. As yourself (not the Nota account), open a Linear issue, add a comment, and type the bot’s handle — @nota what does this issue cover?. Post it — Nota replies in-thread within a few seconds.Plain @nota text is detected; you don’t need the autocomplete chip. The @ must start the comment or follow a space (so an email like x@nota.com or a longer handle like @nota-bot is not treated as a mention).
Mention the bot from a human account, not as the bot. The loop guard drops any comment whose author is the Nota account, so if you configure your own handle and mention yourself, Nota stays silent by design (it must never reply to itself). Use the dedicated bot account’s handle and mention it from your normal account.
Comment edits are ignored — only newly-created comments trigger a reply (edited / removed comments are dropped before dispatch). Post a fresh comment rather than editing one.
Linear logs every delivery under Settings → API → Webhooks → your webhook → recent deliveries. A 200 {"status":"skipped"} means the event reached Nota but wasn’t a recognised mention (the handle wasn’t in the comment, or it was self-authored); a 202 Accepted means it dispatched.

Troubleshooting

Quick isolation: run the { viewer { id } } GraphQL call (Inbound Step 2) with the bot’s key. A valid response = the key works and the problem is in Nota’s stored config. Treat the API key and signing secret like passwords — rotate them if you suspect either has leaked.