---
title: "PUT /v1/orgs/{orgId}/integrations/linear/routes"
method: PUT
path: "/v1/orgs/{orgId}/integrations/linear/routes"
tags: ["Orgs", "Integrations"]
---

# PUT /v1/orgs/{orgId}/integrations/linear/routes

`PUT /v1/orgs/{orgId}/integrations/linear/routes`

## Request

- Base URL: `https://api.tessl.io`
- URL: `https://api.tessl.io/v1/orgs/{orgId}/integrations/linear/routes`
- Auth: none declared

Replaces the routes for the organization's Linear connection: which Tessl project each Linear team's deliveries run in. One route per team; `*` is the catch-all for every team without a route of its own. Every project must belong to a workspace of this organization; returns 422 (project_not_in_workspace) otherwise. `expectedRevision` is the `meta.revision` the routes were loaded with; when another save has landed since, nothing changes and the response is 409 with code linear_team_routes_changed.

## Path parameters

- `orgId` string, uuid, required

## Headers

- `Authorization` string

## Request body

- object
  - `routes` object[], required
    - `linearTeamId` union, required: A Linear team id, or `*` for the catch-all that applies to every team without a route of its own.
      - string, uuid
      - '*'
    - `projectId` string, uuid, required
  - `expectedRevision` string, required: Identifies the saved set of routes. A save sends back the revision its routes were loaded with and is refused once another save has landed.

## Response `200`

Default Response

- object
  - `links` object, required
    - `self` string, uri, required
    - `next` string, uri, nullable, required
    - `prev` string, uri, nullable, required
  - `meta` object, required
    - `count` number, required
    - `revision` string, required: Identifies the saved set of routes. A save sends back the revision its routes were loaded with and is refused once another save has landed.
  - `data` object[], required
    - `id` string, uuid, required
    - `type` 'linear-team-route', required
    - `attributes` object, required
      - `linearTeamId` union, required: A Linear team id, or `*` for the catch-all that applies to every team without a route of its own.
        - string, uuid
        - '*'
      - `projectId` string, uuid, required
      - `projectDeleted` boolean, required: True when the routed project has since been deleted. The route is shown so it can be repointed, but deliveries no longer match it.

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `409`: Conflict
- `422`: Unprocessable Entity
- `500`: Internal Server Error

## Changes

- **2026-10-21** `00c5aee0a4d1`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/tessl/apis/tessl-api/changes/v1/orgs/:orgId/integrations/linear/routes/put.md)

---

[API](https://skmtc.dev/tessl/apis/tessl-api.md) · [All operations](https://skmtc.dev/tessl/apis/tessl-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tessl/apis/tessl-api/revisions/7386f1e6295b?raw)
