Guide · Linear → T3 Code · Verified November 1, 2026
Linear to T3 Code webhook guide
Short answer: One Linear endpoint verifies each delivery, a destination filter keeps the events in this guide, and every match is delivered to T3 Code with its own retry schedule and delivery log.
Linear issues open with a team, a state, and labels already set, so the routing decision is made upstream. This guide sends one team's new issues into a T3 Code task that reads the issue URL and repository, with the signing secret configured on the T3 Code side.
At a glance
1. Configure the Linear webhook
- In Linear, open Settings → API → Webhooks → New webhook.
- Paste the endpoint's ingestion URL and choose the resources to subscribe to (Issue, Comment).
- Copy the Signing Secret into the Hooks endpoint secret.
- Create an issue in a subscribed team to send the first delivery.
HMAC-SHA256 over the raw request body, hex encoded. webhookTimestamp (milliseconds) must be within 60 seconds of now.
2. Filter to the events that matter
Filters run per destination before rendering, so a non-matching event is stored with no delivery and no agent call. The rules below are the difference between a useful pairing and a noisy one.
Filter: new issues in team APP
{
"allow": [
{ "field": "event.type", "op": "equals", "value": "issue.create" },
{ "field": "event.project", "op": "equals", "value": "APP" }
],
"senders": { "allow": { "logins": ["octocat"] } }
}3. Configure the T3 Code destination
A Hooks destination POSTs JSON to your T3 Code task's On a webhook URL; T3 Code answers 202 when the agent run is accepted. Keep the URL (it carries a token) in a project secret and sign the body when the task requires it.
Destination: T3 Code task
{
"url": "{{secret.T3CODE_WEBHOOK_URL}}",
"signature": {
"secret": "{{secret.T3CODE_SIGNING_SECRET}}",
"header": "x-hub-signature-256",
"encoding": "hex",
"prefix": "sha256="
},
"body": {
"title": "{{event.subject.title}}",
"url": "{{event.subject.url}}",
"repo": "{{event.project}}"
}
}Secrets enter configs only as {{secret.NAME}} references; literal credentials are rejected. Full T3 Code target guide
4. Verify the delivery and its retries
Send one real event from the source, then open Deliveries. A 2xx from the target means accepted, not finished. 408, 425, 429 and 5xx retry with backoff honoring Retry-After; other 4xx fail permanently with a named code. The rendered request is stored per attempt, so a bad field path is visible without re-sending.

The pitfall this pairing hits
Linear says issue.create, not issues.opened. The resource names differ from GitHub: Linear uses singular issue with the action create, so a filter copied from a GitHub guide never matches. Check the normalized event in the delivery log before guessing.
Frequently asked questions
Do I need one endpoint per source or one per destination?
One endpoint per source. Each destination under that endpoint carries its own filter, template, retry schedule, and delivery log, so the same event can feed several targets without duplicate ingress URLs.
What happens while the target is down?
Retryable failures back off and retry within the destination's window; permanent 4xx failures stop immediately. Either way, the original event stays stored, so after fixing the target you replay the event instead of asking the source to send it again.
Linear says issue.create, not issues.opened
The resource names differ from GitHub: Linear uses singular issue with the action create, so a filter copied from a GitHub guide never matches. Check the normalized event in the delivery log before guessing.