API reference

A REST API, signed webhooks and a Linear-compatible MCP server. All three need the Pro or Business plan (or an unlimited workspace) and a personal API key from Settings → API & webhooks.

Authentication

Send your key as a bearer token. A key acts as you, with your permissions, in the workspace where you created it.

curl https://meridian.slimbennasrallah.com/api/v1/me \
  -H "Authorization: Bearer mer_…"

Responses are { "data": … }, errors { "error": "…" } with an HTTP status. The limit is 600 requests a minute.

REST endpoints

MethodPathNotes
GET/api/v1/meYou and the workspace
GET/api/v1/teamsTeams; /teams/:key/states, /teams/:key/cycles
GET/api/v1/usersMembers; ?query=
GET/api/v1/labels?team=
GET/api/v1/issues?team=&state=&assignee=me&project=&label=&cycle=current&query=&priority=&updatedAt=-P7D&limit=&cursor=
GET/api/v1/issues/:idIdentifier (ENG-12) or id, with sub-issues, relations, attachments
POST/api/v1/issues{ team, title, description, state, assignee, priority, labels, project, cycle, milestone, parentId, dueDate }
PATCH/api/v1/issues/:idAny field above; addLabels / removeLabels
DELETE/api/v1/issues/:idMoves to trash
GET/POST/api/v1/issues/:id/comments{ body, parentId }
GET/POST/api/v1/projectsProjects; /projects/:id, /:id/milestones, /:id/updates
PATCH/api/v1/projects/:idProject fields
GET/POST/api/v1/documents/documents/:id
POST/api/v1/ops{ op, args } : any operation the app uses (issue.update, state.upsert, …)

MCP server

The MCP endpoint speaks streamable HTTP at /api/mcp. Its tools use the same names and arguments as Linear's MCP server : list_issues, get_issue, save_issue, list_comments, save_comment, list_teams, list_users, list_issue_statuses, list_issue_labels, create_issue_label, list_projects, get_project, save_project, list_milestones, save_milestone, list_cycles, get_status_updates, save_status_update, list_documents, get_document, save_document, create_attachment and more.

claude mcp add --transport http meridian https://meridian.slimbennasrallah.com/api/mcp \
  --header "Authorization: Bearer mer_…"

Webhooks

Admins add webhooks in Settings → API & webhooks. Events : issue.created, issue.updated, issue.deleted, comment.created, project.created, project.updated, project_update.created. Failed deliveries retry five times with backoff.

Verify each request : the meridian-signature header is the hex HMAC-SHA256 of the raw body with the webhook secret.

const sig = crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
if (sig !== req.headers["meridian-signature"]) throw new Error("bad signature");