{"openapi":"3.1.0","info":{"title":"Gumlet (BYOK) API","version":"0.1.0","description":"Gumlet (BYOK) lets an AI assistant read your own Gumlet data through the Gumlet API with a key you supply (Gumlet API key). Read-only: 12 tools (get_user, get_organization, list_workspaces, list_folders, list_videos, get_video, list_playlists, list_playlist_videos, list_video_profiles, list_image_sources, get_top_streamed_videos, search_library). The BYOK key travels with each request, is used...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-gumlet.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-gumlet/docs"},"termsOfService":"https://connectorbay.com/byok-gumlet/terms"},"servers":[{"url":"https://byok-gumlet.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-gumlet/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":"Show the Gumlet user the key belongs to: name, roles, timezone and last login date. Use for \"Which Gumlet user is this k","description":"Show the Gumlet user the key belongs to: name, roles, timezone and last login date. Use for \"Which Gumlet user is this key for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"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_organization":{"post":{"operationId":"get_organization","summary":"Show the Gumlet organization: plan names for image and video, billing cycle and unpaid flag. Use for \"Which Gumlet plan ","description":"Show the Gumlet organization: plan names for image and video, billing cycle and unpaid flag. Use for \"Which Gumlet plan is my organization on\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_organizationArguments","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_workspaces":{"post":{"operationId":"list_workspaces","summary":"List video workspaces (id, name, type, dates); secrets and storage credentials are not returned. Use for \"Which Gumlet v","description":"List video workspaces (id, name, type, dates); secrets and storage credentials are not returned. Use for \"Which Gumlet video workspaces do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many workspaces to return.","title":"Size"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip, for paging.","title":"Offset"}},"title":"list_workspacesArguments","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 folders of a video workspace with asset and sub-folder counts; pass parent_id to go one level down. Use for \"What f","description":"List folders of a video workspace with asset and sub-folder counts; pass parent_id to go one level down. Use for \"What folders are in this Gumlet workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace_id":{"description":"Gumlet video workspace id (from list_workspaces).","maxLength":200,"title":"Workspace Id","type":"string"},"parent_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Parent folder id; leave out for root folders.","title":"Parent Id"}},"required":["workspace_id"],"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_videos":{"post":{"operationId":"list_videos","summary":"List videos of a workspace with status, duration, size, playback URL and thumbnail, filtered by status, tag, title text ","description":"List videos of a workspace with status, duration, size, playback URL and thumbnail, filtered by status, tag, title text or dates. Use for \"Which videos are still processing in my Gumlet workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace_id":{"description":"Gumlet video workspace id (from list_workspaces).","maxLength":200,"title":"Workspace Id","type":"string"},"type":{"anyOf":[{"enum":["folders","videos","all"],"type":"string"},{"type":"null"}],"default":"videos","description":"Return folders, videos or all.","title":"Type"},"status":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated asset statuses: queued, processing, ready, errored, deleted.","title":"Status"},"tag":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated tags to keep.","title":"Tag"},"title":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search text for titles and descriptions.","title":"Title"},"start_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only assets created on or after this date (yyyy-MM-dd).","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only assets created on or before this date (yyyy-MM-dd).","title":"End Date"},"sort_by":{"anyOf":[{"enum":["title","duration","uploaded_at","created_at"],"type":"string"},{"type":"null"}],"default":"created_at","description":"Sort by title, duration, uploaded_at or created_at.","title":"Sort By"},"order_by":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"asc or desc.","title":"Order By"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Page size (1 to 100).","title":"Size"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip, for paging.","title":"Offset"}},"required":["workspace_id"],"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: status, title, description, duration, folder, playlists, access control and playback and thumbn","description":"Get one video's details: status, title, description, duration, folder, playlists, access control and playback and thumbnail URLs. Use for \"Show the details of this Gumlet video\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"asset_id":{"description":"Gumlet video asset id (from list_videos).","maxLength":200,"title":"Asset Id","type":"string"}},"required":["asset_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_playlists":{"post":{"operationId":"list_playlists","summary":"List playlists, optionally for one workspace (collection). Use for \"Which playlists exist in my Gumlet workspace\".","description":"List playlists, optionally for one workspace (collection). Use for \"Which playlists exist in my Gumlet workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"collection_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Workspace id to limit the list to.","title":"Collection Id"}},"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/list_playlist_videos":{"post":{"operationId":"list_playlist_videos","summary":"List the videos in one playlist with title, status and duration. Use for \"What videos are in this Gumlet playlist\".","description":"List the videos in one playlist with title, status and duration. Use for \"What videos are in this Gumlet playlist\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"playlist_id":{"description":"Gumlet playlist id (from list_playlists).","maxLength":200,"title":"Playlist Id","type":"string"},"page_number":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page Number"},"page_size":{"anyOf":[{"maximum":100,"minimum":10,"type":"integer"},{"type":"null"}],"default":10,"description":"Videos per page (at least 10).","title":"Page Size"}},"required":["playlist_id"],"title":"list_playlist_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/list_video_profiles":{"post":{"operationId":"list_video_profiles","summary":"List reusable encoding profiles with their format and codec settings. Use for \"Which video encoding profiles are defined","description":"List reusable encoding profiles with their format and codec settings. Use for \"Which video encoding profiles are defined in Gumlet\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Page size.","title":"Size"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip, for paging.","title":"Offset"}},"title":"list_video_profilesArguments","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_image_sources":{"post":{"operationId":"list_image_sources","summary":"List image sources (storage origins) with type, namespace and custom domains; storage credentials are not returned. Use ","description":"List image sources (storage origins) with type, namespace and custom domains; storage credentials are not returned. Use for \"Which image sources does my Gumlet account have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Results per page.","title":"Size"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip, for paging.","title":"Offset"}},"title":"list_image_sourcesArguments","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_top_streamed_videos":{"post":{"operationId":"get_top_streamed_videos","summary":"List the most streamed videos in a date range with streaming units per video. Use for \"Which of my Gumlet videos were st","description":"List the most streamed videos in a date range with streaming units per video. Use for \"Which of my Gumlet videos were streamed the most last month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_at":{"description":"Start date (yyyy-MM-dd).","maxLength":200,"title":"Start At","type":"string"},"end_at":{"description":"End date (yyyy-MM-dd).","maxLength":200,"title":"End At","type":"string"},"collection_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Workspace id to limit to.","title":"Collection Id"},"page":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Items per page.","title":"Page Size"}},"required":["start_at","end_at"],"title":"get_top_streamed_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/search_library":{"post":{"operationId":"search_library","summary":"Search videos, folders, playlists and channels of the account by text. Use for \"Find Gumlet videos about onboarding\".","description":"Search videos, folders, playlists and channels of the account by text. Use for \"Find Gumlet videos about onboarding\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search_query":{"description":"Search text.","maxLength":100,"title":"Search Query","type":"string"},"collection_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Workspace id to limit to.","title":"Collection Id"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Results per kind.","title":"Size"}},"required":["search_query"],"title":"search_libraryArguments","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}}}}