{"openapi":"3.1.0","info":{"title":"Linear Planning (BYOK) API","version":"0.1.0","description":"Linear Planning (BYOK) lets an AI assistant read your own Linear Planning data through the Linear Planning API with a key you supply (personal API key). Read-only: 7 tools (list_initiatives, get_initiative, list_project_milestones, list_project_statuses, list_project_updates, list_initiative_projects, list_documents). The BYOK key travels with each request, is used for that one call only and is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-linear-planning.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-linear-planning/docs"},"termsOfService":"https://connectorbay.com/byok-linear-planning/terms"},"servers":[{"url":"https://byok-linear-planning.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-linear-planning/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_initiatives":{"post":{"operationId":"list_initiatives","summary":"List Linear initiatives (groups of projects toward a goal) with status, health, dates, owner and parent initiative. One ","description":"List Linear initiatives (groups of projects toward a goal) with status, health, dates, owner and parent initiative. One page per call. Use for \"Which Linear initiatives are active and are they on track\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"First"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor copied from pageInfo.endCursor of the previous answer to get the next page; leave empty for the first page.","title":"After"},"order_by":{"anyOf":[{"enum":["updatedAt","createdAt"],"type":"string"},{"type":"null"}],"default":"updatedAt","description":"Order: updatedAt (most recently changed first) or createdAt (newest first).","title":"Order By"}},"title":"list_initiativesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_initiative":{"post":{"operationId":"get_initiative","summary":"Get one Linear initiative with its projects: status, health, dates, owner and the name, status and progress of each proj","description":"Get one Linear initiative with its projects: status, health, dates, owner and the name, status and progress of each project. Use for \"Show Linear initiative with ID 9f0a1b2c-0000-4000-8000-000000000001 and its projects\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"ID of the initiative (a UUID, from list_initiatives).","maxLength":100,"title":"Id","type":"string"}},"required":["id"],"title":"get_initiativeArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_project_milestones":{"post":{"operationId":"list_project_milestones","summary":"List Linear project milestones with name, status, progress, target date and project. One page per call. Use for \"What pr","description":"List Linear project milestones with name, status, progress, target date and project. One page per call. Use for \"What project milestones are coming up in Linear\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"First"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor copied from pageInfo.endCursor of the previous answer to get the next page; leave empty for the first page.","title":"After"},"order_by":{"anyOf":[{"enum":["updatedAt","createdAt"],"type":"string"},{"type":"null"}],"default":"updatedAt","description":"Order: updatedAt (most recently changed first) or createdAt (newest first).","title":"Order By"}},"title":"list_project_milestonesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_project_statuses":{"post":{"operationId":"list_project_statuses","summary":"List the workspace's project statuses (Backlog, Planned, In Progress, Completed ...) with type, color and position. One ","description":"List the workspace's project statuses (Backlog, Planned, In Progress, Completed ...) with type, color and position. One page per call. Use for \"Which statuses can a Linear project have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"First"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor copied from pageInfo.endCursor of the previous answer to get the next page; leave empty for the first page.","title":"After"},"order_by":{"anyOf":[{"enum":["updatedAt","createdAt"],"type":"string"},{"type":"null"}],"default":"updatedAt","description":"Order: updatedAt (most recently changed first) or createdAt (newest first).","title":"Order By"}},"title":"list_project_statusesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_project_updates":{"post":{"operationId":"list_project_updates","summary":"List Linear project status updates with health (onTrack, atRisk, offTrack), author, project and date; the update text is","description":"List Linear project status updates with health (onTrack, atRisk, offTrack), author, project and date; the update text is not returned. One page per call. Use for \"Which Linear projects reported at risk recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"First"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor copied from pageInfo.endCursor of the previous answer to get the next page; leave empty for the first page.","title":"After"},"order_by":{"anyOf":[{"enum":["updatedAt","createdAt"],"type":"string"},{"type":"null"}],"default":"updatedAt","description":"Order: updatedAt (most recently changed first) or createdAt (newest first).","title":"Order By"}},"title":"list_project_updatesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_initiative_projects":{"post":{"operationId":"list_initiative_projects","summary":"List which projects belong to which initiative (links between initiatives and projects). One page per call. Use for \"Whi","description":"List which projects belong to which initiative (links between initiatives and projects). One page per call. Use for \"Which projects are linked to which Linear initiative\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"First"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor copied from pageInfo.endCursor of the previous answer to get the next page; leave empty for the first page.","title":"After"},"order_by":{"anyOf":[{"enum":["updatedAt","createdAt"],"type":"string"},{"type":"null"}],"default":"updatedAt","description":"Order: updatedAt (most recently changed first) or createdAt (newest first).","title":"Order By"}},"title":"list_initiative_projectsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_documents":{"post":{"operationId":"list_documents","summary":"List Linear documents with title, URL, creator, parent project or initiative and dates; the document text is not returne","description":"List Linear documents with title, URL, creator, parent project or initiative and dates; the document text is not returned. One page per call. Use for \"What documents exist in Linear\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"First"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor copied from pageInfo.endCursor of the previous answer to get the next page; leave empty for the first page.","title":"After"},"order_by":{"anyOf":[{"enum":["updatedAt","createdAt"],"type":"string"},{"type":"null"}],"default":"updatedAt","description":"Order: updatedAt (most recently changed first) or createdAt (newest first).","title":"Order By"}},"title":"list_documentsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}