{"openapi":"3.1.0","info":{"title":"Zulip (BYOK) API","version":"0.1.0","description":"Zulip (BYOK) lets an AI assistant read your own Zulip data through the Zulip API with a key you supply (Zulip account email (of the user or bot)). Read-only: 11 tools (get_own_user, list_users, get_user, list_channels, get_channel, list_channel_topics, list_channel_subscribers, list_subscriptions, list_user_groups, list_linkifiers, get_server_settings). The BYOK key travels with each request, is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-zulip.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-zulip/docs"},"termsOfService":"https://connectorbay.com/byok-zulip/terms"},"servers":[{"url":"https://byok-zulip.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-zulip/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_own_user":{"post":{"operationId":"get_own_user","summary":"Show the Zulip user or bot the key belongs to: name, email, role, time zone, join date and active flag. Use for \"Which Z","description":"Show the Zulip user or bot the key belongs to: name, email, role, time zone, join date and active flag. Use for \"Which Zulip account is this API key for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org":{"description":"Your Zulip Cloud organization subdomain: the part before .zulipchat.com, for example 'example'.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Org","type":"string"}},"required":["org"],"title":"get_own_userArguments","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_users":{"post":{"operationId":"list_users","summary":"List the users of the organization (people and bots) with name, email, role, active flag and time zone. Use for \"Who is ","description":"List the users of the organization (people and bots) with name, email, role, active flag and time zone. Use for \"Who is in my Zulip organization\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org":{"description":"Your Zulip Cloud organization subdomain: the part before .zulipchat.com, for example 'example'.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Org","type":"string"},"include_custom_profile_fields":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include custom profile field values.","title":"Include Custom Profile Fields"}},"required":["org"],"title":"list_usersArguments","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_user":{"post":{"operationId":"get_user","summary":"Get one Zulip user by numeric ID: name, email, role, active and bot flags, time zone and join date. Use for \"What is the","description":"Get one Zulip user by numeric ID: name, email, role, active and bot flags, time zone and join date. Use for \"What is the role of Zulip user 5\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org":{"description":"Your Zulip Cloud organization subdomain: the part before .zulipchat.com, for example 'example'.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Org","type":"string"},"user_id":{"description":"Numeric Zulip user ID, for example 5.","minimum":1,"title":"User Id","type":"integer"}},"required":["org","user_id"],"title":"get_userArguments","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_channels":{"post":{"operationId":"list_channels","summary":"List the channels (streams) the account can see with description, privacy flags, subscriber count and weekly traffic. Us","description":"List the channels (streams) the account can see with description, privacy flags, subscriber count and weekly traffic. Use for \"Which channels exist in my Zulip organization\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org":{"description":"Your Zulip Cloud organization subdomain: the part before .zulipchat.com, for example 'example'.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Org","type":"string"},"include_all":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include all channels the account has metadata access to (administrators see every channel).","title":"Include All"},"exclude_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True (default) to leave out archived channels.","title":"Exclude Archived"}},"required":["org"],"title":"list_channelsArguments","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_channel":{"post":{"operationId":"get_channel","summary":"Get one Zulip channel by numeric ID: name, description, privacy flags, creation time, subscriber count and retention day","description":"Get one Zulip channel by numeric ID: name, description, privacy flags, creation time, subscriber count and retention days. Use for \"Is Zulip channel 12 private\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org":{"description":"Your Zulip Cloud organization subdomain: the part before .zulipchat.com, for example 'example'.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Org","type":"string"},"stream_id":{"description":"Numeric ID of the channel (stream), for example 12. List channels to find it.","minimum":1,"title":"Stream Id","type":"integer"}},"required":["org","stream_id"],"title":"get_channelArguments","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_channel_topics":{"post":{"operationId":"list_channel_topics","summary":"List the topic names in a channel with the newest message ID of each topic (message text is not returned). Use for \"What","description":"List the topic names in a channel with the newest message ID of each topic (message text is not returned). Use for \"What topics are being discussed in Zulip channel 12\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org":{"description":"Your Zulip Cloud organization subdomain: the part before .zulipchat.com, for example 'example'.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Org","type":"string"},"stream_id":{"description":"Numeric ID of the channel (stream), for example 12. List channels to find it.","minimum":1,"title":"Stream Id","type":"integer"}},"required":["org","stream_id"],"title":"list_channel_topicsArguments","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_channel_subscribers":{"post":{"operationId":"list_channel_subscribers","summary":"List the user IDs subscribed to a channel (use list_users to look up names). Use for \"Who is subscribed to Zulip channel","description":"List the user IDs subscribed to a channel (use list_users to look up names). Use for \"Who is subscribed to Zulip channel 12\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org":{"description":"Your Zulip Cloud organization subdomain: the part before .zulipchat.com, for example 'example'.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Org","type":"string"},"stream_id":{"description":"Numeric ID of the channel (stream), for example 12. List channels to find it.","minimum":1,"title":"Stream Id","type":"integer"}},"required":["org","stream_id"],"title":"list_channel_subscribersArguments","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_subscriptions":{"post":{"operationId":"list_subscriptions","summary":"List the channels the account is subscribed to with notification settings, mute flag, color and optionally subscriber ID","description":"List the channels the account is subscribed to with notification settings, mute flag, color and optionally subscriber IDs. Use for \"Which Zulip channels am I subscribed to and which are muted\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org":{"description":"Your Zulip Cloud organization subdomain: the part before .zulipchat.com, for example 'example'.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Org","type":"string"},"include_subscribers":{"anyOf":[{"enum":["true","false","partial"],"type":"string"},{"type":"null"}],"default":"false","description":"Include subscriber user IDs: true, false (default) or partial.","title":"Include Subscribers"}},"required":["org"],"title":"list_subscriptionsArguments","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_user_groups":{"post":{"operationId":"list_user_groups","summary":"List the user groups of the organization with name, description, member IDs and system-group flag. Use for \"Which user g","description":"List the user groups of the organization with name, description, member IDs and system-group flag. Use for \"Which user groups exist in my Zulip organization\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org":{"description":"Your Zulip Cloud organization subdomain: the part before .zulipchat.com, for example 'example'.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Org","type":"string"}},"required":["org"],"title":"list_user_groupsArguments","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_linkifiers":{"post":{"operationId":"list_linkifiers","summary":"List the organization's linkifiers: patterns such as #123 that Zulip turns into links. Use for \"What linkifiers are conf","description":"List the organization's linkifiers: patterns such as #123 that Zulip turns into links. Use for \"What linkifiers are configured in my Zulip organization\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org":{"description":"Your Zulip Cloud organization subdomain: the part before .zulipchat.com, for example 'example'.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Org","type":"string"}},"required":["org"],"title":"list_linkifiersArguments","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_server_settings":{"post":{"operationId":"get_server_settings","summary":"Get the organization's public settings: name, description, Zulip version, feature level and which login methods are on. ","description":"Get the organization's public settings: name, description, Zulip version, feature level and which login methods are on. Use for \"Which Zulip version does my organization run\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org":{"description":"Your Zulip Cloud organization subdomain: the part before .zulipchat.com, for example 'example'.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Org","type":"string"}},"required":["org"],"title":"get_server_settingsArguments","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}}}}