---
title: "Linear-kobling"
description: "Fullstendig Linear-integrasjonsveiledning for synkronisering av issues, prosjekter og teamaktivitetsdata med Brevo via Tajo."
url: https://tajo.io/no/docs/connectors/custom/linear/
markdown: https://tajo.io/no/docs/connectors/custom/linear.md
lang: no-NO
robots: noindex
---

Be om tidlig tilgang

Skriv inn fornavn og e-postadresse på jobb. Vi sender deg en lenke for å bekrefte forespørselen om tilgang til Tajo.

# Linear-kobling

Koblingsstatus: Planlagt Ikke bygget ennå. Tajo kjører ikke denne koblingen i dag.

| Kildefelt | Målfelt | Eksempelverdi |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Koble Linear-arbeidsområdet ditt til Brevo for kundevendt issue-sporing, varsler om produktoppdateringer og kampanjer for utviklingsmilepæler gjennom Tajo.

## Oversikt

| Egenskap | Verdi |
| --- | --- |
| **Plattform** | Linear |
| **Kategori** | Custom |
| **Oppsettskompleksitet** | Enkel |
| **Offisiell integrasjon** | Nei |
| **Synkroniserte data** | Issues, prosjekter, brukere, hendelser |
| **API-type** | GraphQL API |
| **Autentisering** | OAuth 2.0 / personlig API-nøkkel |
| **Base URL** | `https://api.linear.app/graphql` |

## Funksjoner

- **Synkronisering av issue-hendelser** - Videresend hendelser for opprettelse, oppdatering og fullføring av issues til Brevo-kontakttidslinjer
- **Sporing av prosjektmilepæler** - Utløs Brevo-kampanjer når prosjekter når viktige milepæler
- **Kobling av kundesaker** - Knytt Linear-issues til Brevo-kontakter for supportoversikt
- **Etikettbasert segmentering** - Mapp Linear-etiketter til Brevo-kontaktattributter
- **Syklusanalyse** - Synkroniser data om sprint-/syklusfullføring for rapportering av teamytelse
- **Webhook-drevet automatisering** - Videresending av hendelser i sanntid via Linear-webhooks

## Forutsetninger

Før du begynner, sørg for at du har:

1. Et Linear-arbeidsområde med administratortilgang
2. En personlig API-nøkkel eller OAuth-applikasjon konfigurert
3. En Brevo-konto med API-tilgang
4. En Tajo-konto med aktivt abonnement

## Autentisering

Linear støtter personlige API-nøkler og OAuth 2.0.

### Alternativ 1: Personlig API-nøkkel

1. Gå til **Linear** > **Settings** > **API** > **Personal API keys**
2. Klikk **Create key**
3. Gi den navnet “Tajo Integration”
4. Kopier den genererte nøkkelen (begynner 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

For integrasjoner som betjener flere arbeidsområder:

1. Opprett en OAuth-applikasjon på [linear.app/settings/api/applications](https://linear.app/settings/api/applications)
2. Konfigurer redirect URI: `https://app.tajo.io/callbacks/linear`
3. Be om scopes: `read`, `write`, `issues:create`, `comments:create`

GraphQL API

Linear bruker utelukkende et GraphQL API. Alle spørringer og mutasjoner går gjennom ett enkelt endepunkt: `https://api.linear.app/graphql`. Tajo håndterer all GraphQL-spørringskonstruksjon automatisk.

### Koble til Tajo

```bash
# Med personlig API-nøkkel
tajo connectors install linear \
  --api-key $LINEAR_API_KEY

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

## Konfigurasjon

### Grunnleggende oppsett

```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
```

### Feltmapping

Mapp Linear-bruker- og issue-data til Brevo-attributter:

```yaml
field_mapping:
  # Brukerfelt
  id: LINEAR_USER_ID
  email: email
  name: FIRSTNAME

  # Issue-målinger mappet til kontakthendelser
  last_issue_identifier: LAST_LINEAR_ISSUE
  last_issue_state: LAST_ISSUE_STATUS
  last_issue_priority: LAST_ISSUE_PRIORITY
  total_issues: LINEAR_ISSUE_COUNT

  # Prosjektdata
  current_project: ACTIVE_PROJECT
  team_key: LINEAR_TEAM
```

### Hendelsesmapping

```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-endepunkter

Linear bruker ett enkelt GraphQL-endepunkt. Viktige spørringer og mutasjoner brukt av Tajo:

| Operasjon | Type | Formål |
| --- | --- | --- |
| `issues` | Query | List og filtrer issues |
| `issue` | Query | Hent en enkelt issue etter ID |
| `projects` | Query | List alle prosjekter |
| `cycles` | Query | List sykluser (sprinter) |
| `teams` | Query | List team i arbeidsområdet |
| `users` | Query | List medlemmer i arbeidsområdet |
| `viewer` | Query | Hent informasjon om autentisert bruker |
| `issueCreate` | Mutation | Opprett en ny issue |
| `issueUpdate` | Mutation | Oppdater en eksisterende issue |
| `commentCreate` | Mutation | Legg til en kommentar på en issue |
| `webhookCreate` | Mutation | Registrer en webhook |

### Eksempel på GraphQL-spørring

```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
    }
  }
}
```

## Kodeeksempler

### Initialiser kobling

```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
});
```

### Synkroniser issues

```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
// }
```

### Håndter Linear-webhooks

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

  // Verifiser webhook-signatur
  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');
});
```

### Opprett issue fra Brevo-hendelse

```javascript
// Opprett en Linear-issue når en Brevo-kontakt sender inn en forespørsel
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']
    });
  }
});
```

## Ratebegrensninger

Linear håndhever ratebegrensninger på sitt GraphQL API:

| Begrensningstype | Verdi |
| --- | --- |
| **Forespørselsrate** | 1 500 forespørsler per time per API-nøkkel |
| **Spørringskompleksitet** | 10 000 kompleksitetspoeng per forespørsel |
| **Paginering** | Maks 250 noder per side (standard 50) |
| **Webhooks** | Ubegrenset antall innkommende hendelser |

Kompleksitetsbudsjett

Linear bruker et kompleksitetsbasert ratebegrensningssystem. Enkle spørringer koster færre poeng. Tajo optimaliserer spørringer for å minimere kompleksiteten ved å kun be om nødvendige felt og bruke effektiv paginering.

Linear returnerer `429 Too Many Requests` med en `Retry-After`-header når grensene overskrides.

## Feilsøking

### Vanlige problemer

| Problem | Årsak | Løsning |
| --- | --- | --- |
| 401 Unauthorized | Ugyldig eller tilbakekalt API-nøkkel | Generer en ny API-nøkkel i Linear Settings |
| Spørringsfeil | Ugyldig GraphQL-syntaks | Valider spørringer med Linears API-utforsker |
| Manglende issues | Teamtilgang begrenset | Sørg for at API-nøkkelens eier har tilgang til mål-team |
| Webhook utløses ikke | Feil URL eller deaktivert | Kontroller webhook-status i Linear Settings > API > Webhooks |
| Ufullstendig paginering | Manglende `after`-markør | Sørg for at pagineringsløkken kjører til `hasNextPage` er usann |

### Feilsøkingsmodus

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

### Test tilkobling

```bash
tajo connectors test linear
# ✓ GraphQL API-tilkobling vellykket
# ✓ Arbeidsområdetilgang bekreftet
# ✓ Teamliste lesbar
# ✓ Issue-spørring operativ
# ✓ Webhook-registrering tilgjengelig
```

## Beste praksis

1. **Bruk webhooks for sanntid** - Registrer webhooks i stedet for polling for issue-endringer
2. **Filtrer etter team** - Synkroniser kun issues fra relevante team for å redusere API-bruk
3. **Optimaliser GraphQL-spørringer** - Be kun om nødvendige felt for å holde deg innenfor kompleksitetsgrenser
4. **Mapp etiketter til segmenter** - Bruk Linear-etiketter for å drive Brevo-kontaktsegmentering
5. **Håndter paginering** - Sjekk alltid `hasNextPage` og bruk `endCursor` for komplette data
6. **Verifiser webhook-signaturer** - Valider alltid `Linear-Signature`-headeren

## Sikkerhet

- **API-nøkkelautentisering** - Personlige nøkler avgrenset til arbeidsområde
- **OAuth 2.0** - Sikker autorisasjonsflyt for integrasjoner med flere arbeidsområder
- **Kun HTTPS** - All API-kommunikasjon kryptert via TLS 1.2+
- **Webhook-signaturer** - HMAC-basert signaturverifisering
- **Kryptert lagring** - API-nøkler kryptert i hvilemodus i Tajo
- **SOC 2-samsvar** - Linear-plattformen er SOC 2 Type II-sertifisert

## Relaterte ressurser

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