Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/livepeer-session-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
OpenAPI Specification
openapi: 3.2.0
info:
title: Livepeer Session API
version: 1.0.0
description: 'Operations tagged session across 2 of this provider''s published API definitions: livepeer-openapi.yml, livepeer-studio-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://livepeer.studio/api
security:
- apiKey: []
tags:
- name: session
description: Operations related to session api
paths:
/session/{id}/clips:
get:
operationId: getSessionClips
x-speakeasy-name-override: getClips
summary: Retrieve clips of a session
tags:
- session
parameters:
- in: path
name: id
schema:
type: string
description: ID of the parent session
required: true
responses:
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/error'
'200':
description: Success
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/asset'
x-speakeasy-name-override: data
x-codeSamples:
- lang: typescript
label: getSessionClips
source: "import { Livepeer } from \"livepeer\";\n\nconst livepeer = new Livepeer({\n apiKey: \"<YOUR_BEARER_TOKEN_HERE>\",\n});\n\nasync function run() {\n const result = await livepeer.session.getClips(\"<id>\");\n\n // Handle the result\n console.log(result);\n}\n\nrun();"
- lang: go
label: getSessionClips
source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := livepeergo.New(\n livepeergo.WithSecurity(\"<YOUR_BEARER_TOKEN_HERE>\"),\n )\n\n ctx := context.Background()\n res, err := s.Session.GetClips(ctx, \"<id>\")\n if err != nil {\n log.Fatal(err)\n }\n if res.Data != nil {\n // handle response\n }\n}"
- lang: python
label: getSessionClips
source: "from livepeer import Livepeer\n\ns = Livepeer(\n api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.session.get_clips(id=\"<id>\")\n\nif res.data is not None:\n # handle response\n pass"
servers:
- url: https://livepeer.studio/api
/session:
get:
operationId: getSessions
x-speakeasy-name-override: getAll
summary: Retrieve sessions
tags:
- session
responses:
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/error'
'200':
description: Success
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/session'
x-speakeasy-name-override: data
x-codeSamples:
- lang: typescript
label: getSessions
source: "import { Livepeer } from \"livepeer\";\n\nconst livepeer = new Livepeer({\n apiKey: \"<YOUR_BEARER_TOKEN_HERE>\",\n});\n\nasync function run() {\n const result = await livepeer.session.getAll();\n\n // Handle the result\n console.log(result);\n}\n\nrun();"
- lang: go
label: getSessions
source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := livepeergo.New(\n livepeergo.WithSecurity(\"<YOUR_BEARER_TOKEN_HERE>\"),\n )\n\n ctx := context.Background()\n res, err := s.Session.GetAll(ctx)\n if err != nil {\n log.Fatal(err)\n }\n if res.Data != nil {\n // handle response\n }\n}"
- lang: python
label: getSessions
source: "from livepeer import Livepeer\n\ns = Livepeer(\n api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.session.get_all()\n\nif res.data is not None:\n # handle response\n pass"
servers:
- url: https://livepeer.studio/api
/session/{id}:
get:
operationId: getSession
x-speakeasy-name-override: get
summary: Retrieve a session
tags:
- session
parameters:
- in: path
name: id
schema:
type: string
description: ID of the session
required: true
responses:
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/error'
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/session'
x-speakeasy-name-override: data
x-codeSamples:
- lang: typescript
label: getSession
source: "import { Livepeer } from \"livepeer\";\n\nconst livepeer = new Livepeer({\n apiKey: \"<YOUR_BEARER_TOKEN_HERE>\",\n});\n\nasync function run() {\n const result = await livepeer.session.get(\"<id>\");\n\n // Handle the result\n console.log(result);\n}\n\nrun();"
- lang: go
label: getSession
source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := livepeergo.New(\n livepeergo.WithSecurity(\"<YOUR_BEARER_TOKEN_HERE>\"),\n )\n\n ctx := context.Background()\n res, err := s.Session.Get(ctx, \"<id>\")\n if err != nil {\n log.Fatal(err)\n }\n if res.Session != nil {\n // handle response\n }\n}"
- lang: python
label: getSession
source: "from livepeer import Livepeer\n\ns = Livepeer(\n api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.session.get(id=\"<id>\")\n\nif res.session is not None:\n # handle response\n pass"
servers:
- url: https://livepeer.studio/api
/stream/{parentId}/sessions:
get:
operationId: getRecordedSessions
x-speakeasy-name-override: getRecorded
summary: Retrieve Recorded Sessions
tags:
- session
parameters:
- in: path
name: parentId
schema:
type: string
description: ID of the parent stream
required: true
- in: query
name: record
schema:
oneOf:
- type: boolean
- type: integer
example: true
description: 'Flag indicating if the response should only include recorded
sessions
'
responses:
default:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/error'
'200':
description: Success
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/session'
x-speakeasy-name-override: data
x-codeSamples:
- lang: typescript
label: getRecordedSessions
source: "import { Livepeer } from \"livepeer\";\n\nconst livepeer = new Livepeer({\n apiKey: \"<YOUR_BEARER_TOKEN_HERE>\",\n});\n\nasync function run() {\n const result = await livepeer.session.getRecorded(\"<id>\", true);\n\n // Handle the result\n console.log(result);\n}\n\nrun();"
- lang: go
label: getRecordedSessions
source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"log\"\n)\n\nfunc main() {\n s := livepeergo.New(\n livepeergo.WithSecurity(\"<YOUR_BEARER_TOKEN_HERE>\"),\n )\n\n ctx := context.Background()\n res, err := s.Session.GetRecorded(ctx, \"<value>\", livepeergo.Pointer(operations.CreateRecordBoolean(\n true,\n )))\n if err != nil {\n log.Fatal(err)\n }\n if res.Data != nil {\n // handle response\n }\n}"
- lang: python
label: getRecordedSessions
source: "from livepeer import Livepeer\n\ns = Livepeer(\n api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.session.get_recorded(parent_id=\"<value>\", record=True)\n\nif res.data is not None:\n # handle response\n pass"
servers:
- url: https://livepeer.studio/api
components:
schemas:
playback-policy:
type:
- object
- 'null'
description: Whether the playback policy for an asset or stream is public or signed
additionalProperties: false
required:
- type
properties:
type:
type: string
enum:
- public
- jwt
- webhook
example: webhook
webhookId:
type: string
description: ID of the webhook to use for playback policy
example: 1bde4o2i6xycudoy
webhookContext:
type: object
description: User-defined webhook context
additionalProperties: true
example:
streamerId: my-custom-id
refreshInterval:
type: number
description: 'Interval (in seconds) at which the playback policy should be
refreshed (default 600 seconds)
'
example: 600
allowedOrigins:
type: array
description: List of allowed origins for CORS playback (<scheme>://<hostname>:<port>, <scheme>://<hostname>)
items:
type: string
storage-status:
readOnly: true
additionalProperties: false
required:
- phase
- tasks
properties:
phase:
type: string
description: Phase of the asset storage
enum:
- waiting
- processing
- ready
- failed
- reverted
example: ready
progress:
type: number
description: Current progress of the task updating the storage.
example: 0.5
errorMessage:
type: string
description: Error message if the last storage changed failed.
example: Failed to update storage
tasks:
type: object
additionalProperties: false
properties:
pending:
type: string
description: 'ID of any currently running task that is exporting this
asset to IPFS.
'
example: 09F8B46C-61A0-4254-9875-F71F4C605BC7
last:
type: string
description: 'ID of the last task to run successfully, that created
the currently saved data.
'
example: 09F8B46C-61A0-4254-9875-F71F4C605BC7
failed:
type: string
description: ID of the last task to fail execution.
example: 09F8B46C-61A0-4254-9875-F71F4C605BC7
creator-id:
oneOf:
- type: object
additionalProperties: false
required:
- type
- value
properties:
type:
type: string
enum:
- unverified
example: unverified
value:
type: string
description: Developer-managed ID of the user who created the resource.
example: user123
ipfs-file-info:
type: object
required:
- cid
additionalProperties: false
properties:
cid:
type: string
description: CID of the file on IPFS
url:
readOnly: true
type: string
description: URL with IPFS scheme for the file
gatewayUrl:
readOnly: true
type: string
description: URL to access file via HTTP through an IPFS gateway
asset:
type: object
additionalProperties: false
required:
- id
- name
- source
properties:
id:
type: string
readOnly: true
example: 09F8B46C-61A0-4254-9875-F71F4C605BC7
type:
type: string
enum:
- video
- audio
description: Type of the asset.
example: video
playbackId:
type: string
example: eaw4nk06ts2d0mzb
description: The playback ID to use with the Playback Info endpoint to retrieve playback URLs.
userId:
type: string
readOnly: true
example: 66E2161C-7670-4D05-B71D-DA2D6979556F
deprecated: true
staticMp4:
type: boolean
writeOnly: true
description: Whether to generate MP4s for the asset.
playbackUrl:
readOnly: true
type: string
example: https://livepeercdn.com/asset/ea03f37e-f861-4cdd-b495-0e60b6d753ad/index.m3u8
description: URL for HLS playback. **It is recommended to not use this URL**, and instead use playback IDs with the Playback Info endpoint to retrieve the playback URLs - this URL format is subject to change (e.g. https://livepeercdn.com/asset/ea03f37e-f861-4cdd-b495-0e60b6d753ad/index.m3u8).
downloadUrl:
readOnly: true
type: string
example: https://livepeercdn.com/asset/eaw4nk06ts2d0mzb/video/download.mp4
description: The URL to directly download the asset, e.g. `https://livepeercdn.com/asset/eawrrk06ts2d0mzb/video`. It is not recommended to use this for playback.
playbackPolicy:
$ref: '#/components/schemas/playback-policy'
source:
oneOf:
- additionalProperties: false
required:
- type
- url
properties:
type:
type: string
enum:
- url
url:
type: string
description: URL from which the asset was uploaded.
gatewayUrl:
type: string
description: Gateway URL from asset if parsed from provided URL on upload.
encryption:
$ref: '#/components/schemas/new-asset-payload/properties/encryption'
- additionalProperties: false
required:
- type
- sessionId
properties:
type:
type: string
enum:
- recording
sessionId:
type: string
description: ID of the session from which this asset was created
- additionalProperties: false
required:
- type
properties:
type:
type: string
enum:
- directUpload
- clip
encryption:
$ref: '#/components/schemas/new-asset-payload/properties/encryption'
sourceId:
type: string
description: ID of the asset or stream from which this asset was created.
sessionId:
type: string
description: ID of the session from which this asset was created.
playbackId:
type: string
description: Playback ID of the asset or stream from which this asset was created.
requesterId:
type: string
description: ID of the requester from which this asset was created.
assetId:
type: string
description: ID of the asset from which this asset was created.
creatorId:
$ref: '#/components/schemas/creator-id'
profiles:
type: array
description: 'Requested profiles for the asset to be transcoded into. Configured
on the upload APIs payload or through the `stream.recordingSpec`
field for recordings. If not specified, default profiles are derived
based on the source input. If this is a recording, the source will
not be present in this list but will be available for playback.
'
items:
$ref: '#/components/schemas/transcode-profile'
storage:
type: object
additionalProperties: false
properties:
ipfs:
type: object
additionalProperties: false
properties:
spec:
type: object
additionalProperties: false
default: {}
properties:
nftMetadataTemplate:
type: string
enum:
- file
- player
default: file
description: 'Name of the NFT metadata template to export. ''player''
will embed the Livepeer Player on the NFT while ''file''
will reference only the immutable MP4 files.
'
nftMetadata:
type: object
description: 'Additional data to add to the NFT metadata exported to
IPFS. Will be deep merged with the default metadata
exported.
'
$ref: {}
nftMetadata:
$ref: '#/components/schemas/ipfs-file-info'
updatedAt:
readOnly: true
type: number
description: 'Timestamp (in milliseconds) at which IPFS export task was
updated
'
example: 1587667174725
status:
$ref: '#/components/schemas/storage-status'
status:
readOnly: true
type: object
additionalProperties: false
required:
- phase
- updatedAt
description: Status of the asset
properties:
phase:
type: string
description: Phase of the asset
enum:
- uploading
- waiting
- processing
- ready
- failed
- deleting
- deleted
updatedAt:
type: number
description: Timestamp (in milliseconds) at which the asset was last updated
example: 1587667174725
progress:
type: number
description: Current progress of the task creating this asset.
errorMessage:
type: string
description: Error message if the asset creation failed.
name:
type: string
description: 'The name of the asset. This is not necessarily the filename - it can be a custom name or title.
'
example: filename.mp4
projectId:
type: string
description: The ID of the project
example: aac12556-4d65-4d34-9fb6-d1f0985eb0a9
createdAt:
readOnly: true
type: number
description: Timestamp (in milliseconds) at which asset was created
example: 1587667174725
createdByTokenName:
type: string
readOnly: true
description: Name of the token used to create this object
size:
readOnly: true
type: number
description: Size of the asset in bytes
example: 84934509
hash:
type:
- array
- 'null'
description: Hash of the asset
items:
type: object
additionalProperties: false
properties:
hash:
type: string
description: Hash of the asset
example: 9b560b28b85378a5004117539196ab24e21bbd75b0e9eb1a8bc7c5fd80dc5b57
algorithm:
type: string
description: Hash algorithm used to compute the hash
example: sha256
videoSpec:
readOnly: true
type: object
additionalProperties: false
description: Video metadata
properties:
format:
type: string
description: Format of the asset
example: mp4
duration:
type: number
description: Duration of the asset in seconds (float)
example: 23.8328
bitrate:
type: number
description: Bitrate of the video in bits per second
example: 1000000
tracks:
type: array
description: 'List of tracks associated with the asset when the format
contemplates them (e.g. mp4)
'
items:
type: object
additionalProperties: false
required:
- type
- codec
properties:
type:
type: string
description: type of track
enum:
- video
- audio
example: video
codec:
type: string
description: Codec of the track
example: aac
startTime:
type: number
description: Start time of the track in seconds
example: 23.8238
duration:
type: number
description: Duration of the track in seconds
example: 23.8238
bitrate:
type: number
description: Bitrate of the track in bits per second
example: 1000000
width:
type: number
description: Width of the track - only for video tracks
example: 1920
height:
type: number
description: Height of the track - only for video tracks
example: 1080
pixelFormat:
type: string
description: Pixel format of the track - only for video tracks
example: yuv420p
fps:
type: number
description: Frame rate of the track - only for video tracks
example: 30
channels:
type: number
description: Amount of audio channels in the track
example: 2
sampleRate:
type: number
description: 'Sample rate of the track in samples per second - only for
audio tracks
'
example: 44100
bitDepth:
type: number
description: Bit depth of the track - only for audio tracks
example: 16
session:
type: object
required:
- name
- streamId
additionalProperties: false
properties:
id:
type: string
readOnly: true
example: de7818e7-610a-4057-8f6f-b785dc1e6f88
kind:
type: string
example: stream
deprecated: true
userId:
type: string
readOnly: true
example: 66E2161C-7670-4D05-B71D-DA2D6979556F
deprecated: true
name:
type: string
example: test_session
lastSeen:
type: number
example: 1587667174725
sourceSegments:
type: number
example: 1
transcodedSegments:
type: number
example: 2
sourceSegmentsDuration:
type: number
example: 1
description: Duration of all the source segments, sec
transcodedSegmentsDuration:
type: number
example: 2
description: Duration of all the transcoded segments, sec
sourceBytes:
type: number
example: 1
transcodedBytes:
type: number
example: 2
ingestRate:
type: number
example: 1
description: Rate at which sourceBytes increases (bytes/second)
outgoingRate:
type: number
example: 2
description: Rate at which transcodedBytes increases (bytes/second)
isHealthy:
$ref: '#/components/schemas/stream-health-payload/properties/is_healthy'
issues:
$ref: '#/components/schemas/stream-health-payload/properties/human_issues'
createdAt:
readOnly: true
type: number
description: Timestamp (in milliseconds) at which stream object was created
example: 1587667174725
parentId:
type: string
example: de7818e7-610a-4057-8f6f-b785dc1e6f88
description: Points to parent stream object
projectId:
type: string
description: The ID of the project
example: aac12556-4d65-4d34-9fb6-d1f0985eb0a9
record:
description: 'Whether the stream should be recorded. Uses default settings. For more customization, create and configure an object store.
'
type: boolean
example: false
recordingStatus:
readOnly: true
type: string
description: The status of the recording process of this stream session.
enum:
- waiting
- ready
- failed
- deleted
- none
recordingUrl:
type: string
readOnly: true
description: URL for accessing the recording of this stream session.
mp4Url:
type: string
readOnly: true
description: The URL for the stream session recording packaged in an MP4.
playbackId:
type: string
example: eaw4nk06ts2d0mzb
description: The playback ID to use with the Playback Info endpoint to retrieve playback URLs.
profiles:
$ref: '#/components/schemas/stream/properties/profiles'
recordingSpec:
$ref: '#/components/schemas/stream/properties/recordingSpec'
stream:
type: object
required:
- name
additionalProperties: false
properties:
id:
type: string
readOnly: true
example: de7818e7-610a-4057-8f6f-b785dc1e6f88
name:
type: string
example: test_stream
kind:
type: string
example: stream
deprecated: true
creatorId:
$ref: '#/components/schemas/creator-id'
userTags:
type: object
description: User input tags associated with the stream
additionalProperties:
oneOf:
- type: string
- type: number
- type: array
items:
oneOf:
- type: string
- type: number
lastSeen:
type: number
example: 1587667174725
sourceSegments:
type: number
example: 1
transcodedSegments:
type: number
example: 2
sourceSegmentsDuration:
type: number
example: 1
description: Duration of all the source segments, sec
transcodedSegmentsDuration:
type: number
example: 2
description: Duration of all the transcoded segments, sec
sourceBytes:
type: number
example: 1
transcodedBytes:
type: number
example: 2
ingestRate:
type: number
example: 1
description: Rate at which sourceBytes increases (bytes/second)
outgoingRate:
type: number
example: 2
description: Rate at which transcodedBytes increases (bytes/second)
isActive:
type: boolean
description: If currently active
example: true
isHealthy:
$ref: '#/components/schemas/stream-health-payload/properties/is_healthy'
issues:
$ref: '#/components/schemas/stream-health-payload/properties/human_issues'
createdByTokenName:
type: string
readOnly: true
description: Name of the token used to create this object
example: abc-123-xyz-456
createdAt:
type: number
readOnly: true
description: Timestamp (in milliseconds) at which stream object was created
example: 1587667174725
parentId:
type: string
example: de7818e7-610a-4057-8f6f-b785dc1e6f88
description: Points to parent stream object
streamKey:
type: string
example: hgebdhhigq
description: Used to form RTMP ingest URL
pull:
type: object
description: 'Configuration for a stream that should be actively pulled from an
external source, rather than pushed to Livepeer. If specified, the
stream will not have a streamKey.'
additionalProperties: false
required:
- source
properties:
source:
type: string
description: URL from which to pull from.
example: https://myservice.com/live/stream.flv
headers:
type: object
description: Headers to be sent with the request to the pull source.
additionalProperties:
type: string
example:
Authorization: Bearer 123
isMobile:
oneOf:
- type: integer
enum:
- 0
- 1
- 2
description: '0: not mobile, 1: mobile screen share, 2: mobile camera.'
- type: boolean
description: If true, the stream will be pulled from a mobile source.
description: Indicates whether the stream will be pulled from a mobile source.
default: 0
location:
type: object
description: 'Approximate location of the pull source. The location is used to
determine the closest Livepeer region to pull the stream from.'
additionalProperties: false
required:
- lat
- lon
properties:
lat:
type: number
description: 'Latitude of the pull source in degrees. North is positive,
south is negative.'
example: 39.739
lon:
type: number
description: 'Longitude of the pull source in degrees. East is positive,
west is negative.'
example: -104.988
playbackId:
type: string
example: eaw4nk06ts2d0mzb
description: The playback ID to use with the Playback Info endpoint to retrieve playback URLs.
playbackPolicy:
$ref: '#/components/schemas/playback-policy'
profiles:
type: array
description: 'Profiles to transcode the stream into. If not specified, a default
set of profiles will be used with 240p, 360p, 480p and 720p
resolutions. Keep in mind that the source rendition is always kept.
'
default:
- name: 240p0
fps: 0
bitrate: 250000
width: 426
height: 240
- name: 360p0
fps: 0
bitrate: 800000
width: 640
height: 360
- name: 480p0
fps: 0
bitrate: 1600000
width: 854
height: 480
- name: 720p0
fps: 0
bitrate: 3000000
width: 1280
height: 720
items:
$ref: '#/components/schemas/ffmpeg-profile'
projectId:
type: string
description: The ID of the project
example: aac12556-4d65-4d34-9fb6-d1f0985eb0a9
record:
description: 'Should this stream be recorded? Uses default settings. For more
customization, create and configure an object store.
'
type: boolean
example: false
# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/livepeer/refs/heads/main/openapi/livepeer-session-api-openapi.yml