API
Both endpoints are plain JSON so the planner can run from a Zapier/Make/n8n schedule, for example on the first Monday of each month, reading the goals from Notion.
POST /api/plan
Goals + team in, plan out: projects, issues (estimate, owner, cycle, priority, blockers) and cycles. Uses Claude when ANTHROPIC_API_KEY is set, playbooks otherwise.
curl -X POST https://okr-to-linear.vercel.app/api/plan -H "Content-Type: application/json" -d '{
"month": "2026-10",
"goals": [{ "id": "g1", "line": "clinical", "text": "Sign 2 health-system pilot LOIs" }],
"team": [{ "id": "sam", "name": "Sam Rivera", "role": "CEO", "skills": ["partnerships"], "capacity": 8 }]
}'POST /api/linear/push
Creates the plan in Linear: projectCreate per goal, issueCreate per issue, issueRelationCreate (type blocks) per dependency. Workspace users and cycles are matched by name and date. Without LINEAR_API_KEY and LINEAR_TEAM_ID it returns the exact operations as a dry run.
curl -X POST https://okr-to-linear.vercel.app/api/linear/push -H "Content-Type: application/json" -d '{ "plan": <plan from /api/plan>, "team": [...] }'