{"openapi":"3.1.0","info":{"title":"SproutVideo (BYOK) API","version":"0.1.0","description":"SproutVideo (BYOK) lets an AI assistant read your own SproutVideo data through the SproutVideo API with a key you supply (SproutVideo API key). Read-only: 10 tools (list_videos, get_video, list_tags, list_playlists, get_playlist, list_folders, list_live_streams, get_play_counts, get_play_counts_by_day, get_video_play_counts). The BYOK key travels with each request, is used for that one call only...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-sproutvideo.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-sproutvideo/docs"},"termsOfService":"https://connectorbay.com/byok-sproutvideo/terms"},"servers":[{"url":"https://byok-sproutvideo.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-sproutvideo/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_videos":{"post":{"operationId":"list_videos","summary":"List the videos in your SproutVideo account with title, state, duration, plays, privacy, tags and dates. Filter by tag, ","description":"List the videos in your SproutVideo account with title, state, duration, plays, privacy, tags and dates. Filter by tag, folder, playlist, state or privacy; 25 per page by default, up to 100. Use for \"What are my most played SproutVideo videos\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"order_by":{"anyOf":[{"enum":["created_at","updated_at","duration","title"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by created_at, updated_at, duration or title.","title":"Order By"},"order_dir":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Order Dir"},"tag_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only videos with this tag name.","title":"Tag Name"},"folder_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only videos in this folder id.","title":"Folder Id"},"playlist_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only videos in this playlist id.","title":"Playlist Id"},"state":{"anyOf":[{"enum":["inspecting","processing","deployed","failed"],"type":"string"},{"type":"null"}],"default":null,"description":"Only videos in this state: inspecting, processing, deployed or failed.","title":"State"},"privacy":{"anyOf":[{"maximum":4,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Privacy level: 0 private, 1 password protected, 2 public, 3 hidden, 4 login protected.","title":"Privacy"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_videosArguments","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_video":{"post":{"operationId":"get_video","summary":"Get one video's details: title, description, duration, plays, state, privacy, size, tags, folder and dates. Use for \"Sho","description":"Get one video's details: title, description, duration, plays, state, privacy, size, tags, folder and dates. Use for \"Show details of SproutVideo video a098d2bbd33e1c328\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"video_id":{"description":"Id of the video, as returned by list_videos.","maxLength":40,"title":"Video Id","type":"string"}},"required":["video_id"],"title":"get_videoArguments","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 in your account with the ids of the videos carrying each tag. Use for \"What tags do I use on SproutVideo\".","description":"List the tags in your account with the ids of the videos carrying each tag. Use for \"What tags do I use on SproutVideo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"order_by":{"anyOf":[{"enum":["created_at","updated_at","name"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by created_at, updated_at or name.","title":"Order By"},"order_dir":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Order Dir"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"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_playlists":{"post":{"operationId":"list_playlists","summary":"List your playlists with title, description, privacy, the ids of the videos inside and dates. Use for \"Which playlists d","description":"List your playlists with title, description, privacy, the ids of the videos inside and dates. Use for \"Which playlists do I have on SproutVideo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"order_by":{"anyOf":[{"enum":["created_at","updated_at","duration","title"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by created_at, updated_at, duration or title.","title":"Order By"},"order_dir":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Order Dir"},"privacy":{"anyOf":[{"maximum":4,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Privacy level: 0 private, 1 password protected, 2 public, 3 hidden, 4 login protected.","title":"Privacy"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_playlistsArguments","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_playlist":{"post":{"operationId":"get_playlist","summary":"Get one playlist by id with its title, description, privacy and video ids. Use for \"Show SproutVideo playlist 97d7eab2c1","description":"Get one playlist by id with its title, description, privacy and video ids. Use for \"Show SproutVideo playlist 97d7eab2c1dd\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"playlist_id":{"description":"Id of the playlist, as returned by list_playlists.","maxLength":40,"title":"Playlist Id","type":"string"}},"required":["playlist_id"],"title":"get_playlistArguments","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_folders":{"post":{"operationId":"list_folders","summary":"List your video folders with name, parent folder and dates. Pass parent_id to list the folders inside one folder. Use fo","description":"List your video folders with name, parent folder and dates. Pass parent_id to list the folders inside one folder. Use for \"What folders are in my SproutVideo account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"parent_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only folders inside this parent folder id.","title":"Parent Id"},"order_by":{"anyOf":[{"enum":["created_at","updated_at","name"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by created_at, updated_at or name.","title":"Order By"},"order_dir":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Order Dir"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_foldersArguments","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_live_streams":{"post":{"operationId":"list_live_streams","summary":"List your live streams with title, state, latency, duration, privacy and dates. The stream key is not returned. Use for ","description":"List your live streams with title, state, latency, duration, privacy and dates. The stream key is not returned. Use for \"Do I have any active SproutVideo live streams\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only live streams in this state, for example active.","title":"State"},"order_by":{"anyOf":[{"enum":["created_at","updated_at","duration","title"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by created_at, updated_at, duration or title.","title":"Order By"},"order_dir":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Order Dir"},"privacy":{"anyOf":[{"maximum":4,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Privacy level: 0 private, 1 password protected, 2 public, 3 hidden, 4 login protected.","title":"Privacy"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_live_streamsArguments","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_play_counts":{"post":{"operationId":"get_play_counts","summary":"Get total plays, impressions, unique plays and unique impressions across all your videos. Use for \"How many plays have m","description":"Get total plays, impressions, unique plays and unique impressions across all your videos. Use for \"How many plays have my SproutVideo videos had in total\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_play_countsArguments","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_play_counts_by_day":{"post":{"operationId":"get_play_counts_by_day","summary":"Get one row per day of plays, impressions, unique plays and unique impressions across all videos between two dates. Use ","description":"Get one row per day of plays, impressions, unique plays and unique impressions across all videos between two dates. Use for \"How many plays did my SproutVideo videos get each day in January 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"First day to include. Date as YYYY-MM-DD.","maxLength":10,"title":"Start Date","type":"string"},"end_date":{"description":"Last day to include. Date as YYYY-MM-DD.","maxLength":10,"title":"End Date","type":"string"}},"required":["start_date","end_date"],"title":"get_play_counts_by_dayArguments","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_video_play_counts":{"post":{"operationId":"get_video_play_counts","summary":"Get total plays, impressions, unique plays and unique impressions for one video. Use for \"How many times has SproutVideo","description":"Get total plays, impressions, unique plays and unique impressions for one video. Use for \"How many times has SproutVideo video a098d2bbd33e1c328 been played\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"video_id":{"description":"Id of the video, as returned by list_videos.","maxLength":40,"title":"Video Id","type":"string"}},"required":["video_id"],"title":"get_video_play_countsArguments","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}}}}