{"components":{"schemas":{"APIKey":{"properties":{"active_workspace":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"created_by":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"type":"string"},"projects":{"items":{"type":"string"},"type":"array"},"scope":{"type":"string"}},"required":["created_at","created_by","id","name","scope"],"type":"object"},"AgentLabels":{"properties":{"artifact":{"type":"string"},"artifact_done":{"type":"string"},"build":{"type":"string"},"done":{"type":"string"},"failed":{"type":"string"},"running":{"type":"string"}},"type":"object"},"Artifact":{"properties":{"created_at":{"format":"date-time","type":"string"},"created_by":{"type":"string"},"id":{"type":"string"},"issue_key":{"type":"string"},"name":{"type":"string"},"size":{"type":"integer"}},"required":["created_at","created_by","id","name","size"],"type":"object"},"ArtifactCard":{"properties":{"agent":{"type":"string"},"artifacts":{"items":{"$ref":"#/components/schemas/Artifact"},"type":"array"},"choice":{"$ref":"#/components/schemas/ArtifactChoice","nullable":true},"key":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"}},"required":["artifacts","key","status","title"],"type":"object"},"ArtifactChoice":{"properties":{"at":{"format":"date-time","type":"string"},"by":{"type":"string"},"text":{"type":"string"}},"required":["at","by","text"],"type":"object"},"BurnPoint":{"properties":{"day":{"type":"string"},"ideal":{"type":"number"},"remaining":{"type":"integer"}},"required":["day","ideal","remaining"],"type":"object"},"ChildIssue":{"properties":{"key":{"type":"string"},"prio":{"type":"integer"},"project_slug":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"}},"required":["key","prio","project_slug","status","title"],"type":"object"},"CodeCheck":{"properties":{"conclusion":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"url":{"type":"string"}},"required":["conclusion","name","status","url"],"type":"object"},"CodeCommit":{"properties":{"author":{"type":"string"},"committed_at":{"format":"date-time","type":"string"},"message":{"type":"string"},"repo":{"type":"string"},"sha":{"type":"string"},"url":{"type":"string"}},"required":["author","committed_at","message","repo","sha","url"],"type":"object"},"CodeInfo":{"properties":{"commits":{"items":{"$ref":"#/components/schemas/CodeCommit"},"type":"array"},"connected":{"type":"boolean"},"pr":{"$ref":"#/components/schemas/CodePR","nullable":true}},"required":["commits","connected"],"type":"object"},"CodePR":{"properties":{"author":{"type":"string"},"base_ref":{"type":"string"},"checks":{"items":{"$ref":"#/components/schemas/CodeCheck"},"type":"array"},"head_ref":{"type":"string"},"id":{"type":"integer"},"merge_handled":{"type":"boolean"},"number":{"type":"integer"},"repo":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"format":"date-time","type":"string"},"url":{"type":"string"}},"required":["author","base_ref","checks","head_ref","id","merge_handled","number","repo","state","title","updated_at","url"],"type":"object"},"ColumnConfig":{"properties":{"color":{"type":"string"},"hidden":{"type":"boolean"},"name":{"type":"string"},"status":{"type":"string"}},"required":["status"],"type":"object"},"Comment":{"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"type":"integer"},"internal":{"type":"boolean"},"summary":{"type":"string"},"user_id":{"type":"integer"}},"required":["author","body","created_at","id"],"type":"object"},"Doc":{"properties":{"body":{"type":"string"},"color":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"created_by":{"type":"string"},"folder_id":{"nullable":true,"type":"integer"},"id":{"type":"integer"},"issues":{"items":{"$ref":"#/components/schemas/ChildIssue"},"type":"array"},"kind":{"type":"string"},"project_key":{"type":"string"},"project_slug":{"type":"string"},"title":{"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["body","created_at","created_by","id","kind","title","updated_at"],"type":"object"},"DocLink":{"properties":{"id":{"type":"integer"},"title":{"type":"string"}},"required":["id","title"],"type":"object"},"DocRevision":{"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"type":"integer"},"size":{"type":"integer"}},"required":["author","created_at","id","size"],"type":"object"},"Event":{"properties":{"actor":{"type":"string"},"actor_type":{"type":"string"},"body":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"doc_id":{"type":"integer"},"doc_title":{"type":"string"},"from_status":{"type":"string"},"id":{"type":"integer"},"issue_key":{"type":"string"},"issue_status":{"type":"string"},"issue_title":{"type":"string"},"kind":{"type":"string"},"project_key":{"type":"string"},"project_slug":{"type":"string"},"source":{"type":"string"},"text":{"type":"string"},"to_status":{"type":"string"},"workspace_name":{"type":"string"},"workspace_slug":{"type":"string"}},"required":["actor_type","created_at","id","kind","source","text"],"type":"object"},"FeedbackInfo":{"properties":{"kind":{"type":"string"},"reporter_email":{"type":"string"},"reporter_name":{"type":"string"},"reporter_user_id":{"type":"integer"},"workspace_name":{"type":"string"},"workspace_slug":{"type":"string"}},"required":["kind","reporter_email","reporter_name","reporter_user_id","workspace_name","workspace_slug"],"type":"object"},"Folder":{"properties":{"color":{"type":"string"},"docs":{"type":"integer"},"id":{"type":"integer"},"name":{"type":"string"},"parent_id":{"nullable":true,"type":"integer"}},"required":["docs","id","name"],"type":"object"},"Invite":{"properties":{"accepted_at":{"format":"date-time","nullable":true,"type":"string"},"created_at":{"format":"date-time","type":"string"},"email":{"type":"string"},"expires_at":{"format":"date-time","type":"string"},"id":{"type":"integer"},"invited_by":{"type":"string"},"project_names":{"items":{"type":"string"},"type":"array"},"projects":{"items":{"type":"string"},"type":"array"},"revoked_at":{"format":"date-time","nullable":true,"type":"string"},"role":{"type":"string"},"tenant_id":{"type":"integer"},"tenant_name":{"type":"string"},"tenant_slug":{"type":"string"}},"required":["created_at","email","expires_at","id","invited_by","role","tenant_id"],"type":"object"},"Invoice":{"properties":{"addons":{"items":{"type":"string"},"type":"array"},"external_id":{"type":"string"},"id":{"type":"integer"},"issued_at":{"format":"date-time","type":"string"},"net_sek":{"type":"integer"},"note":{"type":"string"},"number":{"type":"string"},"paid_at":{"format":"date-time","nullable":true,"type":"string"},"period":{"type":"string"},"plan":{"type":"string"},"recipient_id":{"type":"integer"},"recipient_kind":{"type":"string"},"recipient_name":{"type":"string"},"source":{"type":"string"},"status":{"type":"string"},"vat_sek":{"type":"integer"}},"required":["addons","id","issued_at","net_sek","number","period","plan","recipient_id","recipient_kind","recipient_name","source","status","vat_sek"],"type":"object"},"Issue":{"properties":{"artifacts":{"items":{"$ref":"#/components/schemas/Artifact"},"type":"array"},"assignee":{"type":"string"},"child_count":{"type":"integer"},"child_done":{"type":"integer"},"children":{"items":{"$ref":"#/components/schemas/ChildIssue"},"type":"array"},"code":{"$ref":"#/components/schemas/CodeInfo","nullable":true},"comments":{"items":{"$ref":"#/components/schemas/Comment"},"type":"array"},"created_at":{"format":"date-time","type":"string"},"created_by":{"type":"string"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"description":{"type":"string"},"docs":{"items":{"$ref":"#/components/schemas/DocLink"},"type":"array"},"due_date":{"nullable":true,"type":"string"},"effort":{"type":"integer"},"feedback":{"$ref":"#/components/schemas/FeedbackInfo","nullable":true},"id":{"type":"integer"},"key":{"type":"string"},"label_history":{"items":{"$ref":"#/components/schemas/LabelChange"},"type":"array"},"labels":{"items":{"type":"string"},"type":"array"},"num":{"type":"integer"},"origin_by":{"type":"string"},"origin_kind":{"type":"string"},"origin_ref":{"type":"string"},"parent":{"$ref":"#/components/schemas/ChildIssue","nullable":true},"parent_key":{"type":"string"},"prio":{"type":"integer"},"project_slug":{"type":"string"},"sprint_carried":{"type":"boolean"},"sprint_id":{"type":"integer"},"sprint_name":{"type":"string"},"start_date":{"nullable":true,"type":"string"},"status":{"type":"string"},"summary":{"type":"string"},"summary_stale":{"type":"boolean"},"summary_updated_at":{"format":"date-time","nullable":true,"type":"string"},"time_minutes":{"type":"integer"},"title":{"type":"string"},"type":{"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["assignee","created_at","created_by","description","id","key","labels","num","origin_by","origin_kind","origin_ref","prio","project_slug","status","title","type","updated_at"],"type":"object"},"JoinRequest":{"properties":{"created_at":{"format":"date-time","type":"string"},"display":{"type":"string"},"email":{"type":"string"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["created_at","display","email","id","user_id"],"type":"object"},"LabelChange":{"properties":{"added":{"type":"boolean"},"at":{"format":"date-time","type":"string"},"label":{"type":"string"}},"required":["added","at","label"],"type":"object"},"MCPToolDocT":{"properties":{"description":{"type":"string"},"inputSchema":{},"name":{"type":"string"}},"required":["description","inputSchema","name"],"type":"object"},"Member":{"properties":{"created_at":{"format":"date-time","type":"string"},"display":{"type":"string"},"email":{"type":"string"},"projects":{"items":{"type":"string"},"type":"array"},"role":{"type":"string"},"user_id":{"type":"integer"}},"required":["created_at","display","email","role","user_id"],"type":"object"},"MemberDetail":{"properties":{"events":{"items":{"$ref":"#/components/schemas/PersonEvent"},"type":"array"},"keys":{"items":{"$ref":"#/components/schemas/MemberKey"},"type":"array"},"kinds_30d":{"additionalProperties":true,"type":"object"},"last_seen_here":{"format":"date-time","nullable":true,"type":"string"},"member":{"$ref":"#/components/schemas/Member"},"more":{"type":"boolean"},"open_issues":{"items":{"$ref":"#/components/schemas/MemberIssue"},"type":"array"},"total_30d":{"type":"integer"}},"required":["events","keys","kinds_30d","member","more","open_issues","total_30d"],"type":"object"},"MemberIssue":{"properties":{"key":{"type":"string"},"project_slug":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"}},"required":["key","project_slug","status","title"],"type":"object"},"MemberKey":{"properties":{"created_at":{"format":"date-time","type":"string"},"id":{"type":"integer"},"last_used_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"type":"string"},"scope":{"type":"string"}},"required":["created_at","id","name","scope"],"type":"object"},"Notification":{"properties":{"created_at":{"format":"date-time","type":"string"},"enabled":{"type":"boolean"},"events":{"items":{"type":"string"},"type":"array"},"id":{"type":"integer"},"kind":{"type":"string"},"last_error":{"type":"string"},"last_ok_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"type":"string"},"project_slug":{"type":"string"},"url_hint":{"type":"string"}},"required":["created_at","enabled","events","id","kind","name","url_hint"],"type":"object"},"OrgPatch":{"properties":{"address":{"nullable":true,"type":"string"},"invoice_email":{"nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"org_number":{"nullable":true,"type":"string"},"owner_user_id":{"nullable":true,"type":"integer"},"vat_number":{"nullable":true,"type":"string"}},"type":"object"},"Organization":{"properties":{"address":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"type":"integer"},"invoice_email":{"type":"string"},"members":{"type":"integer"},"name":{"type":"string"},"org_number":{"type":"string"},"owner_name":{"type":"string"},"owner_user_id":{"nullable":true,"type":"integer"},"plan_set":{"$ref":"#/components/schemas/PlanSet"},"slug":{"type":"string"},"vat_number":{"type":"string"},"workspaces":{"type":"integer"}},"required":["address","created_at","id","invoice_email","members","name","org_number","plan_set","slug","vat_number","workspaces"],"type":"object"},"Overrides":{"properties":{"features":{"additionalProperties":true,"type":"object"},"limits":{"additionalProperties":true,"type":"object"}},"type":"object"},"PersonEvent":{"properties":{"actor_type":{"type":"string"},"at":{"format":"date-time","type":"string"},"id":{"type":"integer"},"issue_key":{"type":"string"},"kind":{"type":"string"},"source":{"type":"string"},"text":{"type":"string"},"workspace":{"type":"string"},"workspace_name":{"type":"string"}},"required":["actor_type","at","id","kind","source","text","workspace","workspace_name"],"type":"object"},"PersonKey":{"properties":{"active_workspace":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"type":"integer"},"last_used_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"type":"string"},"scope":{"type":"string"},"workspace":{"type":"string"},"workspace_name":{"type":"string"}},"required":["created_at","id","name","scope","workspace","workspace_name"],"type":"object"},"PersonTimeline":{"properties":{"events":{"items":{"$ref":"#/components/schemas/PersonEvent"},"type":"array"},"kinds_30d":{"additionalProperties":true,"type":"object"},"more":{"type":"boolean"},"total_30d":{"type":"integer"},"workspaces":{"items":{"$ref":"#/components/schemas/PersonWorkspaceCount"},"type":"array"}},"required":["events","kinds_30d","more","total_30d","workspaces"],"type":"object"},"PersonWorkspaceCount":{"properties":{"count":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["count","name","slug"],"type":"object"},"PlanSet":{"properties":{"addons":{"items":{"type":"string"},"type":"array"},"comp_note":{"type":"string"},"comped":{"type":"boolean"},"overrides":{"$ref":"#/components/schemas/Overrides"},"plan":{"type":"string"},"plan_until":{"format":"date-time","nullable":true,"type":"string"},"price_sek":{"nullable":true,"type":"integer"}},"required":["addons","comped","overrides","plan"],"type":"object"},"Project":{"properties":{"agent":{"type":"boolean"},"agent_labels":{"$ref":"#/components/schemas/AgentLabels"},"closed_at":{"format":"date-time","nullable":true,"type":"string"},"color":{"type":"string"},"columns":{"items":{"$ref":"#/components/schemas/ColumnConfig"},"type":"array"},"columns_inherited":{"type":"boolean"},"created_at":{"format":"date-time","type":"string"},"description":{"type":"string"},"feedback":{"type":"boolean"},"id":{"type":"integer"},"info":{"type":"string"},"key":{"type":"string"},"name":{"type":"string"},"open_count":{"type":"integer"},"repo":{"type":"string"},"slug":{"type":"string"},"sprints":{"type":"boolean"},"types":{"items":{"type":"string"},"type":"array"},"types_inherited":{"type":"boolean"}},"required":["agent","agent_labels","columns","created_at","description","id","info","key","name","open_count","repo","slug","sprints","types"],"type":"object"},"ProjectLead":{"properties":{"key":{"type":"string"},"median_h":{"nullable":true,"type":"number"},"n":{"type":"integer"},"name":{"type":"string"},"p90_h":{"nullable":true,"type":"number"},"project_slug":{"type":"string"}},"required":["key","n","name","project_slug"],"type":"object"},"ProjectStats":{"properties":{"by_label":{"items":{"$ref":"#/components/schemas/StatsBucket"},"type":"array"},"by_type":{"items":{"$ref":"#/components/schemas/StatsBucket"},"type":"array"},"created_range":{"type":"integer"},"done_range":{"type":"integer"},"lead":{"$ref":"#/components/schemas/StatsLead"},"open":{"type":"integer"},"series":{"items":{"$ref":"#/components/schemas/StatsWeek"},"type":"array"},"since":{"type":"string"},"weeks":{"type":"integer"}},"required":["by_label","by_type","created_range","done_range","lead","open","series","since","weeks"],"type":"object"},"PushSubscription":{"properties":{"created_at":{"format":"date-time","type":"string"},"device_name":{"type":"string"},"endpoint":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["created_at","device_name","endpoint","id"],"type":"object"},"Session":{"properties":{"created_at":{"format":"date-time","type":"string"},"id":{"type":"integer"},"last_seen_at":{"format":"date-time","type":"string"},"revoked_at":{"format":"date-time","nullable":true,"type":"string"},"support":{"type":"boolean"},"user_agent":{"type":"string"},"user_id":{"type":"integer"}},"required":["created_at","id","last_seen_at","support","user_agent","user_id"],"type":"object"},"Sprint":{"properties":{"carried":{"type":"integer"},"closed_at":{"format":"date-time","nullable":true,"type":"string"},"created_at":{"format":"date-time","type":"string"},"done":{"type":"integer"},"done_points":{"type":"integer"},"end_date":{"type":"string"},"goal":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"points":{"type":"integer"},"project_slug":{"type":"string"},"start_date":{"type":"string"},"status":{"type":"string"},"total":{"type":"integer"}},"required":["carried","created_at","done","done_points","end_date","id","name","points","project_slug","start_date","status","total"],"type":"object"},"SprintRef":{"properties":{"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"type":"object"},"SprintReport":{"properties":{"next_sprint":{"$ref":"#/components/schemas/SprintRef","nullable":true},"people":{"items":{"$ref":"#/components/schemas/SprintReportPerson"},"type":"array"},"snapshot":{"type":"boolean"},"sprint":{"$ref":"#/components/schemas/Sprint"},"totals":{"$ref":"#/components/schemas/SprintReportTotals"}},"required":["people","snapshot","sprint","totals"],"type":"object"},"SprintReportIssue":{"properties":{"carried":{"type":"boolean"},"effort":{"type":"integer"},"key":{"type":"string"},"minutes":{"type":"integer"},"points":{"type":"integer"},"prio":{"type":"integer"},"status":{"type":"string"},"title":{"type":"string"}},"required":["carried","key","minutes","points","prio","status","title"],"type":"object"},"SprintReportPerson":{"properties":{"assignee":{"type":"string"},"cards":{"type":"integer"},"carried":{"type":"integer"},"done":{"type":"integer"},"done_points":{"type":"integer"},"issues":{"items":{"$ref":"#/components/schemas/SprintReportIssue"},"type":"array"},"minutes":{"type":"integer"},"points":{"type":"integer"},"rejected":{"type":"integer"}},"required":["assignee","cards","carried","done","done_points","issues","minutes","points","rejected"],"type":"object"},"SprintReportTotals":{"properties":{"cards":{"type":"integer"},"carried":{"type":"integer"},"done":{"type":"integer"},"done_points":{"type":"integer"},"minutes":{"type":"integer"},"points":{"type":"integer"},"rejected":{"type":"integer"}},"required":["cards","carried","done","done_points","minutes","points","rejected"],"type":"object"},"SprintStats":{"properties":{"burndown":{"items":{"$ref":"#/components/schemas/BurnPoint"},"type":"array"},"issues":{"items":{"$ref":"#/components/schemas/Issue"},"type":"array"},"locked":{"items":{"type":"string"},"type":"array"},"sprint":{"$ref":"#/components/schemas/Sprint"},"velocity":{"items":{"$ref":"#/components/schemas/VelocityPoint"},"type":"array"}},"required":["burndown","issues","sprint","velocity"],"type":"object"},"StatsBucket":{"properties":{"done":{"type":"integer"},"name":{"type":"string"},"open":{"type":"integer"}},"required":["done","name","open"],"type":"object"},"StatsLead":{"properties":{"median_h":{"nullable":true,"type":"number"},"n":{"type":"integer"},"p90_h":{"nullable":true,"type":"number"}},"required":["n"],"type":"object"},"StatsWeek":{"properties":{"created":{"type":"integer"},"done":{"type":"integer"},"lead_median_h":{"nullable":true,"type":"number"},"week":{"type":"string"}},"required":["created","done","week"],"type":"object"},"TimeEntry":{"properties":{"author":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"day":{"type":"string"},"id":{"type":"integer"},"issue_key":{"type":"string"},"issue_title":{"type":"string"},"minutes":{"type":"integer"},"note":{"type":"string"},"user_id":{"type":"integer"}},"required":["author","created_at","day","id","issue_key","minutes"],"type":"object"},"TimeIssueSum":{"properties":{"key":{"type":"string"},"minutes":{"type":"integer"},"title":{"type":"string"}},"required":["key","minutes","title"],"type":"object"},"TimeReport":{"properties":{"by_issue":{"items":{"$ref":"#/components/schemas/TimeIssueSum"},"type":"array"},"by_label":{"items":{"$ref":"#/components/schemas/TimeSum"},"type":"array"},"by_user":{"items":{"$ref":"#/components/schemas/TimeSum"},"type":"array"},"by_week":{"items":{"$ref":"#/components/schemas/TimeSum"},"type":"array"},"since":{"type":"string"},"total_minutes":{"type":"integer"},"weeks":{"type":"integer"}},"required":["by_issue","by_label","by_user","by_week","since","total_minutes","weeks"],"type":"object"},"TimeSum":{"properties":{"minutes":{"type":"integer"},"name":{"type":"string"}},"required":["minutes","name"],"type":"object"},"Timer":{"properties":{"author":{"type":"string"},"issue_key":{"type":"string"},"issue_title":{"type":"string"},"note":{"type":"string"},"started_at":{"format":"date-time","type":"string"}},"required":["author","issue_key","issue_title","started_at"],"type":"object"},"TypeConfig":{"properties":{"builtin":{"type":"boolean"},"disabled":{"type":"boolean"},"name":{"type":"string"}},"required":["builtin","name"],"type":"object"},"UsagePoint":{"properties":{"at":{"format":"date-time","type":"string"},"errors":{"type":"integer"},"requests":{"type":"integer"}},"required":["at","errors","requests"],"type":"object"},"VelocityPoint":{"properties":{"done_points":{"type":"integer"},"id":{"type":"integer"},"name":{"type":"string"},"points":{"type":"integer"},"status":{"type":"string"}},"required":["done_points","id","name","points","status"],"type":"object"},"Webhook":{"properties":{"created_at":{"format":"date-time","type":"string"},"id":{"type":"integer"},"url":{"type":"string"}},"required":["created_at","id","url"],"type":"object"},"attentionOut":{"properties":{"items":{"items":{"$ref":"#/components/schemas/Issue"},"type":"array"},"total":{"type":"integer"}},"required":["items","total"],"type":"object"},"closeSprintBody":{"properties":{"carry":{"type":"string"}},"required":["carry"],"type":"object"},"closeSprintOut":{"properties":{"next":{"$ref":"#/components/schemas/Sprint","nullable":true},"sprint":{"$ref":"#/components/schemas/Sprint","nullable":true}},"type":"object"},"commentBody":{"properties":{"body":{"type":"string"},"internal":{"type":"boolean"},"summary":{"type":"string"}},"required":["body"],"type":"object"},"confirmBody":{"properties":{"confirm":{"type":"string"}},"required":["confirm"],"type":"object"},"createDocBody":{"properties":{"body":{"type":"string"},"color":{"type":"string"},"folder_id":{"nullable":true,"type":"integer"},"kind":{"type":"string"},"project_slug":{"type":"string"},"title":{"type":"string"}},"required":["title"],"type":"object"},"createFolderBody":{"properties":{"color":{"type":"string"},"name":{"type":"string"},"parent_id":{"nullable":true,"type":"integer"}},"required":["name"],"type":"object"},"createIssueReq":{"properties":{"assignee":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"effort":{"type":"integer"},"labels":{"items":{"type":"string"},"type":"array"},"origin_by":{"type":"string"},"origin_ref":{"type":"string"},"parent":{"type":"string"},"prio":{"type":"integer"},"sprint_id":{"type":"integer"},"start_date":{"type":"string"},"summary":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"}},"required":["title"],"type":"object"},"createProjectBody":{"properties":{"color":{"type":"string"},"description":{"type":"string"},"key":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["key","name","slug"],"type":"object"},"createWorkspaceBody":{"properties":{"name":{"type":"string"},"project":{"properties":{"key":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["key","name","slug"],"type":"object"}},"required":["name","project"],"type":"object"},"docIssueBody":{"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"errorOut":{"properties":{"error":{"type":"string"}},"required":["error"],"type":"object"},"feedbackBody":{"properties":{"body":{"type":"string"},"kind":{"type":"string"},"title":{"type":"string"}},"required":["body","kind","title"],"type":"object"},"inviteBody":{"properties":{"email":{"type":"string"},"projects":{"items":{"type":"string"},"type":"array"},"role":{"type":"string"}},"required":["email"],"type":"object"},"invoicePatch":{"properties":{"note":{"type":"string"},"status":{"type":"string"}},"required":["note","status"],"type":"object"},"keyBody":{"properties":{"name":{"type":"string"},"projects":{"items":{"type":"string"},"type":"array"},"scope":{"type":"string"}},"required":["name"],"type":"object"},"logTimeBody":{"properties":{"day":{"type":"string"},"minutes":{"type":"integer"},"note":{"type":"string"}},"required":["minutes"],"type":"object"},"notificationBody":{"properties":{"enabled":{"nullable":true,"type":"boolean"},"events":{"items":{"type":"string"},"type":"array"},"kind":{"type":"string"},"name":{"type":"string"},"project_slug":{"type":"string"},"url":{"type":"string"}},"required":["kind","name","url"],"type":"object"},"overviewGraphsOut":{"properties":{"lead":{"items":{"$ref":"#/components/schemas/ProjectLead"},"type":"array"},"lead_days":{"type":"integer"},"sprints":{"items":{"$ref":"#/components/schemas/Sprint"},"type":"array"}},"required":["lead","lead_days","sprints"],"type":"object"},"pushSubscriptionReq":{"properties":{"device_name":{"type":"string"},"endpoint":{"type":"string"},"keys":{"properties":{"auth":{"type":"string"},"p256dh":{"type":"string"}},"required":["auth","p256dh"],"type":"object"},"old_endpoint":{"type":"string"}},"required":["device_name","endpoint","keys","old_endpoint"],"type":"object"},"replyBody":{"properties":{"body":{"type":"string"}},"required":["body"],"type":"object"},"resolveMergeBody":{"properties":{"action":{"type":"string"},"pr_id":{"type":"integer"},"status":{"type":"string"}},"required":["action","pr_id","status"],"type":"object"},"roleBody":{"properties":{"role":{"type":"string"}},"required":["role"],"type":"object"},"setPlanBody":{"properties":{"addons":{"items":{"type":"string"},"nullable":true,"type":"array"},"overrides":{"$ref":"#/components/schemas/Overrides","nullable":true},"plan":{"nullable":true,"type":"string"},"plan_until":{"nullable":true,"type":"string"}},"type":"object"},"settingsBody":{"properties":{"columns":{"items":{"$ref":"#/components/schemas/ColumnConfig"},"nullable":true,"type":"array"},"types_config":{"items":{"$ref":"#/components/schemas/TypeConfig"},"nullable":true,"type":"array"}},"type":"object"},"sprintBody":{"properties":{"end_date":{"type":"string"},"goal":{"type":"string"},"name":{"type":"string"},"start":{"type":"boolean"},"start_date":{"type":"string"}},"required":["end_date","name","start_date"],"type":"object"},"startTimerBody":{"properties":{"note":{"type":"string"}},"type":"object"},"stopTimerBody":{"properties":{"discard":{"type":"boolean"},"note":{"type":"string"}},"type":"object"},"timeOut":{"properties":{"entries":{"items":{"$ref":"#/components/schemas/TimeEntry"},"type":"array"},"total_minutes":{"type":"integer"}},"required":["entries","total_minutes"],"type":"object"},"timerOut":{"properties":{"logged":{"$ref":"#/components/schemas/TimeEntry","nullable":true},"timer":{"$ref":"#/components/schemas/Timer","nullable":true}},"type":"object"},"tokenOut":{"properties":{"id":{"type":"integer"},"name":{"type":"string"},"token":{"type":"string"}},"required":["id","name","token"],"type":"object"},"updateDocBody":{"properties":{"body":{"nullable":true,"type":"string"},"color":{"nullable":true,"type":"string"},"folder_id":{"nullable":true,"type":"integer"},"move_folder":{"type":"boolean"},"project_slug":{"nullable":true,"type":"string"},"title":{"nullable":true,"type":"string"}},"type":"object"},"updateFolderBody":{"properties":{"color":{"nullable":true,"type":"string"},"move_parent":{"type":"boolean"},"name":{"nullable":true,"type":"string"},"parent_id":{"nullable":true,"type":"integer"}},"type":"object"},"updateIssueBody":{"properties":{"assignee":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"due_date":{"nullable":true,"type":"string"},"effort":{"nullable":true,"type":"integer"},"labels":{"items":{"type":"string"},"nullable":true,"type":"array"},"prio":{"nullable":true,"type":"integer"},"sprint_id":{"nullable":true,"type":"integer"},"start_date":{"nullable":true,"type":"string"},"status":{"nullable":true,"type":"string"},"summary":{"nullable":true,"type":"string"},"title":{"nullable":true,"type":"string"},"type":{"nullable":true,"type":"string"}},"type":"object"},"updatePlanBody":{"properties":{"features":{"additionalProperties":true,"nullable":true,"type":"object"},"limits":{"additionalProperties":true,"nullable":true,"type":"object"},"name":{"nullable":true,"type":"string"},"price_sek":{"nullable":true,"type":"integer"},"published":{"nullable":true,"type":"boolean"}},"type":"object"},"updateProjectBody":{"properties":{"agent":{"nullable":true,"type":"boolean"},"agent_labels":{"$ref":"#/components/schemas/AgentLabels","nullable":true},"closed":{"nullable":true,"type":"boolean"},"color":{"nullable":true,"type":"string"},"columns":{"items":{"$ref":"#/components/schemas/ColumnConfig"},"nullable":true,"type":"array"},"description":{"nullable":true,"type":"string"},"info":{"nullable":true,"type":"string"},"key":{"nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"repo":{"nullable":true,"type":"string"},"sprints":{"nullable":true,"type":"boolean"},"types":{"items":{"type":"string"},"nullable":true,"type":"array"}},"type":"object"},"updateSprintBody":{"properties":{"end_date":{"nullable":true,"type":"string"},"goal":{"nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"start_date":{"nullable":true,"type":"string"},"status":{"nullable":true,"type":"string"}},"type":"object"},"uploadOut":{"properties":{"id":{"type":"string"},"url":{"type":"string"}},"required":["id","url"],"type":"object"},"usageOut":{"properties":{"api":{"items":{"$ref":"#/components/schemas/UsagePoint"},"type":"array"},"bucket":{"type":"string"},"mcp":{"items":{"$ref":"#/components/schemas/UsagePoint"},"type":"array"},"sent":{"items":{"$ref":"#/components/schemas/UsagePoint"},"type":"array"},"since":{"format":"date-time","type":"string"}},"required":["bucket","since"],"type":"object"},"webhookBody":{"properties":{"secret":{"type":"string"},"url":{"type":"string"}},"required":["url"],"type":"object"},"workspaceBody":{"properties":{"color":{"nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"}},"type":"object"}},"securitySchemes":{"apiKey":{"bearerFormat":"tk_…","description":"API-nyckel från Inställningar → API-nycklar.","scheme":"bearer","type":"http"},"session":{"description":"Inloggad person i webbappen.","in":"cookie","name":"tasks_session","type":"apiKey"}}},"info":{"description":"REST-API:t bakom tasks.nu. Samma nyckel fungerar för MCP på /mcp. JSON in, JSON ut, alla tider i RFC 3339.","title":"tasks API","version":"v0.3.18"},"openapi":"3.1.0","paths":{"/api/admin/audit":{"get":{"operationId":"get_api_admin_audit","parameters":[{"description":"","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Adminlogg","tags":["Admin"],"x-auth":"superadmin","x-summary-en":"Admin log"}},"/api/admin/events":{"get":{"description":"Superadmin. Samma logg som /api/events/search men över alla workspaces, med adminlogens rader invävda som slaget admin, och sortering på valfri kolumn. Faceterna får en workspace-axel.","operationId":"get_api_admin_events","parameters":[{"description":"","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"who","required":false,"schema":{"type":"string"}},{"description":"loggens slag eller admin","in":"query","name":"kind","required":false,"schema":{"type":"string"}},{"description":"workspace-slug, kan upprepas","in":"query","name":"workspace","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"project","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"actor","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"since","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"until","required":false,"schema":{"type":"string"}},{"description":"kind, who, actor, workspace eller project; annars tid","in":"query","name":"sort","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"limit","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"offset","required":false,"schema":{"type":"string"}},{"description":"csv","in":"query","name":"format","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Adminloggen","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. The same log as /api/events/search across all workspaces, with the admin audit rows woven in as kind admin, sortable by any column. Facets gain a workspace axis.","x-summary-en":"Admin log"}},"/api/admin/events/summary":{"get":{"description":"Superadmin. Händelser per dygn och vem, över alla workspaces.","operationId":"get_api_admin_events_summary","parameters":[{"description":"","in":"query","name":"days","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Adminloggens dygnsstaplar","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. Events per day and who, across all workspaces.","x-summary-en":"Admin log day bars"}},"/api/admin/finance/forecast":{"get":{"description":"Superadmin. Tolv månader framåt i tre scenarier ur de senaste månadernas tillväxt, churn, konvertering och expansion; kommande förnyelser, planer som löper ut och free-workspaces över 80 % av ett tak.","operationId":"get_api_admin_finance_forecast","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Ekonomi: prognos","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. Twelve months ahead in three scenarios from recent growth, churn, conversion and expansion; upcoming renewals, plans that expire and free workspaces above 80 % of a limit.","x-summary-en":"Finance: forecast"}},"/api/admin/finance/invoices":{"get":{"description":"Superadmin. Fakturaunderlaget per workspace och månad med moms och status.","operationId":"get_api_admin_finance_invoices","parameters":[{"description":"YYYY-MM, tom = alla","in":"query","name":"period","required":false,"schema":{"type":"string"}},{"description":"open, paid, failed eller credited","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"csv för export","in":"query","name":"format","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Invoice"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Fakturor","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. The invoice basis per workspace and month with VAT and status.","x-summary-en":"Invoices"},"post":{"description":"Superadmin. En öppen faktura per betalande workspace för perioden; de som redan finns hoppas över. Svarar med hur många som skapades.","operationId":"post_api_admin_finance_invoices","parameters":[{"description":"YYYY-MM, standard innevarande månad","in":"query","name":"period","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Generera fakturor","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. One open invoice per paying workspace for the period; existing ones are skipped. Answers with how many were created.","x-summary-en":"Generate invoices"}},"/api/admin/finance/invoices/{id}":{"patch":{"description":"Superadmin. status open, paid, failed eller credited, och en anteckning. paid stämplar paid_at.","operationId":"patch_api_admin_finance_invoices_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/invoicePatch"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invoice"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Ändra fakturastatus","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. status open, paid, failed or credited, and a note. paid stamps paid_at.","x-summary-en":"Update invoice status"}},"/api/admin/finance/overview":{"get":{"description":"Superadmin. MRR, ARR, betalande, ARPA, churn, månadens rörelser (ny, expansion, kontraktion, churn, återkomst), MRR per månad delat per plan, tabell per plan och konvertering free → betald. Räknas ur plan_events, kassaboken över planbyten.","operationId":"get_api_admin_finance_overview","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Ekonomi: översikt","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. MRR, ARR, paying workspaces, ARPA, churn, the month's movements (new, expansion, contraction, churn, reactivation), MRR per month split by plan, a table per plan and free → paid conversion. Computed from plan_events, the ledger of plan changes.","x-summary-en":"Finance: overview"}},"/api/admin/finance/report":{"get":{"description":"Superadmin. Intäkter per plan och tillägg (netto, moms, brutto) mot föregående månad, månadens siffror, kohortretention och listan över månader med skickat-status.","operationId":"get_api_admin_finance_report","parameters":[{"description":"YYYY-MM, standard innevarande månad","in":"query","name":"period","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Ekonomi: månadsrapport","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. Revenue per plan and add-ons (net, VAT, gross) against the previous month, the month's numbers, cohort retention and the list of months with sent status.","x-summary-en":"Finance: monthly report"}},"/api/admin/finance/report/{period}/sent":{"post":{"description":"Superadmin. Markerar att månadens underlag gått till bokföringen.","operationId":"post_api_admin_finance_report_period_sent","parameters":[{"description":"","in":"path","name":"period","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Markera månad skickad","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. Marks that the month's basis went to bookkeeping.","x-summary-en":"Mark month as sent"}},"/api/admin/keys/{id}":{"delete":{"description":"Oavsett workspace. Loggas.","operationId":"delete_api_admin_keys_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Ta bort en nyckel","tags":["Admin"],"x-auth":"superadmin","x-description-en":"Regardless of workspace. Logged.","x-summary-en":"Remove a key"}},"/api/admin/orgs":{"get":{"description":"Superadmin. Organisationer med ägare (fakturamottagare), fakturauppgifter, antal konton och workspaces, och det satta.","operationId":"get_api_admin_orgs","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Organization"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Organisationer","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. Organizations with owner (invoice recipient), invoice details, account and workspace counts, and what is set.","x-summary-en":"Organizations"},"post":{"description":"Superadmin. name, slug och owner_user_id; ägaren blir medlem och ärver organisationens plan.","operationId":"post_api_admin_orgs","responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Skapa organisation","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. name, slug and owner_user_id; the owner becomes a member and inherits the organization's plan.","x-summary-en":"Create organization"}},"/api/admin/orgs/{id}":{"delete":{"description":"Superadmin. Kontona står kvar med sina egna planer.","operationId":"delete_api_admin_orgs_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Radera organisation","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. The accounts remain with their own plans.","x-summary-en":"Delete organization"},"get":{"description":"Superadmin. Organisationen, dess konton och workspaces.","operationId":"get_api_admin_orgs_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"En organisation","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. The organization, its accounts and workspaces.","x-summary-en":"One organization"},"patch":{"description":"Superadmin. Namn, ägare, faktura-e-post, org.nr, momsnr, adress.","operationId":"patch_api_admin_orgs_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgPatch"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Ändra organisation","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. Name, owner, invoice e-mail, org number, VAT number, address.","x-summary-en":"Update organization"}},"/api/admin/orgs/{id}/members":{"post":{"description":"Superadmin. {user_id}. Kontot ärver organisationens plan.","operationId":"post_api_admin_orgs_id_members","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Lägg konto i organisation","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. {user_id}. The account inherits the organization's plan.","x-summary-en":"Add account to organization"}},"/api/admin/orgs/{id}/members/{uid}":{"delete":{"description":"Superadmin. Ägaren måste bytas först.","operationId":"delete_api_admin_orgs_id_members_uid","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"","in":"path","name":"uid","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Ta konto ur organisation","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. Change the owner first.","x-summary-en":"Remove account from organization"}},"/api/admin/orgs/{id}/plan":{"get":{"description":"Superadmin. Som för person.","operationId":"get_api_admin_orgs_id_plan","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Plan på organisation","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. As for a person.","x-summary-en":"An organization's plan"},"patch":{"description":"Superadmin. Som för person; gäller alla konton i organisationen.","operationId":"patch_api_admin_orgs_id_plan","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/setPlanBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Sätt plan på organisation","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. As for a person; applies to every account in the organization.","x-summary-en":"Set an organization's plan"}},"/api/admin/plans/{slug}":{"patch":{"description":"Superadmin. Namn, pris och varje tak och funktion; okända nycklar avvisas.","operationId":"patch_api_admin_plans_slug","parameters":[{"description":"","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/updatePlanBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Ändra en plans värden","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. Name, price and every limit and feature; unknown keys are rejected.","x-summary-en":"Update a plan's values"}},"/api/admin/sessions/{id}":{"delete":{"description":"Nästa anrop med den sessionen avvisas. Loggas.","operationId":"delete_api_admin_sessions_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Stäng en session","tags":["Admin"],"x-auth":"superadmin","x-description-en":"The next call with that session is rejected. Logged.","x-summary-en":"Close one session"}},"/api/admin/stats":{"get":{"operationId":"get_api_admin_stats","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Statistik","tags":["Admin"],"x-auth":"superadmin","x-summary-en":"Statistics"}},"/api/admin/support/leave":{"post":{"operationId":"post_api_admin_support_leave","responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Lämna supportläge","tags":["Admin"],"x-auth":"superadmin","x-summary-en":"Leave support mode"}},"/api/admin/usage":{"get":{"operationId":"get_api_admin_usage","parameters":[{"description":"workspace, user eller key","in":"query","name":"group","required":false,"schema":{"type":"string"}},{"description":"7d, 30d eller 90d","in":"query","name":"range","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Användning per workspace, konto eller nyckel","tags":["Admin"],"x-auth":"superadmin","x-summary-en":"Usage per workspace, account or key"}},"/api/admin/users":{"get":{"operationId":"get_api_admin_users","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Alla konton","tags":["Admin"],"x-auth":"superadmin","x-summary-en":"All accounts"}},"/api/admin/users/{id}":{"delete":{"operationId":"delete_api_admin_users_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Radera konto","tags":["Admin"],"x-auth":"superadmin","x-summary-en":"Delete account"},"get":{"operationId":"get_api_admin_users_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Ett konto i detalj","tags":["Admin"],"x-auth":"superadmin","x-summary-en":"One account in detail"},"patch":{"description":"superadmin, disabled eller display.","operationId":"patch_api_admin_users_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Ändra konto","tags":["Admin"],"x-auth":"superadmin","x-description-en":"superadmin, disabled or display.","x-summary-en":"Update account"}},"/api/admin/users/{id}/events":{"get":{"description":"Allt personen gjort, över alla workspaces, nyast först. Äldre händelser matchas på visningsnamn.","operationId":"get_api_admin_users_id_events","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"","in":"query","name":"kind","required":false,"schema":{"type":"string"}},{"description":"slug","in":"query","name":"workspace","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonTimeline"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Kontots tidslinje","tags":["Admin"],"x-auth":"superadmin","x-description-en":"Everything the person did, across all workspaces, newest first. Older events are matched on display name.","x-summary-en":"The account's timeline"}},"/api/admin/users/{id}/export":{"get":{"description":"JSON-fil: konto, inloggningar, medlemskap, sessioner, nycklar, inbjudningar, ärenden, kort, kommentarer, dokument, bilder (metadata) och händelser. Loggas.","operationId":"get_api_admin_users_id_export","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Exportera allt om ett konto","tags":["Admin"],"x-auth":"superadmin","x-description-en":"JSON file: account, sign-ins, memberships, sessions, keys, invites, cases, cards, comments, documents, images (metadata) and events. Logged.","x-summary-en":"Export everything about an account"}},"/api/admin/users/{id}/keys":{"get":{"operationId":"get_api_admin_users_id_keys","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PersonKey"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Kontots API-nycklar","tags":["Admin"],"x-auth":"superadmin","x-summary-en":"The account's API keys"}},"/api/admin/users/{id}/logout":{"post":{"operationId":"post_api_admin_users_id_logout","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Logga ut kontot överallt","tags":["Admin"],"x-auth":"superadmin","x-summary-en":"Sign the account out everywhere"}},"/api/admin/users/{id}/plan":{"get":{"description":"Superadmin. Planen sitter på personen (TSK-151): det satta (plan, plan_until, addons, overrides, price_sek, comped), det effektiva, och användningen: taken per person och varje workspace hen betalar för. org anges när en organisations plan gäller i stället.","operationId":"get_api_admin_users_id_plan","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Plan på person","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. The plan sits on the person: what is set, what applies, and usage: per-person limits and every workspace they pay for. org is given when an organization's plan applies instead.","x-summary-en":"A person's plan"},"patch":{"description":"Superadmin. plan, plan_until (YYYY-MM-DD, tom tar bort), addons, overrides ({limits:{}, features:{}}), price_sek (0 = planens), comped och comp_note. Gäller alla workspaces personen äger. Loggas som diff.","operationId":"patch_api_admin_users_id_plan","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/setPlanBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Sätt plan på person","tags":["Admin"],"x-auth":"session","x-description-en":"Superadmin. plan, plan_until (YYYY-MM-DD, empty removes), addons, overrides, price_sek (0 = the plan's), comped and comp_note. Applies to every workspace the person owns. Audited as a diff.","x-summary-en":"Set a person's plan"}},"/api/admin/users/{id}/sessions":{"get":{"operationId":"get_api_admin_users_id_sessions","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Session"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Kontots sessioner","tags":["Admin"],"x-auth":"superadmin","x-summary-en":"The account's sessions"}},"/api/admin/users/{id}/usage":{"get":{"operationId":"get_api_admin_users_id_usage","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"","in":"query","name":"range","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Kontots användning","tags":["Admin"],"x-auth":"superadmin","x-summary-en":"Account usage"}},"/api/admin/workspaces":{"get":{"operationId":"get_api_admin_workspaces","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Alla workspaces","tags":["Admin"],"x-auth":"superadmin","x-summary-en":"All workspaces"}},"/api/admin/workspaces/{id}":{"delete":{"operationId":"delete_api_admin_workspaces_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/confirmBody"}}},"required":true},"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Radera workspace","tags":["Admin"],"x-auth":"superadmin","x-summary-en":"Delete workspace"},"patch":{"operationId":"patch_api_admin_workspaces_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Stäng av eller öppna workspace","tags":["Admin"],"x-auth":"superadmin","x-summary-en":"Disable or enable workspace"}},"/api/admin/workspaces/{id}/support":{"post":{"description":"Läsläge i kundens workspace i en timme. Loggas.","operationId":"post_api_admin_workspaces_id_support","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Öppna supportläge","tags":["Admin"],"x-auth":"superadmin","x-description-en":"Read-only mode in the customer's workspace for one hour. Logged.","x-summary-en":"Open support mode"}},"/api/artifacts/{id}":{"get":{"description":"Råfilen som text/html med Content-Security-Policy: sandbox allow-scripts — dokumentet får ett opakt origin och kan varken läsa kakor eller anropa API:t. Kräver inloggning som andra bilagor.","operationId":"get_api_artifacts_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Hämta artefakt","tags":["Bilagor"],"x-auth":"any","x-description-en":"The raw file as text/html with Content-Security-Policy: sandbox allow-scripts — the document gets an opaque origin and can neither read cookies nor call the API. Requires sign-in like other attachments.","x-summary-en":"Fetch artifact"}},"/api/attention":{"get":{"description":"Blockerade och väntande kort, senast ändrade först. total är hela antalet, oavsett limit — sidomenyns \"Behöver dig\" visar så många som får plats och behöver kunna säga hur många de är.","operationId":"get_api_attention","parameters":[{"description":"hur många kort som hämtas, 1-50 (standard 5)","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/attentionOut"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Kort som väntar","tags":["Kort"],"x-auth":"any","x-description-en":"Blocked and waiting cards, most recently changed first. total is the full count regardless of limit — the sidebar's \"Needs you\" shows as many as fit and needs to say how many there are.","x-summary-en":"Cards that are waiting"}},"/api/connections":{"get":{"description":"MCP-läget och varje notiskoppling med senaste leverans.","operationId":"get_api_connections","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Kopplingar i sidomenyn","tags":["Notiser"],"x-auth":"user","x-description-en":"The MCP state and every notification connection with its latest delivery.","x-summary-en":"Connections in the sidebar"}},"/api/docs":{"get":{"operationId":"get_api_docs","parameters":[{"description":"projektslug","in":"query","name":"project","required":false,"schema":{"type":"string"}},{"description":"mapp-id, 0 = roten","in":"query","name":"folder","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Doc"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Lista dokument","tags":["Dokument"],"x-auth":"any","x-summary-en":"List documents"},"post":{"description":"kind: md (standard) eller board. Ett ritbord (board) har JSON i body i stället för markdown och byter aldrig sort.","operationId":"post_api_docs","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createDocBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Doc"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Skapa dokument","tags":["Dokument"],"x-auth":"any","x-summary-en":"Create document"}},"/api/docs/{id}":{"delete":{"operationId":"delete_api_docs_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Radera dokument","tags":["Dokument"],"x-auth":"any","x-summary-en":"Delete document"},"get":{"operationId":"get_api_docs_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Doc"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ett dokument","tags":["Dokument"],"x-auth":"any","x-summary-en":"One document"},"patch":{"description":"Varje ändring av brödtexten sparar en revision. move_folder=true med folder_id 0 flyttar till roten. color: #rrggbb eller tom sträng för att ta bort färgen.","operationId":"patch_api_docs_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/updateDocBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Doc"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ändra dokument","tags":["Dokument"],"x-auth":"any","x-description-en":"Every body change saves a revision. move_folder=true with folder_id 0 moves it to the root.","x-summary-en":"Update document"}},"/api/docs/{id}/issues":{"delete":{"operationId":"delete_api_docs_id_issues","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"","in":"query","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ta bort kortlänk","tags":["Dokument"],"x-auth":"any","x-summary-en":"Remove card link"},"post":{"operationId":"post_api_docs_id_issues","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/docIssueBody"}}},"required":true},"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Länka kort till dokument","tags":["Dokument"],"x-auth":"any","x-summary-en":"Link card to document"}},"/api/docs/{id}/revisions":{"get":{"operationId":"get_api_docs_id_revisions","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"","in":"query","name":"limit","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"offset","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DocRevision"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Revisioner","tags":["Dokument"],"x-auth":"any","x-summary-en":"Revisions"}},"/api/docs/{id}/revisions/{rev}":{"get":{"operationId":"get_api_docs_id_revisions_rev","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"","in":"path","name":"rev","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocRevision"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"En revision","tags":["Dokument"],"x-auth":"any","x-summary-en":"One revision"}},"/api/events":{"get":{"operationId":"get_api_events","parameters":[{"description":"","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Event"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Flödet","tags":["Flöde"],"x-auth":"any","x-summary-en":"The feed"}},"/api/events/search":{"get":{"description":"who är vem-axeln (member/assistant/customer/system), kind vad som hände (created/moved/commented/doc/notis/time/other), status den status något flyttades till. who, kind och project får upprepas eller kommaseparras. since/until tar YYYY-MM-DD eller RFC3339; until räknas till dygnets slut. Svarar {events, more, facets} — faceterna är antalen bredvid filtervalen, räknade utan kryssen så siffrorna står still. facets=0 hoppar över dem. format=csv laddar ner hela träffmängden som CSV i stället för sidan.","operationId":"get_api_events_search","parameters":[{"description":"","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"who","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"kind","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"project","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"actor","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"issue","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"since","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"until","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"facets","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"format","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"limit","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"offset","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Event"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Sök i loggen","tags":["Flöde"],"x-auth":"any","x-description-en":"who is the who-axis (member/assistant/customer/system), kind is what happened (created/moved/commented/doc/notis/time/other), status the status something was moved to. who, kind and project may repeat or be comma-separated. since/until take YYYY-MM-DD or RFC3339; until counts to the end of the day. Answers {events, more, facets} — the facets are the counts beside the filter choices, counted without the ticks so the numbers hold still. facets=0 skips them. format=csv downloads the whole result set as CSV instead of the page.","x-summary-en":"Search the log"}},"/api/events/summary":{"get":{"description":"En rad per dygn (days 1–90, standard 14) med antal per vem-grupp. Dygn utan händelser kommer med som nollor.","operationId":"get_api_events_summary","parameters":[{"description":"","in":"query","name":"days","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Loggens dygnsstaplar","tags":["Flöde"],"x-auth":"any","x-description-en":"One row per day (days 1-90, default 14) with counts per who-group. Days without events come back as zeroes.","x-summary-en":"The log's daily bars"}},"/api/events/{id}":{"get":{"description":"Spåret är resten av historien på samma kort eller dokument. trail=0 hoppar över det.","operationId":"get_api_events_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"","in":"query","name":"trail","required":false,"schema":{"type":"string"}},{"description":"","in":"query","name":"trail_limit","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"En händelse med spåret","tags":["Flöde"],"x-auth":"any","x-description-en":"The trail is the rest of the history on the same card or document. trail=0 skips it.","x-summary-en":"One event with its trail"}},"/api/feedback":{"get":{"description":"Kundens vy: ärenden kontot rapporterat till tasks-teamet, oavsett workspace.","operationId":"get_api_feedback","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Mina ärenden","tags":["Support"],"x-auth":"user","x-description-en":"The customer view: reports this account has filed with the tasks team, regardless of workspace.","x-summary-en":"My reports"},"post":{"description":"kind: bugg, onskemal, fraga eller design. Blir ett kort i teamets feedbackprojekt.","operationId":"post_api_feedback","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/feedbackBody"}}},"required":true},"responses":{"201":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Rapportera","tags":["Support"],"x-auth":"user","x-description-en":"kind: bugg, onskemal, fraga or design. Becomes a card in the team's feedback project.","x-summary-en":"Report"}},"/api/feedback/uploads":{"post":{"operationId":"post_api_feedback_uploads","parameters":[{"description":"","in":"query","name":"name","required":false,"schema":{"type":"string"}}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/uploadOut"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Bild till ärende","tags":["Support"],"x-auth":"user","x-summary-en":"Image for a report"}},"/api/feedback/uploads/{id}":{"get":{"operationId":"get_api_feedback_uploads_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Hämta ärendebild","tags":["Support"],"x-auth":"user","x-summary-en":"Fetch report image"}},"/api/feedback/{key}":{"get":{"operationId":"get_api_feedback_key","parameters":[{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Ett ärende","tags":["Support"],"x-auth":"user","x-summary-en":"One report"}},"/api/feedback/{key}/comments":{"post":{"description":"Svaret återöppnar ärendet: väntande går till pågår, löst och avslutat tillbaka till mottaget.","operationId":"post_api_feedback_key_comments","parameters":[{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/replyBody"}}},"required":true},"responses":{"201":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Svara i ärende","tags":["Support"],"x-auth":"user","x-description-en":"A reply reopens the case: waiting goes to in progress, resolved and closed return to the inbox.","x-summary-en":"Reply in a report"}},"/api/folders":{"get":{"operationId":"get_api_folders","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Folder"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Mappar","tags":["Dokument"],"x-auth":"any","x-summary-en":"Folders"},"post":{"operationId":"post_api_folders","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createFolderBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Folder"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Skapa mapp","tags":["Dokument"],"x-auth":"any","x-summary-en":"Create folder"}},"/api/folders/{id}":{"delete":{"description":"Dokumenten i mappen flyttas till föräldern.","operationId":"delete_api_folders_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Radera mapp","tags":["Dokument"],"x-auth":"any","x-description-en":"Documents in the folder move to the parent.","x-summary-en":"Delete folder"},"patch":{"description":"move_parent=true med parent_id 0 flyttar till roten. color: #rrggbb eller tom sträng för att ta bort färgen.","operationId":"patch_api_folders_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/updateFolderBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Folder"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ändra mapp","tags":["Dokument"],"x-auth":"any","x-summary-en":"Update folder"}},"/api/integrations":{"get":{"description":"Installerade integrationer i workspacen, med repolista, läge vid merge och när mottagaren senast hörde något. Hemligheten följer aldrig med här.","operationId":"get_api_integrations","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Integrationer","tags":["Integrationer"],"x-auth":"admin","x-description-en":"Integrations installed in the workspace, with their repo list, merge behaviour and when the receiver last heard anything. The secret is never included here.","x-summary-en":"Integrations"},"post":{"description":"kind är github. Svaret bär hemligheten en enda gång — den lagras men visas aldrig igen, samma vana som API-nycklarna.","operationId":"post_api_integrations","responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Lägg till integration","tags":["Integrationer"],"x-auth":"admin","x-description-en":"kind is github. The reply carries the secret once — it is stored but never shown again, the same habit as API keys.","x-summary-en":"Add integration"}},"/api/integrations/{id}":{"delete":{"operationId":"delete_api_integrations_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ta bort integration","tags":["Integrationer"],"x-auth":"admin","x-summary-en":"Remove integration"},"patch":{"description":"on_merge är suggest, move eller nothing. repos ersätter hela listan; ett repo som tas bort lämnar sina commits kvar.","operationId":"patch_api_integrations_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ändra integration","tags":["Integrationer"],"x-auth":"admin","x-description-en":"on_merge is suggest, move or nothing. repos replaces the whole list; a repo that is removed leaves its commits behind.","x-summary-en":"Change integration"}},"/api/invite/{token}":{"get":{"description":"Vad inbjudan gäller, för landningssidan. Hastighetsbegränsad per IP.","operationId":"get_api_invite_token","parameters":[{"description":"","in":"path","name":"token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"summary":"Läs en inbjudan","tags":["Workspace"],"x-auth":"public","x-description-en":"What the invitation is for, for the landing page. Rate limited per IP.","x-summary-en":"Read an invitation"}},"/api/invite/{token}/accept":{"post":{"operationId":"post_api_invite_token_accept","parameters":[{"description":"","in":"path","name":"token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Acceptera inbjudan","tags":["Workspace"],"x-auth":"session","x-summary-en":"Accept invitation"}},"/api/invites":{"get":{"operationId":"get_api_invites","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Invite"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Inbjudningar","tags":["Workspace"],"x-auth":"admin","x-summary-en":"Invitations"},"post":{"description":"Skapar en länk som gäller sju dagar. Den som klickar och loggar in med samma e-post blir medlem, och löses in automatiskt vid nästa inloggning även utan länken. Med projects (slugs) delas bara de projekten: personen är admin inne i dem men når inget på workspace-nivå, och kan varken bjuda in, stänga projekt eller se API-nycklar.","operationId":"post_api_invites","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/inviteBody"}}},"required":true},"responses":{"201":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Bjud in","tags":["Workspace"],"x-auth":"admin","x-description-en":"Creates a link valid for seven days. Whoever clicks it and signs in with the same e-mail becomes a member, and is joined automatically at the next sign-in even without the link. With projects (slugs) only those projects are shared: the person is an admin inside them but reaches nothing at workspace level, and can neither invite, close projects nor see API keys.","x-summary-en":"Invite"}},"/api/invites/{id}":{"delete":{"operationId":"delete_api_invites_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Återkalla inbjudan","tags":["Workspace"],"x-auth":"admin","x-summary-en":"Revoke invitation"}},"/api/issues/search":{"get":{"operationId":"get_api_issues_search","parameters":[{"description":"","in":"query","name":"q","required":true,"schema":{"type":"string"}},{"description":"","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Issue"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Sök kort","tags":["Kort"],"x-auth":"any","x-summary-en":"Search cards"}},"/api/issues/{key}":{"delete":{"description":"Mjukradering: kortet hamnar i papperskorgen och kan återställas.","operationId":"delete_api_issues_key","parameters":[{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Radera kort","tags":["Kort"],"x-auth":"any","x-description-en":"Soft delete: the card goes to the bin and can be restored.","x-summary-en":"Delete card"},"get":{"description":"Med kommentarer, subtasks, förälder, länkade dokument och label_history, när labels sattes och togs bort.","operationId":"get_api_issues_key","parameters":[{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Issue"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ett kort","tags":["Kort"],"x-auth":"any","x-description-en":"With comments, subtasks, parent, linked documents and label_history, when labels were set and removed.","x-summary-en":"One card"},"patch":{"description":"Bara skickade fält ändras. Statusbyte loggas i flödet och triggar notiser.","operationId":"patch_api_issues_key","parameters":[{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/updateIssueBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Issue"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ändra kort","tags":["Kort"],"x-auth":"any","x-description-en":"Only the fields you send change. Status changes are logged in the feed and trigger notifications.","x-summary-en":"Update card"}},"/api/issues/{key}/artifacts":{"get":{"description":"Nyast först: id, namn, storlek, skapad och av vem.","operationId":"get_api_issues_key_artifacts","parameters":[{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Artifact"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Kortets artefakter","tags":["Bilagor"],"x-auth":"any","x-description-en":"Newest first: id, name, size, created and by whom.","x-summary-en":"The card's artifacts"},"post":{"description":"Kroppen är rå HTML med Content-Type text/html, max 2 MB. En fristående sida (allt inline) som visas på kortet i sandlåda: den kan köra script men inte nå kakor eller API:t. Räknas mot samma lagringstak som bilderna. Visas i appen under #/p/\u003cslug\u003e/\u003cnyckel\u003e/artefakt/\u003cid\u003e.","operationId":"post_api_issues_key_artifacts","parameters":[{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}},{"description":"visningsnamn","in":"query","name":"name","required":false,"schema":{"type":"string"}}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/uploadOut"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Lägg artefakt på kort","tags":["Bilagor"],"x-auth":"any","x-description-en":"The body is raw HTML with Content-Type text/html, max 2 MB. A self-contained page (everything inline) shown on the card in a sandbox: it may run scripts but cannot reach cookies or the API. Counts against the same storage limit as images. Shown in the app under #/p/\u003cslug\u003e/\u003ckey\u003e/artefakt/\u003cid\u003e.","x-summary-en":"Add artifact to card"}},"/api/issues/{key}/artifacts/{id}":{"delete":{"operationId":"delete_api_issues_key_artifacts_id","parameters":[{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}},{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ta bort artefakt","tags":["Bilagor"],"x-auth":"any","x-summary-en":"Remove artifact"}},"/api/issues/{key}/code":{"get":{"description":"PR:en, byggstatus och de commits som nämner nyckeln. connected säger om workspacen har någon integration alls — utan den skiljer man inte «inget kopplat» från «inget nämner kortet ännu».","operationId":"get_api_issues_key_code","parameters":[{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeInfo"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Koden på kortet","tags":["Kort"],"x-auth":"any","x-description-en":"The PR, its build status and the commits that mention the key. connected says whether the workspace has any integration at all — without it you cannot tell \"nothing connected\" from \"nothing mentions the card yet\".","x-summary-en":"Code on the card"}},"/api/issues/{key}/code/merge":{"post":{"description":"action move flyttar kortet till status (standard klar), keep låter det stå. Båda kvitterar förslaget så att det inte kommer tillbaka vid nästa händelse på samma PR.","operationId":"post_api_issues_key_code_merge","parameters":[{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/resolveMergeBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeInfo"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Svara på mergeförslaget","tags":["Kort"],"x-auth":"any","x-description-en":"action move sends the card to status (klar by default), keep leaves it. Both acknowledge the suggestion so it does not return on the next event for the same PR.","x-summary-en":"Answer the merge suggestion"}},"/api/issues/{key}/comments":{"post":{"description":"internal=true på ett kundärende gör kommentaren till en teamanteckning kunden inte ser.","operationId":"post_api_issues_key_comments","parameters":[{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/commentBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comment"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Kommentera","tags":["Kort"],"x-auth":"any","x-description-en":"internal=true on a customer case makes the comment a team note the customer never sees.","x-summary-en":"Comment"}},"/api/issues/{key}/restore":{"post":{"operationId":"post_api_issues_key_restore","parameters":[{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Issue"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Återställ kort","tags":["Kort"],"x-auth":"any","x-summary-en":"Restore card"}},"/api/issues/{key}/time":{"get":{"description":"Tidsposterna och summan i minuter.","operationId":"get_api_issues_key_time","parameters":[{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/timeOut"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Tid på kortet","tags":["Kort"],"x-auth":"any","x-description-en":"The time entries and the total in minutes.","x-summary-en":"Time on the card"},"post":{"description":"minutes 1-1440, day YYYY-MM-DD (standard idag), note valfri. Raderade kort och stängda projekt tar inte emot tid.","operationId":"post_api_issues_key_time","parameters":[{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/logTimeBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeEntry"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Logga tid","tags":["Kort"],"x-auth":"any","x-description-en":"minutes 1-1440, day YYYY-MM-DD (default today), note optional. Deleted cards and closed projects do not accept time.","x-summary-en":"Log time"}},"/api/issues/{key}/timer":{"post":{"description":"En timer per person. Är en annan redan igång stoppas den först och loggas som tidspost (returneras i logged), så man byter kort med ett anrop. note följer med till posten.","operationId":"post_api_issues_key_timer","parameters":[{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/startTimerBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/timerOut"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Starta timer","tags":["Kort"],"x-auth":"any","x-description-en":"One timer per person. If another is already running it is stopped first and logged as a time entry (returned in logged), so one call switches card. note is carried over to the entry.","x-summary-en":"Start timer"}},"/api/join-requests":{"get":{"operationId":"get_api_join_requests","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/JoinRequest"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Väntande ansökningar","tags":["Workspace"],"x-auth":"owner","x-summary-en":"Pending join requests"}},"/api/join-requests/{id}/{decision}":{"post":{"operationId":"post_api_join_requests_id_decision","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"approve eller decline","in":"path","name":"decision","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Godkänn eller avslå ansökan","tags":["Workspace"],"x-auth":"owner","x-summary-en":"Approve or decline a join request"}},"/api/keys":{"get":{"operationId":"get_api_keys","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/APIKey"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"API-nycklar","tags":["API-nycklar"],"x-auth":"admin","x-summary-en":"API keys"},"post":{"description":"token visas en gång och lagras hashad. Nyckeln räknas som admin i workspacen men kan inte röra medlemmar, inställningar eller andra nycklar. Kräver inloggad person. scope=account ger en kontonyckel som når alla dina workspaces med din roll i var och en (högst admin): välj workspace med MCP switch_workspace eller headern X-Workspace: \u003cslug\u003e i REST-anrop. projects (slugs) avgränsar en workspace-nyckel till de projekten: den ser och rör bara kort, dokument och händelser där, och räknas som medlem, inte admin.","operationId":"post_api_keys","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/keyBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/tokenOut"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Skapa API-nyckel","tags":["API-nycklar"],"x-auth":"admin","x-description-en":"token is shown once and stored hashed. The key counts as admin in the workspace but cannot touch members, settings or other keys. Requires a signed-in person. scope=account makes an account key that reaches all your workspaces with your role in each (admin at most): pick the workspace with MCP switch_workspace or the header X-Workspace: \u003cslug\u003e on REST calls.","x-summary-en":"Create API key"}},"/api/keys/{id}":{"delete":{"operationId":"delete_api_keys_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ta bort nyckel","tags":["API-nycklar"],"x-auth":"admin","x-summary-en":"Remove key"}},"/api/keys/{id}/rotate":{"post":{"description":"Ny token, samma namn och id. Den gamla slutar gälla direkt.","operationId":"post_api_keys_id_rotate","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/tokenOut"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Rotera nyckel","tags":["API-nycklar"],"x-auth":"admin","x-description-en":"New token, same name and id. The old one stops working immediately.","x-summary-en":"Rotate key"}},"/api/mcp/tools":{"get":{"description":"Samma lista som tools/list ger över MCP, utan nyckel. Namn, beskrivning och inmatningsschema per verktyg.","operationId":"get_api_mcp_tools","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/MCPToolDocT"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"summary":"MCP-verktygen","tags":["MCP"],"x-auth":"public","x-description-en":"The same list tools/list returns over MCP, without a key. Name, description and input schema per tool.","x-summary-en":"The MCP tools"}},"/api/me":{"delete":{"description":"confirm måste vara e-postadressen. Workspaces där du är ensam ägare måste raderas eller lämnas över först.","operationId":"delete_api_me","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/confirmBody"}}},"required":true},"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Radera mitt konto","tags":["Inloggning"],"x-auth":"session","x-description-en":"confirm must be the e-mail address. Workspaces where you are the only owner must be deleted or handed over first.","x-summary-en":"Delete my account"},"get":{"description":"Identiteten bakom anropet: person med aktiv workspace och roll, eller API-nyckel.","operationId":"get_api_me","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Vem är jag","tags":["Inloggning"],"x-auth":"any","x-description-en":"The identity behind the call: a person with active workspace and role, or an API key.","x-summary-en":"Who am I"}},"/api/members":{"get":{"operationId":"get_api_members","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Member"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Medlemmar","tags":["Workspace"],"x-auth":"user","x-summary-en":"Members"}},"/api/members/{id}":{"delete":{"operationId":"delete_api_members_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Ta bort medlem","tags":["Workspace"],"x-auth":"owner","x-summary-en":"Remove member"},"get":{"description":"Ägare och admin ser en medlem avgränsat till den här workspacen: roll, gick med, senast sedd här, nycklar hen skapat här, öppna kort tilldelade hen, och hens händelser här. Aldrig sessioner, inloggning eller andra workspaces. En medlem får se sig själv.","operationId":"get_api_members_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"händelser, standard 100","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberDetail"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"En medlem","tags":["Workspace"],"x-auth":"session","x-description-en":"Owners and admins see a member limited to this workspace: role, joined, last seen here, keys they created here, open cards assigned to them, and their events here. Never sessions, sign-in or other workspaces. A member may see themselves.","x-summary-en":"One member"},"patch":{"description":"member, admin eller owner. Sista ägaren kan inte nedgraderas.","operationId":"patch_api_members_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/roleBody"}}},"required":true},"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Ändra roll","tags":["Workspace"],"x-auth":"owner","x-description-en":"member, admin or owner. The last owner cannot be demoted.","x-summary-en":"Change role"}},"/api/notifications":{"get":{"operationId":"get_api_notifications","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Notification"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Notiskopplingar","tags":["Notiser"],"x-auth":"user","x-summary-en":"Notification connections"},"post":{"description":"kind discord eller slack. Webhook-URL:en visas aldrig igen. Tom events = alla.","operationId":"post_api_notifications","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/notificationBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Notification"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Skapa notiskoppling","tags":["Notiser"],"x-auth":"admin","x-description-en":"kind discord or slack. The webhook URL is never shown again. Empty events = all.","x-summary-en":"Create notification connection"}},"/api/notifications/{id}":{"delete":{"operationId":"delete_api_notifications_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ta bort notiskoppling","tags":["Notiser"],"x-auth":"admin","x-summary-en":"Remove notification connection"},"patch":{"operationId":"patch_api_notifications_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/notificationBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Notification"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ändra notiskoppling","tags":["Notiser"],"x-auth":"admin","x-summary-en":"Update notification connection"}},"/api/notifications/{id}/test":{"post":{"operationId":"post_api_notifications_id_test","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Skicka testnotis","tags":["Notiser"],"x-auth":"admin","x-summary-en":"Send test notification"}},"/api/openapi.json":{"get":{"description":"OpenAPI 3.1 för hela API:t plus MCP-verktygen under x-mcp-tools.","operationId":"get_api_openapi_json","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"summary":"Den här specen","tags":["System"],"x-auth":"public","x-description-en":"OpenAPI 3.1 for the whole API plus the MCP tools under x-mcp-tools.","x-summary-en":"This spec"}},"/api/overview":{"get":{"description":"Dashboarddata: klart och skapat per dag, kort som behöver uppmärksamhet, äldst i inbox.","operationId":"get_api_overview","parameters":[{"description":"aktivitetens intervall: 7, 14, 30 eller 90 (standard 14)","in":"query","name":"days","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Översikt","tags":["Kort"],"x-auth":"any","x-description-en":"Dashboard data: done and created per day, cards needing attention, oldest in inbox.","x-summary-en":"Overview"}},"/api/overview/graphs":{"get":{"description":"Sprintar över alla projekt (högst åtta per projekt, nyast först) och ledtid inbox → klar per projekt för de senaste 90 dagarna.","operationId":"get_api_overview_graphs","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/overviewGraphsOut"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Översiktens grafer","tags":["Kort"],"x-auth":"any","x-description-en":"Sprints across all projects (at most eight per project, newest first) and lead time inbox → done per project for the last 90 days.","x-summary-en":"Overview graphs"}},"/api/plan":{"get":{"description":"Det som gäller för den aktiva workspacen (plan ⊕ tillägg ⊕ undantag) och användningen mot taken. Samma entitlements ligger i GET /api/me. En spärr svarar 402 med error, feature eller limit, max, current, plan och needs.","operationId":"get_api_plan","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Min plan","tags":["Planer"],"x-auth":"any","x-description-en":"What applies to the active workspace (plan ⊕ add-ons ⊕ overrides) and usage against the limits. The same entitlements are in GET /api/me. A gate answers 402 with error, feature or limit, max, current, plan and needs.","x-summary-en":"My plan"}},"/api/plans":{"get":{"description":"Publik: namn, pris, tak och funktioner per plan, tilläggen, och registrets nycklar. 0 på ett tak betyder obegränsat.","operationId":"get_api_plans","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"summary":"Planerna","tags":["Planer"],"x-auth":"public","x-description-en":"Public: name, price, limits and features per plan, the add-ons, and the registry keys. 0 on a limit means unlimited.","x-summary-en":"The plans"}},"/api/projects":{"get":{"operationId":"get_api_projects","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Project"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Lista projekt","tags":["Projekt"],"x-auth":"any","x-summary-en":"List projects"},"post":{"description":"key blir kortprefixet: TYI ger TYI-1, TYI-2 … color är #rrggbb för sidomenyn, tom = appens accent.","operationId":"post_api_projects","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createProjectBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Skapa projekt","tags":["Projekt"],"x-auth":"admin","x-description-en":"key becomes the card prefix: TYI gives TYI-1, TYI-2 … color is #rrggbb for the sidebar, empty = the app accent.","x-summary-en":"Create project"}},"/api/projects/{slug}":{"get":{"description":"Inklusive info-dokumentet (markdown), om det är stängt, repo (ägare/repo, tomt om inget är satt) sprints, om appen visar sprintar, och agent med agent_labels (TSK-171).","operationId":"get_api_projects_slug","parameters":[{"description":"","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ett projekt","tags":["Projekt"],"x-auth":"any","x-description-en":"Including the info document (markdown), whether it is closed, repo (owner/repo, empty if not set) sprints, whether the app shows sprints, and agent with agent_labels (TSK-171).","x-summary-en":"One project"},"patch":{"description":"Bara skickade fält ändras. closed=true arkiverar, closed=false öppnar igen. Tom types/columns = följ workspacens globala. color är #rrggbb för sidomenyn, tom = appens accent. sprints styr bara om appen visar sprintraden och sprintvalet; inget raderas och sprintrutterna fungerar oavsett. Nya projekt har sprints=false. repo är projektets GitHub-repo som ägare/repo, tom tar bort det. agent styr om appen visar agentblocket och agentens statusrad; labelsen fungerar oavsett. agent_labels anger vilken label som betyder artifact, build, running, artifact_done, done och failed; tomt fält = standardnamnet (agent-artifact, agent-build, agent-running, agent-artifact-done, agent-done, agent-failed).","operationId":"patch_api_projects_slug","parameters":[{"description":"","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/updateProjectBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ändra projekt","tags":["Projekt"],"x-auth":"admin","x-description-en":"Only the fields you send change. closed=true archives, closed=false reopens. Empty types/columns = follow the workspace defaults. color is #rrggbb for the sidebar, empty = the app accent. sprints only controls whether the app shows the sprint bar and the sprint picker; nothing is deleted and the sprint routes work either way. New projects have sprints=false. repo is the project's GitHub repo as owner/repo, empty removes it. agent controls whether the app shows the agent block and the agent status line; the labels work either way. agent_labels says which label means artifact, build, running, artifact_done, done and failed; an empty field = the default name (agent-artifact, agent-build, agent-running, agent-artifact-done, agent-done, agent-failed).","x-summary-en":"Update project"}},"/api/projects/{slug}/artifacts":{"get":{"description":"Ett element per kort som har artefakter, kortet med senaste artefakten först. Varje kort har status, agentlabel och artefakterna nyast först. choice är sista kommentaren från en människa efter senaste versionen: sammanfattningen om den finns, annars första raden.","operationId":"get_api_projects_slug_artifacts","parameters":[{"description":"","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"open, done eller all (standard)","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"sök i kortets nyckel och titel och i artefaktens namn","in":"query","name":"q","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ArtifactCard"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Projektets artefakter","tags":["Bilagor"],"x-auth":"any","x-description-en":"One element per card that has artifacts, the card with the latest artifact first. Each card has its status, agent label and artifacts newest first. choice is the last comment by a person after the latest version: its summary if there is one, otherwise the first line.","x-summary-en":"The project's artifacts"}},"/api/projects/{slug}/issues":{"get":{"operationId":"get_api_projects_slug_issues","parameters":[{"description":"","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"filtrera på status","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"filtrera på etikett","in":"query","name":"label","required":false,"schema":{"type":"string"}},{"description":"sprint-id, active eller backlog","in":"query","name":"sprint","required":false,"schema":{"type":"string"}},{"description":"1 = visa papperskorgen","in":"query","name":"deleted","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Issue"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Lista kort","tags":["Kort"],"x-auth":"any","x-summary-en":"List cards"},"post":{"description":"Statusen blir ny. prio 1–3 (1 högst). parent gör kortet till subtask och får korsa projekt.","operationId":"post_api_projects_slug_issues","parameters":[{"description":"","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createIssueReq"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Issue"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Skapa kort","tags":["Kort"],"x-auth":"any","x-description-en":"Status starts as ny. prio 1–3 (1 highest). parent makes the card a subtask and may cross projects.","x-summary-en":"Create card"}},"/api/projects/{slug}/labels":{"get":{"operationId":"get_api_projects_slug_labels","parameters":[{"description":"","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Etiketter i projektet","tags":["Projekt"],"x-auth":"any","x-summary-en":"Labels in the project"}},"/api/projects/{slug}/people":{"get":{"description":"Vilka ett kort kan tilldelas: alla hela medlemmar plus de som fått projektet delat (TSK-179). assignee är visningsnamnet.","operationId":"get_api_projects_slug_people","parameters":[{"description":"","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Personer i projektet","tags":["Projekt"],"x-auth":"any","x-description-en":"Who a card can be assigned to: every full member plus those the project is shared with. assignee is the display name.","x-summary-en":"People in the project"}},"/api/projects/{slug}/sprints":{"get":{"description":"Nyast först, med antal kort och poäng (svårighet summerad, 1 för kort utan). Status planerad, aktiv eller stangd; högst en aktiv per projekt.","operationId":"get_api_projects_slug_sprints","parameters":[{"description":"","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Sprint"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Lista sprintar","tags":["Sprintar"],"x-auth":"any","x-description-en":"Newest first, with card and point counts (effort summed, 1 for cards without). Status planerad, aktiv or stangd; at most one active per project.","x-summary-en":"List sprints"},"post":{"description":"start=true gör den aktiv direkt (409 om projektet redan har en aktiv).","operationId":"post_api_projects_slug_sprints","parameters":[{"description":"","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/sprintBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sprint"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Skapa sprint","tags":["Sprintar"],"x-auth":"any","x-description-en":"start=true makes it active right away (409 if the project already has an active sprint).","x-summary-en":"Create sprint"}},"/api/projects/{slug}/stats":{"get":{"description":"Skapade och klara kort per ISO-vecka, ledtid ny→klar (median och p90 i timmar), fördelning per tagg och typ. Härlett ur kortens historik.","operationId":"get_api_projects_slug_stats","parameters":[{"description":"","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"antal veckor bakåt, 1-52 (standard 12)","in":"query","name":"weeks","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectStats"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Projektstatistik","tags":["Projekt"],"x-auth":"any","x-description-en":"Cards created and done per ISO week, lead time new→done (median and p90 in hours), breakdown by label and type. Derived from the cards' history.","x-summary-en":"Project statistics"}},"/api/projects/{slug}/time":{"get":{"description":"Loggad tid per person, vecka, tagg och kort. Tid är synlig för alla i workspacen.","operationId":"get_api_projects_slug_time","parameters":[{"description":"","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"antal veckor bakåt, 1-52 (standard 12)","in":"query","name":"weeks","required":false,"schema":{"type":"string"}},{"description":"csv = alla poster som CSV (day, issue, title, author, minutes, note)","in":"query","name":"format","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeReport"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Tidrapport för projektet","tags":["Projekt"],"x-auth":"any","x-description-en":"Logged time per person, week, label and card. Time is visible to everyone in the workspace.","x-summary-en":"Time report for the project"}},"/api/projects/{slug}/webhooks":{"get":{"operationId":"get_api_projects_slug_webhooks","parameters":[{"description":"","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Webhook"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Webhooks i projektet","tags":["Webhooks"],"x-auth":"any","x-summary-en":"Webhooks in the project"},"post":{"description":"POST med JSON till url vid varje händelse på projektets kort. Med secret signeras kroppen HMAC-SHA256 i X-Tasks-Signature.","operationId":"post_api_projects_slug_webhooks","parameters":[{"description":"","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/webhookBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Skapa webhook","tags":["Webhooks"],"x-auth":"admin","x-description-en":"POST with JSON to url on every event on the project's cards. With secret the body is signed HMAC-SHA256 in X-Tasks-Signature.","x-summary-en":"Create webhook"}},"/api/push/subscriptions":{"delete":{"operationId":"delete_api_push_subscriptions","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Stäng av pushnotiser för enheten","tags":["Notiser"],"x-auth":"user","x-summary-en":"Turn off push notifications for this device"},"get":{"operationId":"get_api_push_subscriptions","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PushSubscription"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Mina enheter med pushnotiser","tags":["Notiser"],"x-auth":"user","x-summary-en":"My devices with push notifications"},"post":{"description":"PushSubscription.toJSON() plus device_name. Samma endpoint uppdateras. old_endpoint ersätter en prenumeration som webbläsaren bytt ut.","operationId":"post_api_push_subscriptions","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pushSubscriptionReq"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PushSubscription"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Slå på pushnotiser för enheten","tags":["Notiser"],"x-auth":"user","x-description-en":"PushSubscription.toJSON() plus device_name. The same endpoint is updated. old_endpoint replaces a subscription the browser has swapped out.","x-summary-en":"Turn on push notifications for this device"}},"/api/push/subscriptions/{id}":{"delete":{"operationId":"delete_api_push_subscriptions_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Ta bort en av mina enheter","tags":["Notiser"],"x-auth":"user","x-summary-en":"Remove one of my devices"}},"/api/push/test":{"post":{"description":"Går via pushtjänsten och väntar på svaret. 410 om pushtjänsten inte längre känner till enheten.","operationId":"post_api_push_test","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Skicka testnotis till enheten","tags":["Notiser"],"x-auth":"user","x-description-en":"Goes through the push service and waits for the answer. 410 when the push service no longer knows the device.","x-summary-en":"Send a test notification to this device"}},"/api/push/vapid-key":{"get":{"description":"applicationServerKey för pushManager.subscribe(). 503 när push inte är konfigurerat på servern.","operationId":"get_api_push_vapid_key","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Publik VAPID-nyckel","tags":["Notiser"],"x-auth":"user","x-description-en":"applicationServerKey for pushManager.subscribe(). 503 when push is not configured on the server.","x-summary-en":"Public VAPID key"}},"/api/settings":{"get":{"description":"Globala korttyper och kolumner.","operationId":"get_api_settings","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Workspacens inställningar","tags":["Inställningar"],"x-auth":"user","x-description-en":"Global card types and columns.","x-summary-en":"Workspace settings"},"patch":{"operationId":"patch_api_settings","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/settingsBody"}}},"required":true},"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ändra inställningar","tags":["Inställningar"],"x-auth":"admin","x-summary-en":"Update settings"}},"/api/sprints/{id}":{"get":{"description":"Burndown per dag (kvar och ideal), velocity för projektets senaste sprintar, och sprintens kort.","operationId":"get_api_sprints_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SprintStats"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Sprint med statistik","tags":["Sprintar"],"x-auth":"any","x-description-en":"Burndown per day (remaining and ideal), velocity for the project's latest sprints, and the sprint's cards.","x-summary-en":"Sprint with statistics"},"patch":{"description":"Namn, mål och datum. status=aktiv startar en planerad sprint.","operationId":"patch_api_sprints_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/updateSprintBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sprint"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ändra sprint","tags":["Sprintar"],"x-auth":"any","x-description-en":"Name, goal and dates. status=aktiv starts a planned sprint.","x-summary-en":"Update sprint"}},"/api/sprints/{id}/close":{"post":{"description":"carry=next flyttar ofärdiga kort till nästa planerade sprint (skapas med samma längd om ingen finns) och märker dem som överförda; carry=backlog lägger dem i backloggen.","operationId":"post_api_sprints_id_close","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/closeSprintBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/closeSprintOut"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Stäng sprint","tags":["Sprintar"],"x-auth":"any","x-description-en":"carry=next moves unfinished cards to the next planned sprint (created with the same length if none exists) and marks them as carried over; carry=backlog puts them in the backlog.","x-summary-en":"Close sprint"}},"/api/sprints/{id}/report":{"get":{"description":"Kort, poäng, loggad tid och överförda kort per ansvarig (TSK-183). En stängd sprint räknas som den såg ut vid stängningen; tid är loggad tid på sprintens kort mellan start och stängning, räknad på den som loggade. next_sprint är dit korten fördes.","operationId":"get_api_sprints_id_report","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SprintReport"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Sprintrapport per person","tags":["Sprintar"],"x-auth":"any","x-description-en":"Cards, points, logged time and carried-over cards per assignee (TSK-183). A closed sprint is counted as it looked when it closed; time is time logged on the sprint's cards between start and close, counted on whoever logged it. next_sprint is where the cards went.","x-summary-en":"Sprint report per person"}},"/api/status":{"get":{"description":"Statussidans data: komponenter, senaste prob och 90 dagars historik. CORS öppet.","operationId":"get_api_status","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"summary":"Driftstatus","tags":["System"],"x-auth":"public","x-description-en":"The status page data: components, latest probe and 90 days of history. CORS open.","x-summary-en":"Service status"}},"/api/status/feed":{"get":{"description":"Prenumerera på driftstörningar i en RSS-läsare. Bara avbrott (down) längre än 2 minuter, senaste 90 dagarna. Svar: application/atom+xml. CORS öppet.","operationId":"get_api_status_feed","parameters":[{"description":"bara en komponent, t.ex. app eller api","in":"query","name":"component","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"summary":"Statusflöde (Atom)","tags":["System"],"x-auth":"public","x-description-en":"Subscribe to outages in an RSS reader. Only outages (down) longer than 2 minutes, last 90 days. Response: application/atom+xml. CORS open.","x-summary-en":"Status feed (Atom)"}},"/api/time/{id}":{"delete":{"description":"Egen post, eller vilken som helst för admin.","operationId":"delete_api_time_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ta bort tidspost","tags":["Kort"],"x-auth":"any","x-description-en":"Your own entry, or any entry for admin.","x-summary-en":"Delete time entry"}},"/api/timer":{"get":{"description":"Den inloggades igångsatta timer, om den ligger på ett kort i workspacen. timer är null annars. API-nycklar har ingen timer.","operationId":"get_api_timer","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/timerOut"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Min timer","tags":["Kort"],"x-auth":"any","x-description-en":"The signed-in user's running timer, if it is on a card in this workspace; timer is null otherwise. API keys have no timer.","x-summary-en":"My timer"}},"/api/timer/stop":{"post":{"description":"Stoppar timern och loggar minuterna (avrundade, under en halv minut loggas inget, en bortglömd timer kapas vid 24 h). note ersätter timerns anteckning. discard=true kastar tiden. 404 om ingen timer är igång.","operationId":"post_api_timer_stop","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/stopTimerBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/timerOut"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Stoppa timer","tags":["Kort"],"x-auth":"any","x-description-en":"Stops the timer and logs the minutes (rounded; under half a minute logs nothing; a forgotten timer is capped at 24 h). note replaces the timer's note. discard=true throws the time away. 404 when no timer is running.","x-summary-en":"Stop timer"}},"/api/uploads":{"post":{"description":"Kroppen är råa bytes med Content-Type satt. Max 10 MB per fil, 200 MB per workspace. Svarets url kan användas i markdown.","operationId":"post_api_uploads","parameters":[{"description":"filnamn","in":"query","name":"name","required":false,"schema":{"type":"string"}}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/uploadOut"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ladda upp bild","tags":["Bilagor"],"x-auth":"any","x-description-en":"The body is raw bytes with Content-Type set. Max 10 MB per file, 200 MB per workspace. The url in the response can be used in markdown.","x-summary-en":"Upload image"}},"/api/uploads/{id}":{"get":{"operationId":"get_api_uploads_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Hämta bild","tags":["Bilagor"],"x-auth":"any","x-summary-en":"Fetch image"}},"/api/usage":{"get":{"description":"kind=mcp summerar alla nycklar i workspacen och tar inget id.","operationId":"get_api_usage","parameters":[{"description":"key, notify eller mcp","in":"query","name":"kind","required":true,"schema":{"type":"string"}},{"description":"krävs för key och notify","in":"query","name":"id","required":false,"schema":{"type":"string"}},{"description":"24h, 48h, 7d eller 30d","in":"query","name":"range","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/usageOut"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Användning per nyckel eller notis","tags":["API-nycklar"],"x-auth":"user","x-description-en":"kind=mcp sums every key in the workspace and takes no id.","x-summary-en":"Usage per key or notification"}},"/api/webhooks/{id}":{"delete":{"operationId":"delete_api_webhooks_id","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]},{"session":[]}],"summary":"Ta bort webhook","tags":["Webhooks"],"x-auth":"admin","x-summary-en":"Remove webhook"}},"/api/workspace":{"delete":{"description":"confirm måste vara workspacens namn. Allt försvinner: projekt, kort, dokument, nycklar.","operationId":"delete_api_workspace","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/confirmBody"}}},"required":true},"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Radera workspacen","tags":["Workspace"],"x-auth":"owner","x-description-en":"confirm must be the workspace name. Everything goes: projects, cards, documents, keys.","x-summary-en":"Delete the workspace"},"patch":{"description":"Namn och/eller färg (#rrggbb, tom sträng tar bort färgen).","operationId":"patch_api_workspace","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/workspaceBody"}}},"required":true},"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Ändra workspacen","tags":["Workspace"],"x-auth":"owner","x-description-en":"Name and/or colour (#rrggbb, empty string removes the colour).","x-summary-en":"Update the workspace"}},"/api/workspace/export":{"get":{"description":"En zip med JSON per tabell plus bilagor. Högst två per minut.","operationId":"get_api_workspace_export","responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Exportera workspacen","tags":["Workspace"],"x-auth":"owner","x-description-en":"A zip with JSON per table plus attachments. At most two per minute.","x-summary-en":"Export the workspace"}},"/api/workspaces":{"get":{"operationId":"get_api_workspaces","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Mina workspaces","tags":["Workspace"],"x-auth":"session","x-summary-en":"My workspaces"},"post":{"description":"Max fem ägda workspaces per konto. Första projektet skapas samtidigt.","operationId":"post_api_workspaces","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createWorkspaceBody"}}},"required":true},"responses":{"201":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Skapa workspace","tags":["Workspace"],"x-auth":"session","x-description-en":"At most five owned workspaces per account. The first project is created at the same time.","x-summary-en":"Create workspace"}},"/api/workspaces/suggested":{"get":{"description":"Workspaces vars ägare har samma e-postdomän som du (aldrig för publika domäner).","operationId":"get_api_workspaces_suggested","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Föreslagna workspaces","tags":["Workspace"],"x-auth":"session","x-description-en":"Workspaces whose owner shares your e-mail domain (never for public domains).","x-summary-en":"Suggested workspaces"}},"/api/workspaces/tree":{"get":{"description":"Allt den inloggade når, för sidomenyn: varje medlemskap med sina öppna projekt. shared=true betyder att bara de listade projekten är delade (TSK-179).","operationId":"get_api_workspaces_tree","responses":{"200":{"content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Mina workspaces med projekt","tags":["Workspace"],"x-auth":"session","x-description-en":"Everything the signed-in person reaches, for the sidebar: each membership with its open projects. shared=true means only the listed projects are shared.","x-summary-en":"My workspaces with projects"}},"/api/workspaces/{id}/join-request":{"post":{"operationId":"post_api_workspaces_id_join_request","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Be om att få gå med","tags":["Workspace"],"x-auth":"session","x-summary-en":"Ask to join"}},"/api/workspaces/{id}/switch":{"post":{"description":"Sätter en ny session med den workspacen aktiv.","operationId":"post_api_workspaces_id_switch","parameters":[{"description":"","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"session":[]}],"summary":"Byt aktiv workspace","tags":["Workspace"],"x-auth":"session","x-description-en":"Issues a new session with that workspace active.","x-summary-en":"Switch active workspace"}},"/auth/login":{"get":{"description":"Skickar webbläsaren till leverantören (OAuth 2 med PKCE).","operationId":"get_auth_login","parameters":[{"description":"google eller github","in":"query","name":"provider","required":true,"schema":{"type":"string"}},{"description":"vart användaren skickas efteråt","in":"query","name":"next","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"summary":"Starta inloggning","tags":["Inloggning"],"x-auth":"public","x-description-en":"Sends the browser to the provider (OAuth 2 with PKCE).","x-summary-en":"Start sign-in"}},"/auth/logout":{"post":{"operationId":"post_auth_logout","responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"summary":"Logga ut","tags":["Inloggning"],"x-auth":"public","x-summary-en":"Sign out"}},"/auth/providers":{"get":{"operationId":"get_auth_providers","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"summary":"Inloggningsleverantörer","tags":["Inloggning"],"x-auth":"public","x-summary-en":"Sign-in providers"}},"/hooks/{kind}/{key}":{"post":{"description":"Mottagaren för en integration. Nyckeln i adressen pekar ut den, HMAC-SHA256 över kroppen i X-Hub-Signature-256 eller X-Tasks-Signature avgör om den räknas. Svarar 202 även när innehållet inte matchar något kort — att mottagaren lever är ett eget besked.","operationId":"post_hooks_kind_key","parameters":[{"description":"","in":"path","name":"kind","required":true,"schema":{"type":"string"}},{"description":"","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"summary":"Ta emot händelse","tags":["Integrationer"],"x-auth":"public","x-description-en":"The receiver for one integration. The key in the address points it out, HMAC-SHA256 over the body in X-Hub-Signature-256 or X-Tasks-Signature decides whether it counts. Answers 202 even when nothing matches a card — that the receiver is alive is its own message.","x-summary-en":"Receive an event"}},"/mcp":{"post":{"description":"Koppla din assistent hit med Authorization: Bearer tk_… . Transporten är stateless: varje POST är ett komplett anrop. GET ger 405.","operationId":"post_mcp","responses":{"200":{"description":"OK"},"4XX":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorOut"}}},"description":"Fel i anropet"}},"security":[{"apiKey":[]}],"summary":"MCP-endpoint (streamable HTTP)","tags":["MCP"],"x-auth":"key","x-description-en":"Point your assistant here with Authorization: Bearer tk_… . The transport is stateless: every POST is a complete call. GET returns 405.","x-summary-en":"MCP endpoint (streamable HTTP)"}}},"servers":[{"url":"https://tasks.nu/app"}],"tags":[{"name":"System","x-name-en":"System"},{"name":"MCP","x-name-en":"MCP"},{"name":"Inloggning","x-name-en":"Sign-in"},{"name":"Workspace","x-name-en":"Workspace"},{"name":"Projekt","x-name-en":"Projects"},{"name":"Kort","x-name-en":"Cards"},{"name":"Sprintar","x-name-en":""},{"name":"Planer","x-name-en":""},{"name":"Admin","x-name-en":"Admin"},{"name":"Flöde","x-name-en":"Feed"},{"name":"Dokument","x-name-en":"Documents"},{"name":"Bilagor","x-name-en":"Attachments"},{"name":"Webhooks","x-name-en":"Webhooks"},{"name":"Notiser","x-name-en":"Notifications"},{"name":"API-nycklar","x-name-en":"API keys"},{"name":"Integrationer","x-name-en":""},{"name":"Inställningar","x-name-en":"Settings"},{"name":"Support","x-name-en":"Support"}],"x-auth-levels":{"admin":"admin i workspacen (nyckel räknas som admin)","any":"session eller API-nyckel","key":"API-nyckel","owner":"ägare","public":"öppet","session":"inloggad person","superadmin":"tasks-teamet","user":"inloggad person med workspace"},"x-auth-levels-en":{"admin":"admin in the workspace (a key counts as admin)","any":"session or API key","key":"API key","owner":"owner","public":"open","session":"signed-in person","superadmin":"the tasks team","user":"signed-in person with a workspace"},"x-mcp-tools":[{"name":"add_artifact","description":"Attach a self-contained HTML page (everything inline, max 2 MB) to an issue by key, e.g. a proposal to look at before it is built. It is shown on the card in a sandbox: scripts run, but the page cannot reach cookies or the API. Returns the link to paste in a comment.","inputSchema":{"additionalProperties":false,"properties":{"html":{"description":"the complete HTML document, everything inline (no external scripts or stylesheets; Google Fonts is the only allowed external resource)","type":"string"},"key":{"description":"issue key, e.g. TYI-47","type":"string"},"name":{"description":"display name, e.g. forslag.html; default \u003ckey\u003e.html","type":"string"}},"required":["key","html"],"type":"object"}},{"name":"close_sprint","description":"Close the project's active sprint (or a named one). Unfinished cards go to the next planned sprint (carry=next, created with the same length if none exists, cards marked as carried over) or back to the backlog (carry=backlog).","inputSchema":{"additionalProperties":false,"properties":{"carry":{"description":"what happens with unfinished cards: next or backlog","type":"string"},"project":{"description":"project slug","type":"string"},"sprint":{"description":"sprint name; default the active sprint","type":"string"}},"required":["project","carry"],"type":"object"}},{"name":"comment_issue","description":"Add a comment to an issue by key. On a customer feedback case the comment is an internal note unless public=true. If the comment is longer than a few lines, also set summary: one or two sentences with the outcome and what, if anything, you need from the reader. The thread shows the summary; the full body opens on click.","inputSchema":{"additionalProperties":false,"properties":{"body":{"type":"string"},"key":{"description":"issue key","type":"string"},"public":{"description":"on a customer feedback case, post as a reply the customer can see (default: internal note)","type":"boolean"},"summary":{"description":"One or two sentences, plain prose. The result and what you need from the reader, e.g. 'Artifact ready with three variants. Pick one in a comment.' Leave out for short comments. Max 400 characters.","type":"string"}},"required":["key","body"],"type":"object"}},{"name":"create_doc","description":"Create a document — markdown by default, or kind=board for a drawing board whose body is JSON. Project is optional — leave it out for notes that belong to the workspace rather than one project.","inputSchema":{"additionalProperties":false,"properties":{"body":{"description":"markdown body","type":"string"},"color":{"description":"optional colour as #rrggbb, shown on the document in lists","type":"string"},"folder":{"description":"optional folder path like runbooks/drift; missing folders are created","type":"string"},"kind":{"description":"md (default) or board; a board's body is the drawing as JSON and cannot change kind later","type":"string"},"project":{"description":"optional project slug the document belongs to","type":"string"},"title":{"type":"string"}},"required":["title"],"type":"object"}},{"name":"create_issue","description":"Create an issue in a project. Type must be one of the project's configured types (see the project's types field; default bugg/funktion/drift), prio 1-3 (1 highest). Always set summary: two to four plain sentences for a person who has not read the description, saying what the card is about and why. The description is the full specification an agent builds from; the summary is what a person reads first.","inputSchema":{"additionalProperties":false,"properties":{"description":{"type":"string"},"due_date":{"description":"YYYY-MM-DD, when it should be done","type":"string"},"effort":{"description":"how hard it is: 1 easy, 2 medium, 3 hard","type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"parent":{"description":"parent issue key (e.g. TYI-46) to create this as a subtask; may cross projects","type":"string"},"prio":{"description":"1-3, 1 is highest","type":"integer"},"project":{"description":"project slug","type":"string"},"sprint":{"description":"sprint name in the project, or 'active' for the active sprint; omit for the backlog","type":"string"},"start_date":{"description":"YYYY-MM-DD, when work should start","type":"string"},"summary":{"description":"Two to four sentences in plain prose, no markdown, no headings, no lists. Written for a person who has not read the description: what the card is about and why it matters. Do not repeat the title. Max 400 characters.","type":"string"},"title":{"type":"string"},"type":{"description":"one of the project's configured types (default bugg/funktion/drift)","type":"string"}},"required":["project","title"],"type":"object"}},{"name":"create_project","description":"Create a project. Key becomes the issue prefix, e.g. TYI → TYI-1.","inputSchema":{"additionalProperties":false,"properties":{"description":{"type":"string"},"key":{"description":"issue key prefix, e.g. TYI","type":"string"},"name":{"type":"string"},"slug":{"description":"project slug, e.g. tyinv","type":"string"}},"required":["slug","key","name"],"type":"object"}},{"name":"create_sprint","description":"Create a sprint in a project with a name, optional goal and start/end dates (YYYY-MM-DD). start=true makes it the active sprint right away; a project has at most one active sprint.","inputSchema":{"additionalProperties":false,"properties":{"end_date":{"description":"YYYY-MM-DD","type":"string"},"goal":{"type":"string"},"name":{"description":"e.g. Sprint 12","type":"string"},"project":{"description":"project slug","type":"string"},"start":{"description":"true makes it the active sprint right away","type":"boolean"},"start_date":{"description":"YYYY-MM-DD","type":"string"}},"required":["project","name","start_date","end_date"],"type":"object"}},{"name":"create_workspace","description":"Create a new workspace owned by the person behind this account key, with a first project, and switch to it. Requires an account key.","inputSchema":{"additionalProperties":false,"properties":{"name":{"description":"workspace name, max 60 characters","type":"string"}},"required":["name"],"type":"object"}},{"name":"delete_issue","description":"Soft-delete an issue by key: it disappears from all listings but keeps its history and can be restored with restore_issue.","inputSchema":{"additionalProperties":false,"properties":{"key":{"description":"issue key, e.g. TYI-47","type":"string"}},"required":["key"],"type":"object"}},{"name":"get_doc","description":"Get one document by id, including its markdown body and the issues it is linked to.","inputSchema":{"additionalProperties":false,"properties":{"id":{"description":"document id","type":"integer"}},"required":["id"],"type":"object"}},{"name":"get_feedback","description":"Get one of this workspace's feedback cases by key (e.g. FB-12), including the public thread with the tasks team.","inputSchema":{"additionalProperties":false,"properties":{"key":{"description":"feedback case key, e.g. FB-12","type":"string"}},"required":["key"],"type":"object"}},{"name":"get_issue","description":"Get one issue by key (e.g. TYI-47), including summary, description and comments. Read the description, not only the summary, before building; the summary is written for people and leaves out detail. Comments carry summary and body; the body is the full text. summary_stale is true when the description was changed after the summary.","inputSchema":{"additionalProperties":false,"properties":{"key":{"description":"issue key, e.g. TYI-47","type":"string"}},"required":["key"],"type":"object"}},{"name":"get_project","description":"Get one project by slug, including its info document (markdown), closed state, GitHub repo (owner/repo) and whether the app shows sprints.","inputSchema":{"additionalProperties":false,"properties":{"slug":{"description":"project slug, e.g. tyinv","type":"string"}},"required":["slug"],"type":"object"}},{"name":"invite_member","description":"Invite someone to the active workspace by email (role member or admin), or share only chosen projects with them by passing project slugs in projects. Returns a link valid for seven days; the invitee must sign in with a verified matching email, and is joined automatically at the next sign-in even without the link. Needs owner or admin in the workspace.","inputSchema":{"additionalProperties":false,"properties":{"email":{"type":"string"},"projects":{"description":"optional project slugs: share only these projects instead of the whole workspace","items":{"type":"string"},"type":["null","array"]},"role":{"description":"member (default) or admin; ignored when projects is set","type":"string"}},"required":["email"],"type":"object"}},{"name":"issue_time","description":"List time entries on an issue with the total in minutes.","inputSchema":{"additionalProperties":false,"properties":{"key":{"description":"issue key, e.g. TYI-47","type":"string"}},"required":["key"],"type":"object"}},{"name":"list_artifacts","description":"List a project's artifacts grouped per issue, the issue with the latest artifact first: issue key, title, status, agent label, every version newest first, and choice — the last comment by a person after the latest version, usually the variant they picked. Use it to find earlier proposals before making a new one. status is open, done or all (default); query matches issue key, title and artifact name.","inputSchema":{"additionalProperties":false,"properties":{"project":{"description":"project slug, e.g. tyinv","type":"string"},"query":{"description":"optional search in issue key, title and artifact name","type":"string"},"status":{"description":"open, done or all (default all)","type":"string"}},"required":["project"],"type":"object"}},{"name":"list_docs","description":"List the workspace's documents (runbooks, decision notes) — newest change first. Optionally filtered to one project's documents. Bodies are included, so read this before acting on an ops card. kind is md (markdown) or board (a drawing board whose body is JSON: boxes, arrows, notes).","inputSchema":{"additionalProperties":false,"properties":{"folder":{"description":"optional folder path filter, e.g. runbooks/drift; \"/\" = documents without folder","type":"string"},"project":{"description":"optional project slug filter, e.g. tyinv","type":"string"}},"type":"object"}},{"name":"list_feedback","description":"List this workspace's feedback cases to the tasks team, with status (ny=received, pagar=being looked at, accepterad=planned, vantar=waiting for us, klar=resolved, avvisad=closed). Requires an admin or owner (a workspace key counts as admin).","inputSchema":{"additionalProperties":false,"type":"object"}},{"name":"list_issues","description":"List issues in a project, optionally filtered by status (ny, accepterad, pagar, blockerad, vantar, klar, avvisad), label, or sprint (a sprint name, 'active' or 'backlog').","inputSchema":{"additionalProperties":false,"properties":{"label":{"description":"optional label filter, exact match","type":"string"},"project":{"description":"project slug, e.g. tyinv","type":"string"},"sprint":{"description":"optional sprint filter: a sprint name, 'active' for the active sprint, or 'backlog' for cards outside any sprint","type":"string"},"status":{"description":"optional status filter","type":"string"}},"required":["project"],"type":"object"}},{"name":"list_members","description":"List the members of the active workspace with their roles. A member with projects set has only those projects shared with them. E-mail addresses are included only for an account key whose owner is an admin or owner there.","inputSchema":{"additionalProperties":false,"type":"object"}},{"name":"list_projects","description":"List all projects with their key, open issue count and GitHub repo (owner/repo, empty if not set).","inputSchema":{"additionalProperties":false,"type":"object"}},{"name":"list_sprints","description":"List a project's sprints, newest first, with status (planerad, aktiv, stangd), dates, card counts and points (effort summed, 1 per card without effort). Cards outside any sprint are the backlog.","inputSchema":{"additionalProperties":false,"properties":{"project":{"description":"project slug","type":"string"}},"required":["project"],"type":"object"}},{"name":"list_workspaces","description":"List the workspaces this key can reach and which one is active. A workspace key sees only its own; an account key (created with 'all my workspaces' under Settings → API keys) sees every workspace its owner is a member of.","inputSchema":{"additionalProperties":false,"type":"object"}},{"name":"log_time","description":"Log time spent on an issue: minutes (1-1440), optional day (YYYY-MM-DD, default today) and note. Visible to everyone in the workspace.","inputSchema":{"additionalProperties":false,"properties":{"day":{"description":"YYYY-MM-DD, default today (UTC)","type":"string"},"key":{"description":"issue key, e.g. TYI-47","type":"string"},"minutes":{"description":"minutes spent, 1-1440","type":"integer"},"note":{"type":"string"}},"required":["key","minutes"],"type":"object"}},{"name":"reply_feedback","description":"Reply on one of this workspace's feedback cases, in the workspace owner's name. A reply always reopens the case: if it was waiting for us it goes back to the tasks team, and if it was resolved or closed it returns to their inbox. Requires an admin or owner (a workspace key counts as admin).","inputSchema":{"additionalProperties":false,"properties":{"body":{"type":"string"},"key":{"description":"feedback case key, e.g. FB-12","type":"string"}},"required":["key","body"],"type":"object"}},{"name":"report_feedback","description":"Report a bug, feature request, design opinion or question ABOUT THE TASKS PRODUCT ITSELF to the tasks team. Not for the user's own project work (use create_issue for that). The case is filed on behalf of this workspace's owner, who can follow it under Feedback in the app.","inputSchema":{"additionalProperties":false,"properties":{"body":{"description":"what happened / what you want; markdown","type":"string"},"kind":{"description":"bugg, onskemal (feature request), design or fraga (question)","type":"string"},"title":{"type":"string"}},"required":["kind","title"],"type":"object"}},{"name":"restore_issue","description":"Restore a soft-deleted issue by key.","inputSchema":{"additionalProperties":false,"properties":{"key":{"description":"issue key, e.g. TYI-47","type":"string"}},"required":["key"],"type":"object"}},{"name":"sprint_report","description":"Report for a sprint (by name, default the active one) per person: cards done, points, time logged during the sprint, cards carried over and where they went. A closed sprint is counted as it looked when it closed. markdown holds the same report as text to paste into a doc or a review.","inputSchema":{"additionalProperties":false,"properties":{"project":{"description":"project slug","type":"string"},"sprint":{"description":"sprint name; default the active sprint","type":"string"}},"required":["project"],"type":"object"}},{"name":"sprint_stats","description":"Statistics for a sprint (by name, default the active one): scope, done, remaining and carried-over points, burndown per day against the ideal line, velocity of the project's latest sprints, and the sprint's cards.","inputSchema":{"additionalProperties":false,"properties":{"project":{"description":"project slug","type":"string"},"sprint":{"description":"sprint name; default the active sprint","type":"string"}},"required":["project"],"type":"object"}},{"name":"start_sprint","description":"Start a planned sprint (by name) so it becomes the project's active sprint. Fails if another sprint is already active.","inputSchema":{"additionalProperties":false,"properties":{"project":{"description":"project slug","type":"string"},"sprint":{"description":"sprint name; default the active sprint","type":"string"}},"required":["project"],"type":"object"}},{"name":"switch_workspace","description":"Point an account key at another workspace (by slug). Every later call — projects, cards, documents — happens there until you switch again. The choice is stored on the key, so every client using the same key switches with you; a client that must stay put sends the HTTP header X-Workspace: \u003cslug\u003e on each request instead. Workspace keys cannot switch.","inputSchema":{"additionalProperties":false,"properties":{"workspace":{"description":"workspace slug, as listed by list_workspaces","type":"string"}},"required":["workspace"],"type":"object"}},{"name":"update_doc","description":"Update a document by id. Only provided fields change; the previous body is kept as a revision. project empty string detaches it from its project.","inputSchema":{"additionalProperties":false,"properties":{"body":{"description":"markdown body, replaces the previous one (kept as a revision)","type":["null","string"]},"color":{"description":"colour as #rrggbb, or empty string to remove the colour","type":["null","string"]},"folder":{"description":"folder path like runbooks/drift (created if missing), or empty string to move the document to the root","type":["null","string"]},"id":{"description":"document id","type":"integer"},"project":{"description":"project slug, or empty string to detach the document from its project","type":["null","string"]},"title":{"type":["null","string"]}},"required":["id"],"type":"object"}},{"name":"update_issue","description":"Update fields on an issue by key. Only provided fields change. Status: ny/accepterad/pagar/blockerad/vantar/klar/avvisad. If you change description, update summary in the same call so the two still say the same thing; a summary older than the description is flagged on the card.","inputSchema":{"additionalProperties":false,"properties":{"assignee":{"type":["null","string"]},"description":{"type":["null","string"]},"due_date":{"description":"YYYY-MM-DD, empty string clears","type":["null","string"]},"effort":{"description":"1 easy, 2 medium, 3 hard; 0 clears","type":["null","integer"]},"key":{"description":"issue key, e.g. TYI-47","type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"prio":{"type":["null","integer"]},"sprint":{"description":"sprint name in the project, 'active' for the active sprint, or 'backlog' (or empty) to take the card out of its sprint","type":["null","string"]},"start_date":{"description":"YYYY-MM-DD, empty string clears","type":["null","string"]},"status":{"type":["null","string"]},"summary":{"description":"Same rules as in create_issue. Send an empty string to remove it.","type":["null","string"]},"title":{"type":["null","string"]},"type":{"type":["null","string"]}},"required":["key"],"type":"object"}},{"name":"update_project","description":"Update fields on a project by slug. Only provided fields change. closed=true archives it (no new issues/comments), closed=false reopens.","inputSchema":{"additionalProperties":false,"properties":{"closed":{"description":"true closes/archives the project, false reopens it","type":["null","boolean"]},"color":{"description":"sidebar colour as #rrggbb; empty string resets to the app accent","type":["null","string"]},"description":{"type":["null","string"]},"info":{"description":"project info document, markdown","type":["null","string"]},"name":{"type":["null","string"]},"repo":{"description":"the project's GitHub repo as owner/repo; empty string removes it","type":["null","string"]},"slug":{"description":"project slug, e.g. tyinv","type":"string"},"sprints":{"description":"show sprints in the app for this project; sprint tools work either way","type":["null","boolean"]}},"required":["slug"],"type":"object"}}]}