{"openapi":"3.1.0","info":{"title":"Beamer (BYOK) API","version":"0.1.0","description":"Beamer (BYOK) lets an AI assistant read your own Beamer data through the Beamer API with a key you supply (Beamer API key). Read-only: 8 tools (list_posts, count_posts, get_post, list_feature_requests, count_feature_requests, get_feature_request, list_nps_scores, count_nps_responses). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-beamer.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-beamer/docs"},"termsOfService":"https://connectorbay.com/byok-beamer/terms"},"servers":[{"url":"https://byok-beamer.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-beamer/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/list_posts":{"post":{"operationId":"list_posts","summary":"List Beamer changelog posts (newest first) with dates, category, publish state, translations and engagement counts (view","description":"List Beamer changelog posts (newest first) with dates, category, publish state, translations and engagement counts (views, unique views, clicks, feedback and reactions). Calls do not record views. Use for \"What posts did I publish in Beamer and how many people viewed them\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Posts published after this date (ISO 8601).","title":"Date From"},"date_to":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Posts published before this date (ISO 8601).","title":"Date To"},"language":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only posts with a translation in this two-letter language code, for example en (Starter plan and up).","title":"Language"},"category":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only posts of this category.","title":"Category"},"published":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for only published posts, false for only drafts.","title":"Published"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for only archived posts, false for only active ones.","title":"Archived"},"ignore_filters":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to include posts hidden by segmentation (the API key needs the 'Read posts (ignore filters)' permission).","title":"Ignore Filters"},"save_views":{"anyOf":[{"const":false,"type":"boolean"},{"type":"null"}],"default":false,"description":"Always false: stops Beamer from recording these calls as post views in your analytics.","title":"Save Views"},"ignore_request_details":{"anyOf":[{"const":true,"type":"boolean"},{"type":"null"}],"default":true,"description":"Always true: stops Beamer from storing IP and browser details of this call.","title":"Ignore Request Details"},"max_results":{"anyOf":[{"maximum":10,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many items to return (1 to 10).","title":"Max Results"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, combined with max_results, starting at 0.","title":"Page"}},"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/count_posts":{"post":{"operationId":"count_posts","summary":"Count Beamer changelog posts, optionally by date range, category, language, published or archived state. Use for \"How ma","description":"Count Beamer changelog posts, optionally by date range, category, language, published or archived state. Use for \"How many posts have I published in Beamer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items on or after this date (ISO 8601, for example 2026-01-01T00:00:00Z).","title":"Date From"},"date_to":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items before this date (ISO 8601).","title":"Date To"},"category":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only posts of this category.","title":"Category"},"published":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for only published posts, false for only drafts.","title":"Published"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for only archived posts, false for only active ones.","title":"Archived"},"ignore_filters":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to count posts hidden by segmentation (needs the 'Read posts (ignore filters)' permission).","title":"Ignore Filters"}},"title":"count_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 Beamer changelog post by ID with its translations, publish state and engagement counts. Use for \"Show Beamer pos","description":"Get one Beamer changelog post by ID with its translations, publish state and engagement counts. Use for \"Show Beamer post 123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"post_id":{"description":"Beamer post ID (a number), from list_posts.","title":"Post Id","type":"integer"}},"required":["post_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_feature_requests":{"post":{"operationId":"list_feature_requests","summary":"List Beamer feature requests with category, status, translations, vote and comment counts. Requester names, emails and c","description":"List Beamer feature requests with category, status, translations, vote and comment counts. Requester names, emails and custom attributes are not returned. Use for \"Which feature requests are under review in Beamer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Requests created after this date (ISO 8601).","title":"Date From"},"date_to":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Requests created before this date (ISO 8601).","title":"Date To"},"language":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only requests with a translation in this two-letter language code.","title":"Language"},"category":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only requests of this category.","title":"Category"},"status":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only requests with this status, for example under_review.","title":"Status"},"visible":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for only visible requests, false for only hidden ones.","title":"Visible"},"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only requests whose title or content contains this text.","title":"Search"},"max_results":{"anyOf":[{"maximum":10,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many items to return (1 to 10).","title":"Max Results"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, combined with max_results, starting at 0.","title":"Page"}},"title":"list_feature_requestsArguments","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/count_feature_requests":{"post":{"operationId":"count_feature_requests","summary":"Count Beamer feature requests, optionally by date range, category, status or visibility. Use for \"How many feature reque","description":"Count Beamer feature requests, optionally by date range, category, status or visibility. Use for \"How many feature requests did Beamer receive\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items on or after this date (ISO 8601, for example 2026-01-01T00:00:00Z).","title":"Date From"},"date_to":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items before this date (ISO 8601).","title":"Date To"},"category":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only requests of this category.","title":"Category"},"status":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only requests with this status.","title":"Status"},"visible":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for only visible requests, false for only hidden ones.","title":"Visible"}},"title":"count_feature_requestsArguments","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_feature_request":{"post":{"operationId":"get_feature_request","summary":"Get one Beamer feature request by ID with its translations, category, status and vote and comment counts. Use for \"Show ","description":"Get one Beamer feature request by ID with its translations, category, status and vote and comment counts. Use for \"Show Beamer feature request 123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"feature_request_id":{"description":"Beamer feature request ID (a number), from list_feature_requests.","title":"Feature Request Id","type":"integer"}},"required":["feature_request_id"],"title":"get_feature_requestArguments","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_nps_scores":{"post":{"operationId":"list_nps_scores","summary":"List Beamer NPS responses with date, score (0 to 10) and the written feedback. User names and emails are not returned. U","description":"List Beamer NPS responses with date, score (0 to 10) and the written feedback. User names and emails are not returned. Use for \"What NPS scores and comments did Beamer collect recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items on or after this date (ISO 8601, for example 2026-01-01T00:00:00Z).","title":"Date From"},"date_to":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items before this date (ISO 8601).","title":"Date To"},"score_from":{"anyOf":[{"maximum":10,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only scores at or above this value.","title":"Score From"},"score_to":{"anyOf":[{"maximum":10,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only scores at or below this value.","title":"Score To"},"max_results":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many responses to return (1 to 100).","title":"Max Results"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, combined with max_results, starting at 0.","title":"Page"}},"title":"list_nps_scoresArguments","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/count_nps_responses":{"post":{"operationId":"count_nps_responses","summary":"Count Beamer NPS responses, optionally within a date range or score range. Use for \"How many NPS responses did Beamer re","description":"Count Beamer NPS responses, optionally within a date range or score range. Use for \"How many NPS responses did Beamer receive this quarter\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items on or after this date (ISO 8601, for example 2026-01-01T00:00:00Z).","title":"Date From"},"date_to":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items before this date (ISO 8601).","title":"Date To"},"score_from":{"anyOf":[{"maximum":10,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only scores at or above this value.","title":"Score From"},"score_to":{"anyOf":[{"maximum":10,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only scores at or below this value.","title":"Score To"}},"title":"count_nps_responsesArguments","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}}}}