{"openapi":"3.1.0","info":{"title":"Chorala API","version":"1.0.0","description":"Open-core product-feedback platform. Public/widget API (X-Chorala-Key), admin API (hk_ key or session), end-user SSO, webhooks. Full prose reference: /docs and docs/API.md.","license":{"name":"AGPL-3.0"}},"externalDocs":{"url":"https://chorala.com/docs","description":"Interactive API reference"},"servers":[{"url":"https://chorala.com/api/v1","description":"This instance"}],"security":[{"PublicKey":[]}],"tags":[{"name":"Public"},{"name":"Projects"},{"name":"Boards"},{"name":"Statuses"},{"name":"Posts"},{"name":"Comments"},{"name":"Tags"},{"name":"Companies"},{"name":"Changelog"},{"name":"API keys"},{"name":"Analytics"},{"name":"AI"},{"name":"Organization"}],"paths":{"/public/boards":{"get":{"tags":["Public"],"summary":"List boards + ranked posts","security":[{"PublicKey":[]}],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"boards":{"type":"array","items":{"$ref":"#/components/schemas/Board"}},"posts":{"type":"array","items":{"$ref":"#/components/schemas/LocalizedPost"}}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/public/posts/{id}":{"get":{"tags":["Public"],"summary":"Get a post + comments","security":[{"PublicKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostDetail"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/public/posts":{"post":{"tags":["Public"],"summary":"Submit a post","security":[{"PublicKey":[]}],"parameters":[],"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocalizedPost"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePostInput"}}}}}},"/public/attachments":{"post":{"tags":["Public"],"summary":"Upload a screenshot (link via createPost attachmentIds)","security":[{"PublicKey":[]}],"parameters":[],"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentRef"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAttachmentInput"}}}}}},"/public/posts/{id}/vote":{"post":{"tags":["Public"],"summary":"Cast a vote","security":[{"PublicKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoteToggleResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Public"],"summary":"Remove a vote","security":[{"PublicKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoteToggleResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/public/posts/{id}/comments":{"post":{"tags":["Public"],"summary":"Add a comment","security":[{"PublicKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comment"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommentInput"}}}}}},"/public/roadmap":{"get":{"tags":["Public"],"summary":"Public roadmap","security":[{"PublicKey":[]}],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoadmapResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/public/changelog":{"get":{"tags":["Public"],"summary":"Public changelog","security":[{"PublicKey":[]}],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChangelogEntry"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/public/changelog/subscribe":{"post":{"tags":["Public"],"summary":"Subscribe to the changelog","security":[{"PublicKey":[]}],"parameters":[],"responses":{"201":{"description":"OK"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangelogSubscribeInput"}}}}}},"/public/identify":{"post":{"tags":["Public"],"summary":"Identify an end-user (SSO)","security":[{"PublicKey":[]}],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentifyResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentifyInput"}}}}}},"/projects":{"get":{"tags":["Projects"],"summary":"List projects","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Project"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Projects"],"summary":"Create a project","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[],"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectInput"}}}}}},"/projects/{id}":{"get":{"tags":["Projects"],"summary":"Get a project","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Projects"],"summary":"Update a project","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectInput"}}}}},"delete":{"tags":["Projects"],"summary":"Delete a project","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/boards":{"get":{"tags":["Boards"],"summary":"List boards","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Board"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Boards"],"summary":"Create a board","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Board"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBoardInput"}}}}}},"/projects/{projectId}/boards/{id}":{"get":{"tags":["Boards"],"summary":"Get a board","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Board"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Boards"],"summary":"Update a board","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Board"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBoardInput"}}}}},"delete":{"tags":["Boards"],"summary":"Delete a board","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/statuses":{"get":{"tags":["Statuses"],"summary":"List statuses","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Status"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Statuses"],"summary":"Create a status","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStatusInput"}}}}}},"/projects/{projectId}/statuses/{id}":{"patch":{"tags":["Statuses"],"summary":"Update a status","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStatusInput"}}}}},"delete":{"tags":["Statuses"],"summary":"Delete a status","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/posts":{"get":{"tags":["Posts"],"summary":"List posts (filters: board, status, appVersion, company, plan, minMrr; sort incl. revenue)","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AdminPostListItem"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Posts"],"summary":"Create a post","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCreatePostInput"}}}}}},"/projects/{projectId}/posts/{id}":{"get":{"tags":["Posts"],"summary":"Get a post","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostDetail"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Posts"],"summary":"Update a post","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePostInput"}}}}},"delete":{"tags":["Posts"],"summary":"Delete a post","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/posts/{id}/context":{"get":{"tags":["Posts"],"summary":"Submission context (appVersion + metadata map)","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"appVersion":{"type":"string","nullable":true},"context":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/posts/{id}/attachments":{"get":{"tags":["Posts"],"summary":"List a post’s attachments (screenshots)","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/posts/{id}/customer":{"get":{"tags":["Posts"],"summary":"The post author’s end-user + company (revenue context)","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/posts/{id}/status":{"post":{"tags":["Posts"],"summary":"Change status (moves on roadmap)","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePostStatusInput"}}}}}},"/projects/{projectId}/posts/{id}/pin":{"post":{"tags":["Posts"],"summary":"Toggle pin","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/posts/{id}/merge":{"post":{"tags":["Posts"],"summary":"Merge into another post","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MergePostInput"}}}}}},"/projects/{projectId}/posts/{id}/tags":{"post":{"tags":["Posts"],"summary":"Set tags","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagPostInput"}}}}}},"/projects/{projectId}/posts/{postId}/comments":{"get":{"tags":["Comments"],"summary":"List comments","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"postId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Comment"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Comments"],"summary":"Add a comment","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"postId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comment"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommentInput"}}}}}},"/projects/{projectId}/posts/{postId}/comments/{id}":{"delete":{"tags":["Comments"],"summary":"Delete a comment","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"postId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/tags":{"get":{"tags":["Tags"],"summary":"List tags","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Tag"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Tags"],"summary":"Create a tag","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tag"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTagInput"}}}}}},"/projects/{projectId}/tags/{id}":{"delete":{"tags":["Tags"],"summary":"Delete a tag","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/companies":{"get":{"tags":["Companies"],"summary":"List companies + rollups (users, posts), richest first","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CompanyWithStats"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/companies/{id}":{"get":{"tags":["Companies"],"summary":"Get a company","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Company"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Companies"],"summary":"Edit a company (mrr / plan / name / domain)","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Company"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCompanyInput"}}}}}},"/projects/{projectId}/changelog":{"get":{"tags":["Changelog"],"summary":"List entries","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChangelogEntry"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Changelog"],"summary":"Create an entry","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangelogEntry"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateChangelogInput"}}}}}},"/projects/{projectId}/changelog/{id}":{"patch":{"tags":["Changelog"],"summary":"Update an entry","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangelogEntry"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateChangelogInput"}}}}},"delete":{"tags":["Changelog"],"summary":"Delete an entry","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/keys":{"get":{"tags":["API keys"],"summary":"List API keys","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["API keys"],"summary":"Create an API key (raw key shown once)","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyInput"}}}}}},"/projects/{projectId}/keys/{id}":{"delete":{"tags":["API keys"],"summary":"Revoke an API key","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/analytics":{"get":{"tags":["Analytics"],"summary":"Analytics (top posts, velocity, themes)","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/posts/search":{"get":{"tags":["AI"],"summary":"Semantic search","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Post"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/posts/{id}/summarize":{"post":{"tags":["AI"],"summary":"Summarize a thread","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/changelog/draft":{"post":{"tags":["AI"],"summary":"Draft a changelog from posts","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/org":{"get":{"tags":["Organization"],"summary":"Current organization","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Organization"],"summary":"Update org settings","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOrgSettingsInput"}}}}}},"/org/members":{"get":{"tags":["Organization"],"summary":"List members","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Member"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Organization"],"summary":"Invite a member","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[],"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Member"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteMemberInput"}}}}}},"/org/members/{id}":{"patch":{"tags":["Organization"],"summary":"Change a member role","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Member"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMemberInput"}}}}},"delete":{"tags":["Organization"],"summary":"Remove a member","security":[{"ApiKey":[]},{"Session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"Post":{"type":"object","properties":{"id":{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},"boardId":{"type":"string","pattern":"^board_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"authorEndUserId":{"anyOf":[{"type":"string","pattern":"^eu_[0-9A-Za-z_-]+$"},{"type":"null"}]},"authorMemberId":{"anyOf":[{"type":"string","pattern":"^mem_[0-9A-Za-z_-]+$"},{"type":"null"}]},"title":{"type":"string"},"body":{"type":"string"},"originalLocale":{"type":"string"},"statusId":{"anyOf":[{"type":"string","pattern":"^status_[0-9A-Za-z_-]+$"},{"type":"null"}]},"isPinned":{"type":"boolean"},"voteCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"commentCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"mergedIntoPostId":{"anyOf":[{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},{"type":"null"}]},"eta":{"anyOf":[{"type":"string"},{"type":"null"}]},"appVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","boardId","projectId","authorEndUserId","authorMemberId","title","body","originalLocale","statusId","isPinned","voteCount","commentCount","mergedIntoPostId","eta","appVersion","createdAt","updatedAt"],"additionalProperties":false},"LocalizedPost":{"type":"object","properties":{"id":{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},"boardId":{"type":"string","pattern":"^board_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"authorEndUserId":{"anyOf":[{"type":"string","pattern":"^eu_[0-9A-Za-z_-]+$"},{"type":"null"}]},"authorMemberId":{"anyOf":[{"type":"string","pattern":"^mem_[0-9A-Za-z_-]+$"},{"type":"null"}]},"title":{"type":"string"},"body":{"type":"string"},"originalLocale":{"type":"string"},"statusId":{"anyOf":[{"type":"string","pattern":"^status_[0-9A-Za-z_-]+$"},{"type":"null"}]},"isPinned":{"type":"boolean"},"voteCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"commentCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"mergedIntoPostId":{"anyOf":[{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},{"type":"null"}]},"eta":{"anyOf":[{"type":"string"},{"type":"null"}]},"appVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"hasVoted":{"type":"boolean"},"displayLocale":{"type":"string"},"status":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","pattern":"^status_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"name":{"type":"string"},"color":{"type":"string"},"kind":{"type":"string","enum":["open","planned","in_progress","complete","closed"]},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"showOnRoadmap":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","projectId","name","color","kind","position","showOnRoadmap","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["id","boardId","projectId","authorEndUserId","authorMemberId","title","body","originalLocale","statusId","isPinned","voteCount","commentCount","mergedIntoPostId","eta","appVersion","createdAt","updatedAt"],"additionalProperties":false},"Attachment":{"type":"object","properties":{"id":{"type":"string","pattern":"^att_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"postId":{"anyOf":[{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},{"type":"null"}]},"kind":{"type":"string","enum":["screenshot","file"]},"mimeType":{"type":"string"},"byteSize":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"width":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"height":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","projectId","postId","kind","mimeType","byteSize","width","height","createdAt","updatedAt"],"additionalProperties":false},"AttachmentRef":{"type":"object","properties":{"id":{"type":"string","pattern":"^att_[0-9A-Za-z_-]+$"},"kind":{"type":"string","enum":["screenshot","file"]},"mimeType":{"type":"string"},"byteSize":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"width":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"height":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","kind","mimeType","byteSize","width","height"],"additionalProperties":false},"Board":{"type":"object","properties":{"id":{"type":"string","pattern":"^board_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"slug":{"type":"string"},"name":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"type":"string","enum":["feature","bug","general"]},"isPrivate":{"type":"boolean"},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","projectId","slug","name","description","kind","isPrivate","position","createdAt","updatedAt"],"additionalProperties":false},"Status":{"type":"object","properties":{"id":{"type":"string","pattern":"^status_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"name":{"type":"string"},"color":{"type":"string"},"kind":{"type":"string","enum":["open","planned","in_progress","complete","closed"]},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"showOnRoadmap":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","projectId","name","color","kind","position","showOnRoadmap","createdAt","updatedAt"],"additionalProperties":false},"Comment":{"type":"object","properties":{"id":{"type":"string","pattern":"^cmt_[0-9A-Za-z_-]+$"},"postId":{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},"authorEndUserId":{"anyOf":[{"type":"string","pattern":"^eu_[0-9A-Za-z_-]+$"},{"type":"null"}]},"authorMemberId":{"anyOf":[{"type":"string","pattern":"^mem_[0-9A-Za-z_-]+$"},{"type":"null"}]},"parentCommentId":{"anyOf":[{"type":"string","pattern":"^cmt_[0-9A-Za-z_-]+$"},{"type":"null"}]},"body":{"type":"string"},"isInternal":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","postId","authorEndUserId","authorMemberId","parentCommentId","body","isInternal","createdAt","updatedAt"],"additionalProperties":false},"EndUser":{"type":"object","properties":{"id":{"type":"string","pattern":"^eu_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"anyOf":[{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatarUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"isAnonymous":{"type":"boolean"},"locale":{"type":"string"},"companyId":{"anyOf":[{"type":"string","pattern":"^co_[0-9A-Za-z_-]+$"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"segment":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","projectId","externalId","email","name","avatarUrl","isAnonymous","locale","companyId","metadata","segment","createdAt","updatedAt"],"additionalProperties":false},"Project":{"type":"object","properties":{"id":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"orgId":{"type":"string","pattern":"^org_[0-9A-Za-z_-]+$"},"slug":{"type":"string"},"name":{"type":"string"},"isPublic":{"type":"boolean"},"customDomain":{"anyOf":[{"type":"string"},{"type":"null"}]},"publicKey":{"type":"string"},"allowedOrigins":{"type":"array","items":{"type":"string"}},"widgetSettings":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","orgId","slug","name","isPublic","customDomain","publicKey","allowedOrigins","widgetSettings","createdAt","updatedAt"],"additionalProperties":false},"Tag":{"type":"object","properties":{"id":{"type":"string","pattern":"^tag_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"name":{"type":"string"},"color":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","projectId","name","color","createdAt","updatedAt"],"additionalProperties":false},"Company":{"type":"object","properties":{"id":{"type":"string","pattern":"^co_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}]},"mrr":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"plan":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","projectId","externalId","name","domain","mrr","plan","metadata","createdAt","updatedAt"],"additionalProperties":false},"CompanyWithStats":{"type":"object","properties":{"id":{"type":"string","pattern":"^co_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}]},"mrr":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"plan":{"anyOf":[{"type":"string"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"userCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"postCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","projectId","externalId","name","domain","mrr","plan","metadata","createdAt","updatedAt","userCount","postCount"],"additionalProperties":false},"AdminPostListItem":{"type":"object","properties":{"id":{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},"boardId":{"type":"string","pattern":"^board_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"authorEndUserId":{"anyOf":[{"type":"string","pattern":"^eu_[0-9A-Za-z_-]+$"},{"type":"null"}]},"authorMemberId":{"anyOf":[{"type":"string","pattern":"^mem_[0-9A-Za-z_-]+$"},{"type":"null"}]},"title":{"type":"string"},"body":{"type":"string"},"originalLocale":{"type":"string"},"statusId":{"anyOf":[{"type":"string","pattern":"^status_[0-9A-Za-z_-]+$"},{"type":"null"}]},"isPinned":{"type":"boolean"},"voteCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"commentCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"mergedIntoPostId":{"anyOf":[{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},{"type":"null"}]},"eta":{"anyOf":[{"type":"string"},{"type":"null"}]},"appVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"revenueImpact":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","boardId","projectId","authorEndUserId","authorMemberId","title","body","originalLocale","statusId","isPinned","voteCount","commentCount","mergedIntoPostId","eta","appVersion","createdAt","updatedAt","revenueImpact"],"additionalProperties":false},"ChangelogEntry":{"type":"object","properties":{"id":{"type":"string","pattern":"^cl_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"title":{"type":"string"},"body":{"type":"string"},"status":{"type":"string","enum":["draft","published"]},"publishedAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"labels":{"type":"array","items":{"type":"string"}},"linkedPostIds":{"type":"array","items":{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","projectId","title","body","status","publishedAt","labels","linkedPostIds","createdAt","updatedAt"],"additionalProperties":false},"Member":{"type":"object","properties":{"id":{"type":"string","pattern":"^mem_[0-9A-Za-z_-]+$"},"orgId":{"type":"string","pattern":"^org_[0-9A-Za-z_-]+$"},"userId":{"type":"string"},"role":{"type":"string","enum":["owner","admin","member"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","orgId","userId","role","createdAt","updatedAt"],"additionalProperties":false},"Organization":{"type":"object","properties":{"id":{"type":"string","pattern":"^org_[0-9A-Za-z_-]+$"},"slug":{"type":"string"},"name":{"type":"string"},"plan":{"type":"string","enum":["free","starter","pro"]},"defaultLocale":{"type":"string"},"locales":{"type":"array","items":{"type":"string"}},"settings":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","slug","name","plan","defaultLocale","locales","settings","createdAt","updatedAt"],"additionalProperties":false},"PostDetail":{"type":"object","properties":{"post":{"type":"object","properties":{"id":{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},"boardId":{"type":"string","pattern":"^board_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"authorEndUserId":{"anyOf":[{"type":"string","pattern":"^eu_[0-9A-Za-z_-]+$"},{"type":"null"}]},"authorMemberId":{"anyOf":[{"type":"string","pattern":"^mem_[0-9A-Za-z_-]+$"},{"type":"null"}]},"title":{"type":"string"},"body":{"type":"string"},"originalLocale":{"type":"string"},"statusId":{"anyOf":[{"type":"string","pattern":"^status_[0-9A-Za-z_-]+$"},{"type":"null"}]},"isPinned":{"type":"boolean"},"voteCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"commentCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"mergedIntoPostId":{"anyOf":[{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},{"type":"null"}]},"eta":{"anyOf":[{"type":"string"},{"type":"null"}]},"appVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"hasVoted":{"type":"boolean"},"displayLocale":{"type":"string"},"status":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","pattern":"^status_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"name":{"type":"string"},"color":{"type":"string"},"kind":{"type":"string","enum":["open","planned","in_progress","complete","closed"]},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"showOnRoadmap":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","projectId","name","color","kind","position","showOnRoadmap","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["id","boardId","projectId","authorEndUserId","authorMemberId","title","body","originalLocale","statusId","isPinned","voteCount","commentCount","mergedIntoPostId","eta","appVersion","createdAt","updatedAt"],"additionalProperties":false},"comments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^cmt_[0-9A-Za-z_-]+$"},"postId":{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},"authorEndUserId":{"anyOf":[{"type":"string","pattern":"^eu_[0-9A-Za-z_-]+$"},{"type":"null"}]},"authorMemberId":{"anyOf":[{"type":"string","pattern":"^mem_[0-9A-Za-z_-]+$"},{"type":"null"}]},"parentCommentId":{"anyOf":[{"type":"string","pattern":"^cmt_[0-9A-Za-z_-]+$"},{"type":"null"}]},"body":{"type":"string"},"isInternal":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","postId","authorEndUserId","authorMemberId","parentCommentId","body","isInternal","createdAt","updatedAt"],"additionalProperties":false}},"translations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^ptr_[0-9A-Za-z_-]+$"},"postId":{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},"locale":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"isAuto":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","postId","locale","title","body","isAuto","createdAt","updatedAt"],"additionalProperties":false}}},"required":["post","comments","translations"],"additionalProperties":false},"VoteToggleResponse":{"type":"object","properties":{"voted":{"type":"boolean"},"voteCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["voted","voteCount"],"additionalProperties":false},"RoadmapResponse":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","properties":{"status":{"type":"object","properties":{"id":{"type":"string","pattern":"^status_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"name":{"type":"string"},"color":{"type":"string"},"kind":{"type":"string","enum":["open","planned","in_progress","complete","closed"]},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"showOnRoadmap":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","projectId","name","color","kind","position","showOnRoadmap","createdAt","updatedAt"],"additionalProperties":false},"posts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},"boardId":{"type":"string","pattern":"^board_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"authorEndUserId":{"anyOf":[{"type":"string","pattern":"^eu_[0-9A-Za-z_-]+$"},{"type":"null"}]},"authorMemberId":{"anyOf":[{"type":"string","pattern":"^mem_[0-9A-Za-z_-]+$"},{"type":"null"}]},"title":{"type":"string"},"body":{"type":"string"},"originalLocale":{"type":"string"},"statusId":{"anyOf":[{"type":"string","pattern":"^status_[0-9A-Za-z_-]+$"},{"type":"null"}]},"isPinned":{"type":"boolean"},"voteCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"commentCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"mergedIntoPostId":{"anyOf":[{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},{"type":"null"}]},"eta":{"anyOf":[{"type":"string"},{"type":"null"}]},"appVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"hasVoted":{"type":"boolean"},"displayLocale":{"type":"string"},"status":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","pattern":"^status_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"name":{"type":"string"},"color":{"type":"string"},"kind":{"type":"string","enum":["open","planned","in_progress","complete","closed"]},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"showOnRoadmap":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","projectId","name","color","kind","position","showOnRoadmap","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["id","boardId","projectId","authorEndUserId","authorMemberId","title","body","originalLocale","statusId","isPinned","voteCount","commentCount","mergedIntoPostId","eta","appVersion","createdAt","updatedAt"],"additionalProperties":false}}},"required":["status","posts"],"additionalProperties":false}}},"required":["columns"],"additionalProperties":false},"AnalyticsResponse":{"type":"object","properties":{"topPosts":{"type":"array","items":{"type":"object","properties":{"post":{"type":"object","properties":{"id":{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},"boardId":{"type":"string","pattern":"^board_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"authorEndUserId":{"anyOf":[{"type":"string","pattern":"^eu_[0-9A-Za-z_-]+$"},{"type":"null"}]},"authorMemberId":{"anyOf":[{"type":"string","pattern":"^mem_[0-9A-Za-z_-]+$"},{"type":"null"}]},"title":{"type":"string"},"body":{"type":"string"},"originalLocale":{"type":"string"},"statusId":{"anyOf":[{"type":"string","pattern":"^status_[0-9A-Za-z_-]+$"},{"type":"null"}]},"isPinned":{"type":"boolean"},"voteCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"commentCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"mergedIntoPostId":{"anyOf":[{"type":"string","pattern":"^post_[0-9A-Za-z_-]+$"},{"type":"null"}]},"eta":{"anyOf":[{"type":"string"},{"type":"null"}]},"appVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","boardId","projectId","authorEndUserId","authorMemberId","title","body","originalLocale","statusId","isPinned","voteCount","commentCount","mergedIntoPostId","eta","appVersion","createdAt","updatedAt"],"additionalProperties":false},"voteCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["post","voteCount"],"additionalProperties":false}},"voteVelocity":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"votes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["date","votes"],"additionalProperties":false}},"clusterThemes":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"summary":{"type":"string"},"count":{"type":"number"}},"required":["label","summary","count"],"additionalProperties":false}}},"required":["topPosts","voteVelocity","clusterThemes"],"additionalProperties":false},"IdentifyResponse":{"type":"object","properties":{"endUser":{"type":"object","properties":{"id":{"type":"string","pattern":"^eu_[0-9A-Za-z_-]+$"},"projectId":{"type":"string","pattern":"^proj_[0-9A-Za-z_-]+$"},"externalId":{"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"anyOf":[{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatarUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"isAnonymous":{"type":"boolean"},"locale":{"type":"string"},"companyId":{"anyOf":[{"type":"string","pattern":"^co_[0-9A-Za-z_-]+$"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"segment":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","projectId","externalId","email","name","avatarUrl","isAnonymous","locale","companyId","metadata","segment","createdAt","updatedAt"],"additionalProperties":false},"token":{"type":"string"}},"required":["endUser","token"],"additionalProperties":false},"CreateApiKeyResponse":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"key":{"type":"string"},"prefix":{"type":"string"}},"required":["id","name","key","prefix"],"additionalProperties":false},"CreatePostInput":{"type":"object","properties":{"boardSlug":{"type":"string","minLength":1},"title":{"type":"string","minLength":2,"maxLength":300},"body":{"default":"","type":"string","maxLength":20000},"locale":{"type":"string"},"appVersion":{"type":"string","maxLength":120},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"attachmentIds":{"maxItems":10,"type":"array","items":{"type":"string"}}},"required":["boardSlug","title"]},"CreateAttachmentInput":{"type":"object","properties":{"dataUrl":{"type":"string","pattern":"^data:.*"},"kind":{"default":"screenshot","type":"string","enum":["screenshot","file"]}},"required":["dataUrl"]},"CreateCommentInput":{"type":"object","properties":{"body":{"type":"string","minLength":1,"maxLength":20000},"parentCommentId":{"type":"string"},"isInternal":{"type":"boolean"}},"required":["body"]},"ChangelogSubscribeInput":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["email"]},"IdentifyInput":{"type":"object","properties":{"jwt":{"type":"string","minLength":1}},"required":["jwt"]},"CreateProjectInput":{"type":"object","properties":{"name":{"type":"string","minLength":1},"slug":{"type":"string","minLength":1,"pattern":"^[a-z0-9-]+$"},"isPublic":{"default":true,"type":"boolean"},"allowedOrigins":{"default":[],"type":"array","items":{"type":"string"}}},"required":["name","slug"]},"UpdateProjectInput":{"type":"object","properties":{"name":{"type":"string","minLength":1},"slug":{"type":"string","minLength":1,"pattern":"^[a-z0-9-]+$"},"isPublic":{"default":true,"type":"boolean"},"allowedOrigins":{"default":[],"type":"array","items":{"type":"string"}},"customDomain":{"anyOf":[{"type":"string"},{"type":"null"}]},"widgetSettings":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}},"CreateBoardInput":{"type":"object","properties":{"name":{"type":"string","minLength":1},"slug":{"type":"string","pattern":"^[a-z0-9-]+$"},"description":{"type":"string"},"kind":{"default":"feature","type":"string","enum":["feature","bug","general"]},"isPrivate":{"default":false,"type":"boolean"}},"required":["name","slug"]},"UpdateBoardInput":{"type":"object","properties":{"name":{"type":"string","minLength":1},"slug":{"type":"string","pattern":"^[a-z0-9-]+$"},"description":{"type":"string"},"kind":{"default":"feature","type":"string","enum":["feature","bug","general"]},"isPrivate":{"default":false,"type":"boolean"}}},"CreateStatusInput":{"type":"object","properties":{"name":{"type":"string","minLength":1},"color":{"type":"string"},"kind":{"type":"string","enum":["open","planned","in_progress","complete","closed"]},"showOnRoadmap":{"default":false,"type":"boolean"},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["name","color","kind"]},"UpdateStatusInput":{"type":"object","properties":{"name":{"type":"string","minLength":1},"color":{"type":"string"},"kind":{"type":"string","enum":["open","planned","in_progress","complete","closed"]},"showOnRoadmap":{"default":false,"type":"boolean"},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}},"AdminCreatePostInput":{"type":"object","properties":{"boardId":{"type":"string","minLength":1},"title":{"type":"string","minLength":2,"maxLength":300},"body":{"default":"","type":"string","maxLength":20000},"statusId":{"type":"string"},"locale":{"type":"string"}},"required":["boardId","title"]},"UpdatePostInput":{"type":"object","properties":{"title":{"type":"string","minLength":2,"maxLength":300},"body":{"type":"string","maxLength":20000},"statusId":{"anyOf":[{"type":"string"},{"type":"null"}]},"boardId":{"type":"string"},"isPinned":{"type":"boolean"},"eta":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"ChangePostStatusInput":{"type":"object","properties":{"statusId":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["statusId"]},"MergePostInput":{"type":"object","properties":{"targetPostId":{"type":"string","minLength":1}},"required":["targetPostId"]},"TagPostInput":{"type":"object","properties":{"tagIds":{"type":"array","items":{"type":"string"}}},"required":["tagIds"]},"CreateTagInput":{"type":"object","properties":{"name":{"type":"string","minLength":1},"color":{"type":"string"}},"required":["name","color"]},"UpdateCompanyInput":{"type":"object","properties":{"name":{"type":"string","minLength":1},"domain":{"anyOf":[{"type":"string"},{"type":"null"}]},"mrr":{"type":"integer","minimum":0,"maximum":9007199254740991},"plan":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"CreateChangelogInput":{"type":"object","properties":{"title":{"type":"string","minLength":1},"body":{"type":"string"},"status":{"default":"draft","type":"string","enum":["draft","published"]},"labels":{"default":[],"type":"array","items":{"type":"string"}},"linkedPostIds":{"default":[],"type":"array","items":{"type":"string"}}},"required":["title","body"]},"UpdateChangelogInput":{"type":"object","properties":{"title":{"type":"string","minLength":1},"body":{"type":"string"},"status":{"default":"draft","type":"string","enum":["draft","published"]},"labels":{"default":[],"type":"array","items":{"type":"string"}},"linkedPostIds":{"default":[],"type":"array","items":{"type":"string"}}}},"CreateApiKeyInput":{"type":"object","properties":{"name":{"type":"string","minLength":1},"scopes":{"default":["read"],"type":"array","items":{"type":"string"}}},"required":["name"]},"InviteMemberInput":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"role":{"default":"member","type":"string","enum":["owner","admin","member"]}},"required":["email"]},"UpdateMemberInput":{"type":"object","properties":{"role":{"type":"string","enum":["owner","admin","member"]}},"required":["role"]},"UpdateOrgSettingsInput":{"type":"object","properties":{"name":{"type":"string","minLength":1},"defaultLocale":{"type":"string"},"locales":{"type":"array","items":{"type":"string"}},"settings":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}}},"securitySchemes":{"PublicKey":{"type":"apiKey","in":"header","name":"X-Chorala-Key","description":"Project public key (pk_…)"},"EndUserToken":{"type":"apiKey","in":"header","name":"X-Chorala-User","description":"Host-signed end-user JWT (SSO)"},"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"hk_…","description":"Admin API key"},"Session":{"type":"apiKey","in":"cookie","name":"better-auth.session_token","description":"Dashboard session cookie"}}}}