> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sazabi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Linear Webhooks

> Send Linear webhooks to your Sazabi intake URL to search issue, comment, project, and cycle changes as log records, with every delivery's signature verified.

[All Linear integration capabilities](https://docs.sazabi.com/catalogs/integrations/linear.md)

## About

Send Linear webhooks to Sazabi to search issue, comment, project, cycle, and other data changes next to the rest of your production telemetry. Linear posts each change to your Sazabi intake URL as a JSON `POST`, signed with the webhook's signing secret. There is no agent to deploy, and Sazabi never calls the Linear API.

### What Sazabi records

Each Linear delivery becomes one Sazabi record that keeps the full payload, timestamped with `createdAt`. These attributes are extracted for filtering:

| Attribute | Source |
| - | - |
| `linear.webhook.event` | `Linear-Event` header |
| `linear.webhook.delivery_id` | `Linear-Delivery` header |
| `linear.webhook.id` | `webhookId` |
| `linear.webhook.action` | `action` |
| `linear.webhook.type` | `type` |
| `linear.organization.id` | `organizationId` |
| `linear.resource.id` | `data.id` |
| `linear.resource.url` | `url` |

## Prerequisites

* Linear workspace admin access, which creating webhooks requires.
* The webhook's signing secret. Linear shows it on the webhook's page, so create the webhook first. Any placeholder URL works until you have your Sazabi intake URL.
* Your Sazabi intake URL.

> [!NOTE]
>
> Signature verification is in early access. While it is on for your organization, Sazabi asks for the verification secret before it creates the intake URL, and rejects any delivery whose signature does not match. Contact support to turn it on.

## Set up in the dashboard

**Step 1**

### Create the webhook in Linear

In [Linear](https://linear.app/settings/api), open **Settings > API > Webhooks** and click **New webhook**. Give it any placeholder URL for now, choose the data change events to send, and save. Then open the webhook and copy its **Signing secret**.

**Step 2**

### Add the log source

In the Sazabi dashboard, open **Settings > Log sources**, choose **Linear Webhooks** and add it. If Sazabi asks for a verification secret, paste the signing secret from Linear. Sazabi then shows your intake URL.

**Step 3**

### Point the webhook at Sazabi

Back in Linear, open the webhook and set its **URL** to your Sazabi intake URL. Save.

## Set up with the CLI

You can also register the Linear Webhooks log source with the [Sazabi CLI](https://docs.sazabi.com/reference/cli.md) (installed and authenticated — see [CLI reference](https://docs.sazabi.com/reference/cli/log-sources.md)).

```bash theme={"system"}
printf '%s' "$LINEAR_WEBHOOK_SECRET" | sazabi log-sources create linear_webhooks --mode manual --verify-signatures linear --secret-stdin
```

The command prints the intake URL. Paste it into the webhook's **URL** in Linear. The secret is read from standard input, so it never appears in your shell history.

Run `sazabi log-sources get <log-source-id>` at any time to reprint the endpoint, or `sazabi log-sources list` to see every log source in the project.

## Verify signatures

Linear signs every delivery with the webhook's signing secret and sends the result in the `Linear-Signature` header. Sazabi checks it on the exact bytes Linear sent and rejects a delivery with `401` when the signature does not match or when the `webhookTimestamp` in the body is more than a minute from Sazabi's clock. A rejected delivery is not stored and not billed. Each Linear webhook has its own signing secret, so create one Sazabi log source per webhook.

| Sender | Signature header | Secret | Setup |
| - | - | - | - |
| Linear | `Linear-Signature` | Linear creates it; you paste it into Sazabi | In Linear, open Settings › API › Webhooks, select the webhook and paste its signing secret here. |

To change the secret later, open the log source in **Settings > Log sources** and choose **Rotate secret**. The previous secret keeps working for 24 hours by default, so Linear keeps delivering while you update it. The [Intake page](https://docs.sazabi.com/guides/instrument/intake.md) shows rejected deliveries and why.

## Verify

Create or update an issue in a team the webhook covers. Open the [Intake page](https://docs.sazabi.com/guides/instrument/intake.md) in the Sazabi dashboard and confirm records from the **Linear Webhooks** source appear. Records typically arrive within a minute or two.

## Troubleshooting

**Linear shows failed deliveries with `401`** — The signature did not match, or the delivery was more than a minute old. Check that the secret in Sazabi is the signing secret of this webhook, not of another webhook.

**No records after saving** — Confirm the webhook's URL exactly matches your Sazabi intake URL, including the `https://` scheme, that the webhook is enabled, and that it covers the team and resource type you changed.

## Further reading

> [card] [Intake](https://docs.sazabi.com/guides/instrument/intake.md)
>
> See per-source ingestion volume and health in the Intake page.

> [card] [Webhook Events](https://docs.sazabi.com/catalogs/log-sources/send-to-an-endpoint/webhook-events.md)
>
> Verify signatures and send webhooks from any other platform.

> [card] [Linear webhooks](https://linear.app/developers/webhooks)
>
> Linear's documentation for webhooks and the signature Sazabi checks.

> [card] [Log sources](https://docs.sazabi.com/catalogs/log-sources.md)
>
> Browse the full log source catalog.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.