{"openapi":"3.1.0","info":{"title":"Livepeer (BYOK) API","version":"0.1.0","description":"Livepeer (BYOK) lets an AI assistant read your own Livepeer data through the Livepeer API with a key you supply (Livepeer Studio API key). Read-only: 11 tools (list_streams, get_stream, list_stream_sessions, list_sessions, list_assets, get_asset, list_tasks, get_playback_info, get_total_views, query_viewership, query_usage). 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-livepeer.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-livepeer/docs"},"termsOfService":"https://connectorbay.com/byok-livepeer/terms"},"servers":[{"url":"https://byok-livepeer.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-livepeer/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_streams":{"post":{"operationId":"list_streams","summary":"List the live streams of the account with name, active and health flags, recording flag, last seen time, playback ID and","description":"List the live streams of the account with name, active and health flags, recording flag, last seen time, playback ID and segment and byte counters. Stream keys are not returned. Use for \"Which of my Livepeer streams are live right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_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_stream":{"post":{"operationId":"get_stream","summary":"Get one live stream's status, health issues, recording flag, playback ID and ingest and delivery counters. The stream ke","description":"Get one live stream's status, health issues, recording flag, playback ID and ingest and delivery counters. The stream key is not returned. Use for \"Is my Livepeer stream healthy and how much data has it ingested\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"stream_id":{"description":"Livepeer stream ID from list_streams.","maxLength":200,"title":"Stream Id","type":"string"}},"required":["stream_id"],"title":"get_streamArguments","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_stream_sessions":{"post":{"operationId":"list_stream_sessions","summary":"List the sessions (each go-live period) of one stream, optionally only those with a recording, with duration and byte co","description":"List the sessions (each go-live period) of one stream, optionally only those with a recording, with duration and byte counters. Use for \"What recorded sessions did my Livepeer stream have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"stream_id":{"description":"Livepeer stream ID from list_streams.","maxLength":200,"title":"Stream Id","type":"string"},"record":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to list only sessions that were recorded.","title":"Record"}},"required":["stream_id"],"title":"list_stream_sessionsArguments","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_sessions":{"post":{"operationId":"list_sessions","summary":"List all stream sessions of the account with parent stream, times, recording status, health and byte counters. Use for \"","description":"List all stream sessions of the account with parent stream, times, recording status, health and byte counters. Use for \"Which Livepeer stream sessions had problems recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_sessionsArguments","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_assets":{"post":{"operationId":"list_assets","summary":"List the video and audio assets with name, type, playback ID and URL, size, processing status, duration and bitrate. Use","description":"List the video and audio assets with name, type, playback ID and URL, size, processing status, duration and bitrate. Use for \"Which videos have I uploaded to Livepeer and are they ready\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_assetsArguments","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_asset":{"post":{"operationId":"get_asset","summary":"Get one asset's processing phase and progress, size, format, duration, bitrate and playback URL. Use for \"What is the st","description":"Get one asset's processing phase and progress, size, format, duration, bitrate and playback URL. Use for \"What is the status of my Livepeer asset\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"asset_id":{"description":"Livepeer asset ID from list_assets.","maxLength":200,"title":"Asset Id","type":"string"}},"required":["asset_id"],"title":"get_assetArguments","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_tasks":{"post":{"operationId":"list_tasks","summary":"List asynchronous tasks (upload, export, transcode, clip) with type, input and output asset, phase, progress and error m","description":"List asynchronous tasks (upload, export, transcode, clip) with type, input and output asset, phase, progress and error message. Use for \"Did my Livepeer upload and transcode tasks finish\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_tasksArguments","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_playback_info":{"post":{"operationId":"get_playback_info","summary":"Get playback information for a playback ID: whether it is live, video on demand or a recording, and the available source","description":"Get playback information for a playback ID: whether it is live, video on demand or a recording, and the available sources (HLS, MP4, WebRTC) with sizes and bitrates. Use for \"What playback sources does Livepeer have for playback ID eaw4nk06ts2d0mzb\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"playback_id":{"description":"Playback ID of an asset or stream, for example 'eaw4nk06ts2d0mzb'.","maxLength":200,"title":"Playback Id","type":"string"}},"required":["playback_id"],"title":"get_playback_infoArguments","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_total_views":{"post":{"operationId":"get_total_views","summary":"Get the all-time public view count and total watch time in minutes for one playback ID. Use for \"How many views has Live","description":"Get the all-time public view count and total watch time in minutes for one playback ID. Use for \"How many views has Livepeer playback ID eaw4nk06ts2d0mzb had\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"playback_id":{"description":"Playback ID of an asset or stream.","maxLength":200,"title":"Playback Id","type":"string"}},"required":["playback_id"],"title":"get_total_viewsArguments","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/query_viewership":{"post":{"operationId":"query_viewership","summary":"Query aggregated viewership metrics (views, watch minutes, time to first frame, rebuffer ratio, error rate) over a time ","description":"Query aggregated viewership metrics (views, watch minutes, time to first frame, rebuffer ratio, error rate) over a time range, bucketed by hour to year. No viewer-level data is returned. Use for \"How many views did my Livepeer video get per day last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"range_start":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the range: an ISO 8601 date-time such as 2026-09-01T00:00:00Z (inclusive).","title":"Range Start"},"range_end":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the range: an ISO 8601 date-time (exclusive).","title":"Range End"},"time_step":{"anyOf":[{"enum":["hour","day","week","month","year"],"type":"string"},{"type":"null"}],"default":null,"description":"Bucket size: hour, day, week, month or year.","title":"Time Step"},"playback_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only this playback ID.","title":"Playback Id"},"asset_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only this asset ID.","title":"Asset Id"},"stream_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only this stream ID.","title":"Stream Id"}},"title":"query_viewershipArguments","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/query_usage":{"post":{"operationId":"query_usage","summary":"Query account usage in minutes (delivery, transcoding total and storage) over a time range, bucketed by hour or day. Use","description":"Query account usage in minutes (delivery, transcoding total and storage) over a time range, bucketed by hour or day. Use for \"How many delivery minutes did my Livepeer account use this week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"range_start_ms":{"anyOf":[{"maximum":4102444800000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Start of the range as a Unix timestamp in milliseconds (inclusive).","title":"Range Start Ms"},"range_end_ms":{"anyOf":[{"maximum":4102444800000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"End of the range as a Unix timestamp in milliseconds (exclusive).","title":"Range End Ms"},"time_step":{"anyOf":[{"enum":["hour","day"],"type":"string"},{"type":"null"}],"default":null,"description":"Bucket size: hour or day.","title":"Time Step"}},"title":"query_usageArguments","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}}}}