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
| Method | Path | Notes |
|---|---|---|
GET | /api/v1/me | You and the workspace |
GET | /api/v1/teams | Teams; /teams/:key/states, /teams/:key/cycles |
GET | /api/v1/users | Members; ?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/:id | Identifier (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/:id | Any field above; addLabels / removeLabels |
DELETE | /api/v1/issues/:id | Moves to trash |
GET/POST | /api/v1/issues/:id/comments | { body, parentId } |
GET/POST | /api/v1/projects | Projects; /projects/:id, /:id/milestones, /:id/updates |
PATCH | /api/v1/projects/:id | Project 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");