{"openapi":"3.1.0","info":{"title":"Convo API","description":"Convo API — REST surface for Convo integrations.\n\n## Authorization model\n\nBearer tokens are **user-scoped**. A token represents a single Firebase user; it does not encode workspace bindings or roles.\n\nWorkspace access is governed by the live `workspaces/{wsId}/members/{uid}` document. Every request that touches a workspace re-reads the member doc, so:\n\n- Membership is required for any workspace-scoped route. Non-members receive 404 (the API does not leak workspace existence).\n- Some routes require the `admin` role; member-only callers receive 403 on those routes.\n- A demotion or promotion takes effect on the user's **next** API request — no token revocation is needed.\n\nOAuth scopes are **not** used as role substitutes — membership and role always come from the member doc. One scope does gate capability: a token carrying `convo.public` may call only `submit_feedback` and `get_public_roadmap`, and receives 403 `permission-denied` (with `WWW-Authenticate: Bearer error=\"insufficient_scope\"`) on every other operation, whatever workspaces its user belongs to. A token issued without that scope reaches the full maker surface.","version":"1.0.0"},"components":{"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth 2.0 authorization-code flow with PKCE. Tokens are user-scoped; workspace access is evaluated per request. A token carrying the `convo.public` scope is confined to `submit_feedback` and `get_public_roadmap`.","flows":{"authorizationCode":{"authorizationUrl":"https://api.convo.randomfact.com/oauth/authorize","tokenUrl":"https://api.convo.randomfact.com/oauth/token","scopes":{"convo.public":"Confine the token to the two end-user operations, submit_feedback and get_public_roadmap. Every other operation answers 403 insufficient_scope, whatever workspaces the token's user belongs to. A token issued without this scope reaches the full maker surface."}}}}},"schemas":{}},"paths":{"/v1/workspaces/{slug}/products":{"get":{"operationId":"list_products","summary":"List products in a workspace.","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Z]{3,5}$"},"name":{"type":"string"},"visibility":{"type":"string","enum":["private","public"]},"itemCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"nextItemNumber":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"createdAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","name","visibility","itemCount","nextItemNumber","createdAt"],"additionalProperties":false}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/workspaces/{slug}/products/{key}":{"patch":{"operationId":"update_product","summary":"Rename a product or change its visibility.","description":"Partial update — send only what changes. `visibility` is one switch over the whole public surface: a `private` product's page, roadmap and changelog answer 404 to everyone outside the workspace, submissions are refused, and the embed widget and public-scope tools have nothing to reach. Nothing is deleted by going private, and going public again restores the same board. The product key is its public address and the prefix on every item number, so it is not editable.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"visibility":{"type":"string","enum":["private","public"]}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}$"},"in":"path","name":"key","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Z]{3,5}$"},"name":{"type":"string"},"visibility":{"type":"string","enum":["private","public"]},"itemCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"nextItemNumber":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"createdAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","name","visibility","itemCount","nextItemNumber","createdAt"],"additionalProperties":false}},"required":["product"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/items/{itemKey}":{"get":{"operationId":"resolve_item","summary":"Resolve an item by its key, without a workspace slug.","description":"Looks up an item from its `LAUN-7`-style key across every workspace the caller is a member of — no slug required. The response is always `{ matches: [...] }`. 404 when no item with that key exists in any workspace you belong to.","parameters":[{"schema":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"in":"path","name":"itemKey","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"matches":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"item":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"productId":{"type":"string","pattern":"^[A-Z]{3,5}$"},"status":{"type":"string","enum":["new","planned","in-progress","shipped","declined"]},"title":{"type":"string"},"body":{"type":"string"},"rank":{"type":"string"},"tagIds":{"type":"array","items":{"type":"string"}},"plusOneCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"replyCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"author":{"type":"object","properties":{"tier":{"type":"string","enum":["anonymous","email","google"]},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tier","displayName","avatar"],"additionalProperties":false},"via":{"type":"string"},"notifiedAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"statusChangedAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"createdAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdBy":{"type":"string"},"updatedAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","productId","status","title","body","rank","tagIds","plusOneCount","replyCount","author","notifiedAt","statusChangedAt","createdAt","createdBy","updatedAt"],"additionalProperties":false}},"required":["slug","item"],"additionalProperties":false}}},"required":["matches"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/workspaces/{slug}/products/{key}/items":{"get":{"operationId":"list_items","summary":"List items in a product.","parameters":[{"schema":{"type":"string","enum":["new","planned","in-progress","shipped","declined"]},"in":"query","name":"status","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"tag","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"personId","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"cursor","required":false},{"schema":{"type":"integer","minimum":1,"maximum":200},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}$"},"in":"path","name":"key","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"productId":{"type":"string","pattern":"^[A-Z]{3,5}$"},"status":{"type":"string","enum":["new","planned","in-progress","shipped","declined"]},"title":{"type":"string"},"body":{"type":"string"},"rank":{"type":"string"},"tagIds":{"type":"array","items":{"type":"string"}},"plusOneCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"replyCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"author":{"type":"object","properties":{"tier":{"type":"string","enum":["anonymous","email","google"]},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tier","displayName","avatar"],"additionalProperties":false},"via":{"type":"string"},"notifiedAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"statusChangedAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"createdAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdBy":{"type":"string"},"updatedAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","productId","status","title","body","rank","tagIds","plusOneCount","replyCount","author","notifiedAt","statusChangedAt","createdAt","createdBy","updatedAt"],"additionalProperties":false}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/workspaces/{slug}/products/{key}/items/search":{"get":{"operationId":"search_items","summary":"Semantic search across a product's items.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":500},"in":"query","name":"q","required":true},{"schema":{"type":"string","enum":["new","planned","in-progress","shipped","declined"]},"in":"query","name":"status","required":false},{"schema":{"type":"integer","minimum":1,"maximum":50},"in":"query","name":"limit","required":false},{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}$"},"in":"path","name":"key","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"hits":{"type":"array","items":{"type":"object","properties":{"item":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"productId":{"type":"string","pattern":"^[A-Z]{3,5}$"},"status":{"type":"string","enum":["new","planned","in-progress","shipped","declined"]},"title":{"type":"string"},"body":{"type":"string"},"rank":{"type":"string"},"tagIds":{"type":"array","items":{"type":"string"}},"plusOneCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"replyCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"author":{"type":"object","properties":{"tier":{"type":"string","enum":["anonymous","email","google"]},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tier","displayName","avatar"],"additionalProperties":false},"via":{"type":"string"},"notifiedAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"statusChangedAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"createdAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdBy":{"type":"string"},"updatedAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","productId","status","title","body","rank","tagIds","plusOneCount","replyCount","author","notifiedAt","statusChangedAt","createdAt","createdBy","updatedAt"],"additionalProperties":false},"score":{"type":"number"}},"required":["item","score"],"additionalProperties":false}}},"required":["hits"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/workspaces/{slug}/products/{key}/items/{itemKey}":{"get":{"operationId":"get_item","summary":"Read one item with its thread and people.","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}$"},"in":"path","name":"key","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"in":"path","name":"itemKey","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"item":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"productId":{"type":"string","pattern":"^[A-Z]{3,5}$"},"status":{"type":"string","enum":["new","planned","in-progress","shipped","declined"]},"title":{"type":"string"},"body":{"type":"string"},"rank":{"type":"string"},"tagIds":{"type":"array","items":{"type":"string"}},"plusOneCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"replyCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"author":{"type":"object","properties":{"tier":{"type":"string","enum":["anonymous","email","google"]},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tier","displayName","avatar"],"additionalProperties":false},"via":{"type":"string"},"notifiedAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"statusChangedAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"createdAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdBy":{"type":"string"},"updatedAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","productId","status","title","body","rank","tagIds","plusOneCount","replyCount","author","notifiedAt","statusChangedAt","createdAt","createdBy","updatedAt"],"additionalProperties":false},"replies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"itemId":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"productId":{"type":"string","pattern":"^[A-Z]{3,5}$"},"authorKind":{"type":"string","enum":["maker","person","agent"]},"authorId":{"type":"string","minLength":1},"authorName":{"anyOf":[{"type":"string"},{"type":"null"}]},"authorAvatar":{"anyOf":[{"type":"string"},{"type":"null"}]},"parentId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"body":{"type":"string"},"createdAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","itemId","productId","authorKind","authorId","authorName","authorAvatar","parentId","body","createdAt"],"additionalProperties":false}},"participants":{"type":"array","items":{"type":"object","properties":{"personId":{"type":"string"},"role":{"type":"string"},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}]},"context":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["personId","role","displayName","avatar","context"],"additionalProperties":false}}},"required":["item","replies","participants"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}},"patch":{"operationId":"update_item","summary":"Edit an item's title, body, or status.","description":"Partial update — send only what changes. The title is the field most worth editing: a submitter can leave it blank, in which case the server derived one from the body at capture. Rewriting it here is what the public board, roadmap, and changelog will show.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":500},"body":{"type":"string","minLength":1,"maxLength":50000},"status":{"type":"string","enum":["new","planned","in-progress","shipped","declined"]}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}$"},"in":"path","name":"key","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"in":"path","name":"itemKey","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"item":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"productId":{"type":"string","pattern":"^[A-Z]{3,5}$"},"status":{"type":"string","enum":["new","planned","in-progress","shipped","declined"]},"title":{"type":"string"},"body":{"type":"string"},"rank":{"type":"string"},"tagIds":{"type":"array","items":{"type":"string"}},"plusOneCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"replyCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"author":{"type":"object","properties":{"tier":{"type":"string","enum":["anonymous","email","google"]},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tier","displayName","avatar"],"additionalProperties":false},"via":{"type":"string"},"notifiedAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"statusChangedAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"createdAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdBy":{"type":"string"},"updatedAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","productId","status","title","body","rank","tagIds","plusOneCount","replyCount","author","notifiedAt","statusChangedAt","createdAt","createdBy","updatedAt"],"additionalProperties":false}},"required":["item"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/workspaces/{slug}/products/{key}/items/{itemKey}/status":{"post":{"operationId":"update_item_status","summary":"Set an item's status.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["new","planned","in-progress","shipped","declined"]}},"required":["status"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}$"},"in":"path","name":"key","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"in":"path","name":"itemKey","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"changed":{"type":"boolean"}},"required":["status","changed"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/workspaces/{slug}/products/{key}/items/{itemKey}/merge":{"post":{"operationId":"merge_items","summary":"Merge duplicate items into this one.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mergedKeys":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"}}},"required":["mergedKeys"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}$"},"in":"path","name":"key","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"in":"path","name":"itemKey","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"survivorId":{"type":"string"},"mergedPeople":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["survivorId","mergedPeople"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/workspaces/{slug}/products/{key}/items/{itemKey}/replies":{"post":{"operationId":"reply_to_item","summary":"Post a maker/agent reply on an item.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"body":{"type":"string","minLength":1,"maxLength":10000},"parentId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]}},"required":["body"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}$"},"in":"path","name":"key","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"in":"path","name":"itemKey","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"replyId":{"type":"string"}},"required":["replyId"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}},"get":{"operationId":"list_replies","summary":"List replies on an item.","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}$"},"in":"path","name":"key","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"in":"path","name":"itemKey","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"itemId":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"productId":{"type":"string","pattern":"^[A-Z]{3,5}$"},"authorKind":{"type":"string","enum":["maker","person","agent"]},"authorId":{"type":"string","minLength":1},"authorName":{"anyOf":[{"type":"string"},{"type":"null"}]},"authorAvatar":{"anyOf":[{"type":"string"},{"type":"null"}]},"parentId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"body":{"type":"string"},"createdAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","itemId","productId","authorKind","authorId","authorName","authorAvatar","parentId","body","createdAt"],"additionalProperties":false}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/workspaces/{slug}/products/{key}/items/{itemKey}/tags":{"post":{"operationId":"tag_item","summary":"Replace an item's tag set.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tagIds":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}}},"required":["tagIds"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}$"},"in":"path","name":"key","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"in":"path","name":"itemKey","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"tagIds":{"type":"array","items":{"type":"string"}}},"required":["tagIds"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/workspaces/{slug}/products/{key}/items/{itemKey}/notify":{"post":{"operationId":"notify_people","summary":"Notify a shipped item's verified requesters (confirm-gated).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","enum":[true]},"message":{"type":"string","maxLength":2000}},"required":["confirm"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}$"},"in":"path","name":"key","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"in":"path","name":"itemKey","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"notified":{"type":"integer","minimum":0,"maximum":9007199254740991},"skipped":{"type":"integer","minimum":0,"maximum":9007199254740991},"recipients":{"type":"array","items":{"type":"object","properties":{"personId":{"type":"string"},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"delivered":{"type":"boolean"},"reason":{"type":"string"}},"required":["personId","displayName","delivered"],"additionalProperties":false}}},"required":["notified","skipped","recipients"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/workspaces/{slug}/products/{key}/items/{itemKey}/changelog":{"post":{"operationId":"draft_changelog_entry","summary":"Draft (or publish) a changelog entry for a shipped item.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":500},"body":{"type":"string","maxLength":50000},"publish":{"type":"boolean"}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}$"},"in":"path","name":"key","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"in":"path","name":"itemKey","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"body":{"type":"string"},"itemIds":{"type":"array","items":{"type":"string"}},"requestedByNames":{"type":"array","items":{"type":"string"}},"requestedByCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"publishedId":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["title","body","itemIds","requestedByNames","requestedByCount","publishedId"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/workspaces/{slug}/people":{"get":{"operationId":"list_people","summary":"List people tracked in a workspace.","parameters":[{"schema":{"type":"string","minLength":1},"in":"query","name":"cursor","required":false},{"schema":{"type":"integer","minimum":1,"maximum":200},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"tier":{"type":"string","enum":["anonymous","email","google"]},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastContactAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"createdAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","tier","displayName","avatar","email","lastContactAt","createdAt"],"additionalProperties":false}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/workspaces/{slug}/people/search":{"get":{"operationId":"search_people","summary":"Find people by name, email, or topics raised.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"in":"query","name":"q","required":true},{"schema":{"type":"integer","minimum":1,"maximum":50},"in":"query","name":"limit","required":false},{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"hits":{"type":"array","items":{"type":"object","properties":{"person":{"type":"object","properties":{"id":{"type":"string","minLength":1},"tier":{"type":"string","enum":["anonymous","email","google"]},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastContactAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"createdAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","tier","displayName","avatar","email","lastContactAt","createdAt"],"additionalProperties":false},"score":{"type":"number"}},"required":["person","score"],"additionalProperties":false}}},"required":["hits"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/workspaces/{slug}/people/{personId}":{"get":{"operationId":"get_person","summary":"Read one person's auto-assembled cross-product record.","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","minLength":1},"in":"path","name":"personId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1},"tier":{"type":"string","enum":["anonymous","email","google"]},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastContactAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"createdAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"awaitingReply":{"type":"boolean"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"productId":{"type":"string"},"title":{"type":"string"},"status":{"type":"string","enum":["new","planned","in-progress","shipped","declined"]},"role":{"type":"string","enum":["submitted","plus-one","replied"]},"createdAt":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["id","productId","title","status","role","createdAt"],"additionalProperties":false}},"openItemCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"productKeys":{"type":"array","items":{"type":"string"}}},"required":["id","tier","displayName","avatar","email","lastContactAt","createdAt","awaitingReply","items","openItemCount","productKeys"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/workspaces/{slug}/followup":{"get":{"operationId":"who_needs_followup","summary":"Shipped-but-unnotified, stale promises, and replies owed.","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"shippedUnnotified":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"productId":{"type":"string"},"title":{"type":"string"},"status":{"type":"string"},"statusChangedAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"plusOneCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","productId","title","status","statusChangedAt","plusOneCount"],"additionalProperties":false}},"stalePromises":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"productId":{"type":"string"},"title":{"type":"string"},"status":{"type":"string"},"statusChangedAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"plusOneCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","productId","title","status","statusChangedAt","plusOneCount"],"additionalProperties":false}},"repliesOwed":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"productId":{"type":"string"},"title":{"type":"string"},"status":{"type":"string"},"statusChangedAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"plusOneCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","productId","title","status","statusChangedAt","plusOneCount"],"additionalProperties":false}}},"required":["shippedUnnotified","stalePromises","repliesOwed"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/workspaces/{slug}/products/{key}/summary":{"get":{"operationId":"summarize_feedback","summary":"Assemble a feedback slice + breakdowns for synthesis.","parameters":[{"schema":{"type":"string","enum":["new","planned","in-progress","shipped","declined"]},"in":"query","name":"status","required":false},{"schema":{"type":"string","minLength":1},"in":"query","name":"tag","required":false},{"schema":{"type":"string","minLength":1,"maxLength":500},"in":"query","name":"q","required":false},{"schema":{"type":"integer","minimum":1,"maximum":200},"in":"query","name":"limit","required":false},{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}$"},"in":"path","name":"key","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"byStatus":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},"byTag":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},"topItems":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"status":{"type":"string"},"plusOneCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","title","status","plusOneCount"],"additionalProperties":false}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Z]{3,5}-[1-9]\\d*$"},"productId":{"type":"string","pattern":"^[A-Z]{3,5}$"},"status":{"type":"string","enum":["new","planned","in-progress","shipped","declined"]},"title":{"type":"string"},"body":{"type":"string"},"rank":{"type":"string"},"tagIds":{"type":"array","items":{"type":"string"}},"plusOneCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"replyCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"author":{"type":"object","properties":{"tier":{"type":"string","enum":["anonymous","email","google"]},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}]},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tier","displayName","avatar"],"additionalProperties":false},"via":{"type":"string"},"notifiedAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"statusChangedAt":{"anyOf":[{"type":"number"},{"type":"null"}]},"createdAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdBy":{"type":"string"},"updatedAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","productId","status","title","body","rank","tagIds","plusOneCount","replyCount","author","notifiedAt","statusChangedAt","createdAt","createdBy","updatedAt"],"additionalProperties":false}}},"required":["count","byStatus","byTag","topItems","items"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/public/{slug}/{key}/feedback":{"post":{"operationId":"submit_feedback","summary":"Submit feedback to a public board (by workspace slug + product key) on an end user's behalf.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":50000},"title":{"type":"string","minLength":1,"maxLength":500},"displayName":{"type":"string","maxLength":80},"honeypot":{"type":"string"}},"required":["text"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}$"},"in":"path","name":"key","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"itemId":{"type":"string"}},"required":["itemId"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"412":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}},"/v1/public/{slug}/{key}/roadmap":{"get":{"operationId":"get_public_roadmap","summary":"Read a product's public roadmap (by workspace slug + product key).","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){4,19}$"},"in":"path","name":"slug","required":true},{"schema":{"type":"string","pattern":"^[A-Z]{3,5}$"},"in":"path","name":"key","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"string"},"planned":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"status":{"type":"string"},"plusOneCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"statusChangedAt":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["id","title","status","plusOneCount","statusChangedAt"],"additionalProperties":false}},"inProgress":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"status":{"type":"string"},"plusOneCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"statusChangedAt":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["id","title","status","plusOneCount","statusChangedAt"],"additionalProperties":false}},"shipped":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"status":{"type":"string"},"plusOneCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"statusChangedAt":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["id","title","status","plusOneCount","statusChangedAt"],"additionalProperties":false}}},"required":["product","planned","inProgress","shipped"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}},"412":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["invalid-argument","unauthenticated","permission-denied","not-found","failed-precondition","already-exists","resource-exhausted","internal"]}},"required":["error","code"],"additionalProperties":false}}}}}}}},"servers":[{"url":"https://api.convo.randomfact.com"}],"security":[{"oauth2":[]}]}