---
title: "Linear-koppling"
description: "Komplett integrationsguide för Linear för att synkronisera ärenden, projekt och teamaktivitetsdata med Brevo via Tajo."
url: https://tajo.io/se/docs/connectors/custom/linear/
markdown: https://tajo.io/se/docs/connectors/custom/linear.md
lang: sv-SE
robots: noindex
---

Ansök om tidig åtkomst

Ange ditt förnamn och din e-postadress på jobbet. Vi skickar en länk för att bekräfta din begäran om åtkomst till Tajo.

# Linear-koppling

Kopplingens status: Planerad Inte byggd än. Tajo kör inte den här kopplingen i dag.

| Källfält | Målfält | Exempelvärde |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Anslut din Linear-arbetsyta till Brevo för kundnära ärendespårning, produktuppdateringsnotiser och kampanjer kring utvecklingsmilstolpar via Tajo.

## Översikt

| Egenskap | Värde |
| --- | --- |
| **Plattform** | Linear |
| **Kategori** | Anpassad |
| **Installationskomplexitet** | Enkel |
| **Officiell integration** | Nej |
| **Data som synkas** | Ärenden, projekt, användare, händelser |
| **API-typ** | GraphQL API |
| **Autentisering** | OAuth 2.0 / Personal API Key |
| **Bas-URL** | `https://api.linear.app/graphql` |

## Funktioner

- **Synk av ärendehändelser** - Vidarebefordra händelser för skapande, uppdatering och slutförande av ärenden till tidslinjer för Brevo-kontakter
- **Spårning av projektmilstolpar** - Utlös Brevo-kampanjer när projekt når viktiga milstolpar
- **Koppling av kundärenden** - Associera Linear-ärenden med Brevo-kontakter för supportöversikt
- **Etikettbaserad segmentering** - Mappa Linear-etiketter till Brevo-kontaktattribut
- **Cykelanalys** - Synka data om sprint-/cykelavslut för rapportering om teamprestation
- **Webhook-driven automation** - Vidarebefordran av händelser i realtid via Linear-webhooks

## Förutsättningar

Innan du börjar, se till att du har:

1. En Linear-arbetsyta med admin-åtkomst
2. En Personal API Key eller konfigurerad OAuth-applikation
3. Ett Brevo-konto med API-åtkomst
4. Ett Tajo-konto med aktivt abonnemang

## Autentisering

Linear stöder Personal API-nycklar och OAuth 2.0.

### Alternativ 1: Personal API Key

1. Gå till **Linear** > **Settings** > **API** > **Personal API keys**
2. Klicka på **Create key**
3. Namnge den “Tajo Integration”
4. Kopiera den genererade nyckeln (börjar med `lin_api_`)

```bash
curl -X POST https://api.linear.app/graphql \
  -H "Authorization: $LINEAR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "{ viewer { id name email } }"}'
```

### Alternativ 2: OAuth 2.0

För integrationer som betjänar flera arbetsytor:

1. Skapa en OAuth-applikation på [linear.app/settings/api/applications](https://linear.app/settings/api/applications)
2. Konfigurera redirect-URI: `https://app.tajo.io/callbacks/linear`
3. Begär scopes: `read`, `write`, `issues:create`, `comments:create`

GraphQL API

Linear använder uteslutande ett GraphQL API. Alla queries och mutationer går genom en enda endpoint: `https://api.linear.app/graphql`. Tajo hanterar all GraphQL-querykonstruktion automatiskt.

### Ansluta till Tajo

```bash
# Using Personal API Key
tajo connectors install linear \
  --api-key $LINEAR_API_KEY

# Using OAuth
tajo connectors install linear \
  --client-id $LINEAR_CLIENT_ID \
  --client-secret $LINEAR_CLIENT_SECRET
```

## Konfiguration

### Grundinställning

```yaml
connectors:
  linear:
    enabled: true

    sync:
      issues: true
      projects: true
      cycles: true
      users: true

    teams:
      - key: "ENG"
        sync_to_list: 38
      - key: "SUPPORT"
        sync_to_list: 39

    issue_states:
      - Backlog
      - Todo
      - "In Progress"
      - Done
      - Canceled
```

### Fältmappning

Mappa Linear-användar- och ärendedata till Brevo-attribut:

```yaml
field_mapping:
  # User fields
  id: LINEAR_USER_ID
  email: email
  name: FIRSTNAME

  # Issue metrics mapped to contact events
  last_issue_identifier: LAST_LINEAR_ISSUE
  last_issue_state: LAST_ISSUE_STATUS
  last_issue_priority: LAST_ISSUE_PRIORITY
  total_issues: LINEAR_ISSUE_COUNT

  # Project data
  current_project: ACTIVE_PROJECT
  team_key: LINEAR_TEAM
```

### Händelsemappning

```yaml
event_mapping:
  Issue.create: ISSUE_CREATED
  Issue.update: ISSUE_UPDATED
  Issue.remove: ISSUE_DELETED
  Comment.create: COMMENT_ADDED
  Project.update: PROJECT_UPDATED
  Cycle.update: CYCLE_UPDATED
```

## API-endpoints

Linear använder en enda GraphQL-endpoint. Viktiga queries och mutationer som används av Tajo:

| Operation | Typ | Syfte |
| --- | --- | --- |
| `issues` | Query | Lista och filtrera ärenden |
| `issue` | Query | Hämta ett enskilt ärende per ID |
| `projects` | Query | Lista alla projekt |
| `cycles` | Query | Lista cykler (sprintar) |
| `teams` | Query | Lista team i arbetsytan |
| `users` | Query | Lista medlemmar i arbetsytan |
| `viewer` | Query | Hämta info om autentiserad användare |
| `issueCreate` | Mutation | Skapa ett nytt ärende |
| `issueUpdate` | Mutation | Uppdatera ett befintligt ärende |
| `commentCreate` | Mutation | Lägg till en kommentar på ett ärende |
| `webhookCreate` | Mutation | Registrera en webhook |

### Exempel på GraphQL-query

```graphql
query GetIssues($filter: IssueFilter, $first: Int, $after: String) {
  issues(filter: $filter, first: $first, after: $after) {
    nodes {
      id
      identifier
      title
      state { name }
      priority
      assignee { email name }
      labels { nodes { name } }
      createdAt
      updatedAt
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}
```

## Kodexempel

### Initiera kopplingen

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

await tajo.connectors.connect('linear', {
  apiKey: process.env.LINEAR_API_KEY
});
```

### Synka ärenden

```javascript
await tajo.connectors.sync('linear', {
  type: 'incremental',
  resources: ['issues'],
  teams: ['ENG', 'SUPPORT'],
  since: '2024-01-01'
});

const status = await tajo.connectors.status('linear');
console.log(status);
// {
//   connected: true,
//   lastSync: '2024-03-15T18:00:00Z',
//   issuesTracked: 3200,
//   projectsMonitored: 8,
//   usersLinked: 45
// }
```

### Hantera Linear-webhooks

```javascript
app.post('/webhooks/linear', async (req, res) => {
  const event = req.body;

  // Verify webhook signature
  const signature = req.get('Linear-Signature');
  if (!verifyLinearSignature(req.body, signature)) {
    return res.status(401).send('Unauthorized');
  }

  await tajo.connectors.handleWebhook('linear', {
    type: event.type,
    action: event.action,
    payload: {
      issueId: event.data?.id,
      identifier: event.data?.identifier,
      title: event.data?.title,
      state: event.data?.state?.name,
      assigneeEmail: event.data?.assignee?.email
    }
  });

  res.status(200).send('OK');
});
```

### Skapa ärende från Brevo-händelse

```javascript
// Create a Linear issue when a Brevo contact submits a request
tajo.events.on('contact.event', async (event) => {
  if (event.name === 'FEATURE_REQUEST') {
    await tajo.connectors.create('linear', {
      teamId: 'ENG',
      title: `Feature Request: ${event.data.subject}`,
      description: event.data.description,
      priority: 3,
      labelIds: ['feature-request']
    });
  }
});
```

## Hastighetsbegränsningar

Linear tillämpar hastighetsbegränsningar på sitt GraphQL-API:

| Begränsningstyp | Värde |
| --- | --- |
| **Förfrågningshastighet** | 1 500 förfrågningar per timme per API-nyckel |
| **Frågekomplexitet** | 10 000 komplexitetspoäng per förfrågan |
| **Paginering** | 250 noder max per sida (standard 50) |
| **Webhooks** | Obegränsade inkommande händelser |

Komplexitetsbudget

Linear använder ett komplexitetsbaserat system för hastighetsbegränsning. Enkla queries kostar färre poäng. Tajo optimerar queries för att minimera komplexitet genom att bara begära nödvändiga fält och använda effektiv paginering.

Linear returnerar `429 Too Many Requests` med en `Retry-After`-header när gränserna överskrids.

## Felsökning

### Vanliga problem

| Problem | Orsak | Lösning |
| --- | --- | --- |
| 401 Unauthorized | Ogiltig eller återkallad API-nyckel | Generera en ny API-nyckel i Linear Settings |
| Query-fel | Ogiltig GraphQL-syntax | Validera queries i Linears API-utforskare |
| Saknade ärenden | Teamåtkomst begränsad | Se till att API-nyckelns ägare har åtkomst till målteam |
| Webhook utlöses inte | Fel URL eller inaktiverad | Kontrollera webhook-status under Linear Settings > API > Webhooks |
| Ofullständig paginering | Saknar `after`-cursor | Se till att pagineringen loopar tills `hasNextPage` är false |

### Felsökningsläge

```yaml
connectors:
  linear:
    debug: true
    log_level: verbose
    log_queries: true
```

### Testa anslutning

```bash
tajo connectors test linear
# ✓ GraphQL API connection successful
# ✓ Workspace access verified
# ✓ Team list readable
# ✓ Issue query operational
# ✓ Webhook registration available
```

## Bästa praxis

1. **Använd webhooks för realtid** - Registrera webhooks istället för polling vid ärendeändringar
2. **Filtrera per team** - Synka bara ärenden från relevanta team för att minska API-användning
3. **Optimera GraphQL-queries** - Begär bara nödvändiga fält för att hålla dig inom komplexitetsgränserna
4. **Mappa etiketter till segment** - Använd Linear-etiketter för att driva Brevo-kontaktsegmentering
5. **Hantera paginering** - Kontrollera alltid `hasNextPage` och använd `endCursor` för fullständig data
6. **Verifiera webhook-signaturer** - Validera alltid `Linear-Signature`-headern

## Säkerhet

- **API-nyckelautentisering** - Personliga nycklar scopade till arbetsytan
- **OAuth 2.0** - Säkert auktoriseringsflöde för integrationer med flera arbetsytor
- **Endast HTTPS** - All API-kommunikation krypterad via TLS 1.2+
- **Webhook-signaturer** - HMAC-baserad signaturverifiering
- **Krypterad lagring** - API-nycklar krypterade i vila i Tajo
- **SOC 2-efterlevnad** - Linear-plattformen är SOC 2 Type II-certifierad

## Relaterade resurser

- [GitHub-koppling](https://tajo.io/se/docs/connectors/custom/github)
- [Jira-koppling](https://tajo.io/se/docs/connectors/custom/jira)
- [Notion-koppling](https://tajo.io/se/docs/connectors/custom/notion)
- [Brevo Contacts API](https://tajo.io/se/docs/contact-management)
