{"openapi":"3.1.0","info":{"title":"TwitCasting (BYOK) API","version":"0.1.0","description":"TwitCasting (BYOK) lets an AI assistant read your own TwitCasting data through the TwitCasting API with a key you supply (TwitCasting app Client ID). Read-only: 11 tools (get_user, get_movie, list_user_movies, get_current_live, list_movie_comments, list_supporters, list_supporting, search_users, search_lives, list_categories, get_upcoming_schedules). 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-twitcasting.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-twitcasting/docs"},"termsOfService":"https://connectorbay.com/byok-twitcasting/terms"},"servers":[{"url":"https://byok-twitcasting.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-twitcasting/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_user":{"post":{"operationId":"get_user","summary":"Get a TwitCasting broadcaster: name, screen ID, profile text, level, last broadcast ID, live flag and supporter counts. ","description":"Get a TwitCasting broadcaster: name, screen ID, profile text, level, last broadcast ID, live flag and supporter counts. Use for \"Is TwitCasting user twitcasting_jp live right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"user_id":{"description":"TwitCasting user ID (digits) or screen ID (the name in the channel URL), for example 'twitcasting_jp'.","maxLength":64,"title":"User Id","type":"string"}},"required":["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/get_movie":{"post":{"operationId":"get_movie","summary":"Get one broadcast (live or recording): title, category, link, live and recorded flags, comment count, duration, view cou","description":"Get one broadcast (live or recording): title, category, link, live and recorded flags, comment count, duration, view counts, plus the broadcaster and tags. Use for \"How many people watched TwitCasting broadcast 189037369\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"movie_id":{"description":"Numeric ID of a live or recorded broadcast, for example '189037369'.","maxLength":20,"title":"Movie Id","type":"string"}},"required":["movie_id"],"title":"get_movieArguments","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_movies":{"post":{"operationId":"list_user_movies","summary":"List a TwitCasting user's past broadcasts, newest first, with title, view counts, duration and links. Up to 50 per call.","description":"List a TwitCasting user's past broadcasts, newest first, with title, view counts, duration and links. Up to 50 per call. Use for \"What are the latest broadcasts of TwitCasting user twitcasting_jp\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"user_id":{"description":"TwitCasting user ID (digits) or screen ID (the name in the channel URL), for example 'twitcasting_jp'.","maxLength":64,"title":"User Id","type":"string"},"offset":{"anyOf":[{"maximum":1000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many broadcasts to skip from the newest (0 to 1000).","title":"Offset"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many broadcasts to return (1 to 50).","title":"Limit"},"slice_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only broadcasts with this ID or older; when set, offset is ignored.","title":"Slice Id"}},"required":["user_id"],"title":"list_user_moviesArguments","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_current_live":{"post":{"operationId":"get_current_live","summary":"Get the broadcast a TwitCasting user is streaming right now, with viewer counts and tags. Returns not found when the use","description":"Get the broadcast a TwitCasting user is streaming right now, with viewer counts and tags. Returns not found when the user is offline. Use for \"What is TwitCasting user twitcasting_jp streaming at the moment\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"user_id":{"description":"TwitCasting user ID (digits) or screen ID (the name in the channel URL), for example 'twitcasting_jp'.","maxLength":64,"title":"User Id","type":"string"}},"required":["user_id"],"title":"get_current_liveArguments","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_movie_comments":{"post":{"operationId":"list_movie_comments","summary":"List the public comments of a broadcast, newest first, with commenter name and time. Up to 50 per call. Use for \"What ar","description":"List the public comments of a broadcast, newest first, with commenter name and time. Up to 50 per call. Use for \"What are viewers commenting on TwitCasting broadcast 189037369\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"movie_id":{"description":"Numeric ID of a live or recorded broadcast, for example '189037369'.","maxLength":20,"title":"Movie Id","type":"string"},"offset":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many comments to skip from the newest.","title":"Offset"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many comments to return (1 to 50).","title":"Limit"},"slice_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only comments with this comment ID or later; when set, offset is ignored.","title":"Slice Id"}},"required":["movie_id"],"title":"list_movie_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_supporters":{"post":{"operationId":"list_supporters","summary":"List the users who support a TwitCasting broadcaster, newest or by contribution ranking, with levels and points. Up to 2","description":"List the users who support a TwitCasting broadcaster, newest or by contribution ranking, with levels and points. Up to 20 per call. Use for \"Who are the top supporters of TwitCasting user twitcasting_jp\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"user_id":{"description":"TwitCasting user ID (digits) or screen ID (the name in the channel URL), for example 'twitcasting_jp'.","maxLength":64,"title":"User Id","type":"string"},"sort":{"description":"Order: new (newest first) or ranking (by contribution).","enum":["new","ranking"],"title":"Sort","type":"string"},"offset":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many supporters to skip.","title":"Offset"},"limit":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many supporters to return (1 to 20).","title":"Limit"}},"required":["user_id","sort"],"title":"list_supportersArguments","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_supporting":{"post":{"operationId":"list_supporting","summary":"List the broadcasters a TwitCasting user supports, with levels and live flags. Up to 20 per call. Use for \"Which broadca","description":"List the broadcasters a TwitCasting user supports, with levels and live flags. Up to 20 per call. Use for \"Which broadcasters does TwitCasting user twitcasting_jp support\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"user_id":{"description":"TwitCasting user ID (digits) or screen ID (the name in the channel URL), for example 'twitcasting_jp'.","maxLength":64,"title":"User Id","type":"string"},"offset":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many entries to skip.","title":"Offset"},"limit":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many entries to return (1 to 20).","title":"Limit"}},"required":["user_id"],"title":"list_supportingArguments","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_users":{"post":{"operationId":"search_users","summary":"Search TwitCasting users by words (all words must match); only Japanese-language accounts are searchable. Use for \"Find ","description":"Search TwitCasting users by words (all words must match); only Japanese-language accounts are searchable. Use for \"Find TwitCasting users matching 'music'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"words":{"description":"Search words separated by spaces; every word must match.","maxLength":100,"title":"Words","type":"string"},"lang":{"const":"ja","description":"Language of the users to search; currently only ja.","title":"Lang","type":"string"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many users to return (1 to 50).","title":"Limit"}},"required":["words","lang"],"title":"search_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/search_lives":{"post":{"operationId":"search_lives","summary":"Search broadcasts that are live now by tag, word, category, newest or recommended. Use for \"Which TwitCasting broadcasts","description":"Search broadcasts that are live now by tag, word, category, newest or recommended. Use for \"Which TwitCasting broadcasts are live now with the tag 'music'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"type":{"description":"Kind of search: tag, word, category, new or recommend.","enum":["tag","word","category","new","recommend"],"title":"Type","type":"string"},"lang":{"const":"ja","description":"Language of the broadcasters; currently only ja.","title":"Lang","type":"string"},"context":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search words (type tag or word, space-separated) or a sub-category ID (type category); not used for new or recommend.","title":"Context"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many broadcasts to return (1 to 100).","title":"Limit"}},"required":["type","lang"],"title":"search_livesArguments","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_categories":{"post":{"operationId":"list_categories","summary":"List the broadcast categories and sub-categories that have live streams right now, with stream counts. Use for \"Which Tw","description":"List the broadcast categories and sub-categories that have live streams right now, with stream counts. Use for \"Which TwitCasting categories have live broadcasts now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lang":{"description":"Language of the category names: ja or en.","enum":["ja","en"],"title":"Lang","type":"string"}},"required":["lang"],"title":"list_categoriesArguments","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_upcoming_schedules":{"post":{"operationId":"get_upcoming_schedules","summary":"List a TwitCasting user's scheduled upcoming broadcasts within the next days (default 30, up to 90). Use for \"When is Tw","description":"List a TwitCasting user's scheduled upcoming broadcasts within the next days (default 30, up to 90). Use for \"When is TwitCasting user twitcasting_jp broadcasting next\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"user_id":{"description":"TwitCasting user ID (digits) or screen ID (the name in the channel URL), for example 'twitcasting_jp'.","maxLength":64,"title":"User Id","type":"string"},"in_days":{"anyOf":[{"maximum":90,"minimum":0,"type":"integer"},{"type":"null"}],"default":30,"description":"How many days ahead to look (0 to 90).","title":"In Days"}},"required":["user_id"],"title":"get_upcoming_schedulesArguments","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}}}}