{"openapi":"3.1.0","info":{"title":"FeatureOS (BYOK) API","version":"0.1.0","description":"FeatureOS (BYOK) lets an AI assistant read your own FeatureOS data through the FeatureOS API with a key you supply (FeatureOS organization API key (starts with hn_)). Read-only: 11 tools (get_organization_info, list_boards, list_posts, get_post, list_comments, list_changelogs, get_changelog, search_changelogs, list_tags, list_roadmap_items, list_help_articles). The BYOK key travels with each...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-featureos.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-featureos/docs"},"termsOfService":"https://connectorbay.com/byok-featureos/terms"},"servers":[{"url":"https://byok-featureos.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-featureos/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_organization_info":{"post":{"operationId":"get_organization_info","summary":"Show the FeatureOS organization the key belongs to (name, subdomain, home page) and its post statuses (slug, name, color","description":"Show the FeatureOS organization the key belongs to (name, subdomain, home page) and its post statuses (slug, name, color), which are needed to filter posts. Use for \"Which post statuses exist in my FeatureOS workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_organization_infoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_boards":{"post":{"operationId":"list_boards","summary":"List the public feedback boards of the FeatureOS workspace. Set privacy to private to list private boards instead. The i","description":"List the public feedback boards of the FeatureOS workspace. Set privacy to private to list private boards instead. The item fields are returned as the provider sends them. Use for \"Which feedback boards do I have in FeatureOS\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"privacy":{"anyOf":[{"enum":["public","private"],"type":"string"},{"type":"null"}],"default":"public","description":"public (default) or private boards.","title":"Privacy"},"sort":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"asc for alphabetical order by name; desc (default) otherwise.","title":"Sort"}},"title":"list_boardsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_posts":{"post":{"operationId":"list_posts","summary":"List feedback posts with status, board, vote and comment counts, tags and dates. Filter by board, approval status, creat","description":"List feedback posts with status, board, vote and comment counts, tags and dates. Filter by board, approval status, creation dates or sort order. Submitter and assignee details are not returned. Use for \"What are the most voted feature requests in FeatureOS\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100).","title":"Per Page"},"bucket_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only posts of this board ID (from list_boards).","title":"Bucket Id"},"approval_status":{"anyOf":[{"enum":["pending","approved"],"type":"string"},{"type":"null"}],"default":null,"description":"Only pending or approved posts.","title":"Approval Status"},"sort":{"anyOf":[{"enum":["top","latest_created_at","oldest_created_at","latest_updated_at","oldest_updated_at"],"type":"string"},{"type":"null"}],"default":null,"description":"Order: top, latest_created_at, oldest_created_at, latest_updated_at or oldest_updated_at.","title":"Sort"},"from_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only posts created on or after this date (YYYY-MM-DD); use with to_date.","title":"From Date"},"to_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only posts created on or before this date (YYYY-MM-DD); use with from_date.","title":"To Date"}},"title":"list_postsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_post":{"post":{"operationId":"get_post","summary":"Get one FeatureOS post by ID with status, board, vote and comment counts and dates. Submitter and assignee details are n","description":"Get one FeatureOS post by ID with status, board, vote and comment counts and dates. Submitter and assignee details are not returned. Use for \"Show FeatureOS post 4229\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"FeatureOS post ID (a number), from list_posts.","title":"Id","type":"integer"}},"required":["id"],"title":"get_postArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_comments":{"post":{"operationId":"list_comments","summary":"List comments on FeatureOS posts with text, parent comment, post and moderation state. Filter by post or dates. Author d","description":"List comments on FeatureOS posts with text, parent comment, post and moderation state. Filter by post or dates. Author details are not returned. Use for \"What comments were left on FeatureOS post 4229\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"feature_request_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only comments on this post ID.","title":"Feature Request Id"},"from_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only comments created on or after this date; use with to_date.","title":"From Date"},"to_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only comments created on or before this date; use with from_date.","title":"To Date"}},"title":"list_commentsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_changelogs":{"post":{"operationId":"list_changelogs","summary":"List changelog entries with title, preview, language, publish state and date and labels. Filter by status or language. U","description":"List changelog entries with title, preview, language, publish state and date and labels. Filter by status or language. Use for \"What did we publish in the FeatureOS changelog recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"status":{"anyOf":[{"enum":["published","unpublished","scheduled"],"type":"string"},{"type":"null"}],"default":null,"description":"Only published, unpublished or scheduled entries.","title":"Status"},"locale":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only entries in this language code, for example en or es.","title":"Locale"}},"title":"list_changelogsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_changelog":{"post":{"operationId":"get_changelog","summary":"Get one FeatureOS changelog entry by ID, with its text, labels and the feedback posts it links to (submitter details are","description":"Get one FeatureOS changelog entry by ID, with its text, labels and the feedback posts it links to (submitter details are not returned). Use for \"Show FeatureOS changelog entry 1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Changelog ID (a number), from list_changelogs.","title":"Id","type":"integer"}},"required":["id"],"title":"get_changelogArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_changelogs":{"post":{"operationId":"search_changelogs","summary":"Search FeatureOS changelog entries by text and return the matching entries. Use for \"Search the FeatureOS changelog for ","description":"Search FeatureOS changelog entries by text and return the matching entries. Use for \"Search the FeatureOS changelog for 'API'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"description":"Search text.","maxLength":200,"title":"Query","type":"string"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100).","title":"Per Page"}},"required":["query"],"title":"search_changelogsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_tags":{"post":{"operationId":"list_tags","summary":"List the tags of FeatureOS posts or boards with color, privacy and the board they belong to. Use for \"Which tags do I us","description":"List the tags of FeatureOS posts or boards with color, privacy and the board they belong to. Use for \"Which tags do I use in FeatureOS\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"source_type":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":"feature_request","description":"feature_request for global post tags (default) or bucket for tags of one board.","title":"Source Type"},"source_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Board ID when source_type is bucket.","title":"Source Id"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100).","title":"Per Page"}},"title":"list_tagsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_roadmap_items":{"post":{"operationId":"list_roadmap_items","summary":"List the posts on one FeatureOS roadmap with status, board, vote counts, estimated completion date and RICE score. Submi","description":"List the posts on one FeatureOS roadmap with status, board, vote counts, estimated completion date and RICE score. Submitter details are not returned. Use for \"What is on FeatureOS roadmap 179\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"FeatureOS roadmap ID (a number).","title":"Id","type":"integer"}},"required":["id"],"title":"list_roadmap_itemsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_help_articles":{"post":{"operationId":"list_help_articles","summary":"List help center articles with title, status, language, privacy, collection and tags. Authors and assignees are not retu","description":"List help center articles with title, status, language, privacy, collection and tags. Authors and assignees are not returned. Use for \"Which help center articles are published in FeatureOS\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["draft","published"],"type":"string"},{"type":"null"}],"default":null,"description":"Only draft or published articles.","title":"Status"},"locale":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only articles in this language code.","title":"Locale"},"privacy":{"anyOf":[{"enum":["public","unlisted","private"],"type":"string"},{"type":"null"}],"default":null,"description":"Only public, unlisted or private articles.","title":"Privacy"},"collection_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only articles in this collection ID.","title":"Collection Id"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100).","title":"Per Page"}},"title":"list_help_articlesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}