Livepeer website screenshot

Livepeer

Livepeer is a decentralized video infrastructure network. Independent orchestrators run GPU hardware to provide live and on-demand video transcoding services, paid for in ETH/LPT on the Livepeer protocol. Livepeer Studio is the managed gateway and developer platform sitting on top of the network, exposing a REST API at livepeer.studio/api for live streams, on- demand assets, multistream targets, transcoding jobs, sessions, playback, signing keys, AI generation (text-to-image, image-to-image, image-to-video, upscale, audio-to-text), and webhooks. Official SDKs are published for JavaScript/TypeScript, Python, Go, and Ruby, with React Player and React Broadcast components for client-side playback and ingest.

16 APIs 0 Features
VideoStreamingTranscodingDecentralizedWeb3Live VideoAI Video

APIs

Livepeer Studio REST API

Primary REST API for the Livepeer Studio gateway. Resource-oriented JSON endpoints for live streams, on-demand assets, multistream targets, transcoding jobs, sessions, playback,...

Livepeer Streams API

Endpoints for creating and managing live streams, ingest RTMP/WHIP URLs, profiles for adaptive bitrate transcoding, recording, and stream keys.

Livepeer Assets API

Endpoints for uploading, importing, transcoding, and serving on-demand video assets, including direct upload, URL import, and IPFS storage.

Livepeer Multistream Targets API

Endpoints for registering and managing multistream destinations that forward an active live stream to additional RTMP/RTMPS endpoints such as YouTube, Twitch, or X.

Livepeer Webhooks API

Webhook management endpoints plus outbound event notifications for stream lifecycle events (stream.started, stream.idle, recording.ready, asset.ready, playback.access_control). ...

Livepeer Transcode API

Endpoints for one-off transcoding jobs against source files in object storage, returning a job handle and transcoded renditions.

Livepeer Sessions API

Endpoints for retrieving completed live session recordings and metadata for past live streams.

Livepeer Playback API

Playback info endpoint returning HLS/WebRTC playback URLs and metadata for a stream or asset, plus access-control gating.

Livepeer Signing Keys API

Endpoints for managing JWT signing keys used for playback access control and webhook signature verification.

Livepeer AI Generate API

AI video and image generation endpoints (text-to-image, image-to-image, image-to-video, upscale, audio-to-text) routed through the Livepeer AI subnet of GPU orchestrators.

Livepeer JavaScript/TypeScript SDK

Official TypeScript/JavaScript SDK (@livepeer/ai or livepeer) for the Livepeer Studio REST API and AI endpoints.

Livepeer Python SDK

Official Python SDK for the Livepeer Studio REST API.

Livepeer Go SDK

Official Go SDK for the Livepeer Studio REST API.

Livepeer Ruby SDK

Official Ruby SDK for the Livepeer Studio REST API.

Livepeer React Player Component

React video player component for HLS/WebRTC playback of Livepeer streams and assets, with customisable controls and access-control integration.

Livepeer React Broadcast Component

React component for in-browser WebRTC broadcasting to a Livepeer live stream, with device selection and settings controls.

Collections

Pricing Plans

Livepeer Plans Pricing

1 plans

PLANS

Rate Limits

Livepeer Rate Limits

2 limits

RATE LIMITS

FinOps

Resources

🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Studio
Studio
🔗
Documentation
Documentation
👥
GitHub
GitHub
🟢
Status
Status
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps
🔗
LlmsText
LlmsText

Sources

apis.yml Raw ↑
opencollection: 1.0.0
info:
  name: Livepeer API Reference
  version: 1.0.0
request:
  auth:
    type: bearer
    token: '{{bearerToken}}'
items:
- info:
    name: stream
    type: folder
  items:
  - info:
      name: Retrieve streams
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/stream
      params:
      - name: streamsonly
        value: ''
        type: query
    docs: Retrieve streams
  - info:
      name: Create a stream
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/stream
      body:
        type: json
        data: '{}'
    docs: 'The only parameter you are required to set is the name of your stream,

      but we also highly recommend that you define transcoding profiles

      parameter that suits your specific broadcasting configuration.

      \

      \

      If you do not define transcoding rendition profiles when creating the

      stream, a default set of profiles will be used. These profiles include

      240p,  360p, 480p and 720p.

      \

      \

      The playback policy is set to public by default for new streams. It can

      also be added upon the creation of a new stream by '
  - info:
      name: Retrieve a stream
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/stream/:id
      params:
      - name: id
        value: ''
        type: path
        description: ID of the stream
    docs: Retrieve a stream
  - info:
      name: Update a stream
      type: http
    http:
      method: PATCH
      url: https://livepeer.studio/api/stream/:id
      params:
      - name: id
        value: ''
        type: path
        description: ID of the stream
      body:
        type: json
        data: '{}'
    docs: Update a stream
  - info:
      name: Delete a stream
      type: http
    http:
      method: DELETE
      url: https://livepeer.studio/api/stream/:id
      params:
      - name: id
        value: ''
        type: path
        description: ID of the stream
    docs: 'This will also suspend any active stream sessions, so make sure to wait

      until the stream has finished. To explicitly interrupt an active

      session, consider instead updating the suspended field in the stream

      using the PATCH stream API.

      '
  - info:
      name: Terminates a live stream
      type: http
    http:
      method: DELETE
      url: https://livepeer.studio/api/stream/:id/terminate
      params:
      - name: id
        value: ''
        type: path
        description: ID of the stream
    docs: '`DELETE /stream/{id}/terminate` can be used to terminate an ongoing

      session on a live stream. Unlike suspending the stream, it allows the

      streamer to restart streaming even immediately, but it will force

      terminate the current session and stop the recording.

      \

      \

      A 204 No Content status response indicates the stream was successfully

      terminated.

      '
  - info:
      name: Start ingest for a pull stream
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/stream/:id/start-pull
      params:
      - name: id
        value: ''
        type: path
        description: ID of the stream
    docs: '`POST /stream/{id}/start-pull` can be used to start ingest for a stream

      configured with a pull source. If the stream has recording configured,

      it will also start recording.

      \

      \

      A 204 No Content status response indicates the stream was successfully

      started.

      '
  - info:
      name: Create a clip
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/clip
      body:
        type: json
        data: '{}'
    docs: Create a clip
  - info:
      name: Retrieve clips of a livestream
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/stream/:id/clips
      params:
      - name: id
        value: ''
        type: path
        description: ID of the parent stream or playbackId of parent stream
    docs: Retrieve clips of a livestream
  - info:
      name: Add a multistream target
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/stream/:id/create-multistream-target
      params:
      - name: id
        value: ''
        type: path
        description: ID of the parent stream
      body:
        type: json
        data: '{}'
    docs: Add a multistream target
  - info:
      name: Remove a multistream target
      type: http
    http:
      method: DELETE
      url: https://livepeer.studio/api/stream/:id/multistream/:targetId
      params:
      - name: id
        value: ''
        type: path
        description: ID of the parent stream
      - name: targetId
        value: ''
        type: path
        description: ID of the multistream target
    docs: Remove a multistream target
- info:
    name: multistream
    type: folder
  items:
  - info:
      name: Retrieve Multistream Targets
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/multistream/target
    docs: Retrieve Multistream Targets
  - info:
      name: Create a multistream target
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/multistream/target
      body:
        type: json
        data: '{}'
    docs: Create a multistream target
  - info:
      name: Retrieve a multistream target
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/multistream/target/:id
      params:
      - name: id
        value: ''
        type: path
        description: ID of the multistream target
    docs: Retrieve a multistream target
  - info:
      name: Update Multistream Target
      type: http
    http:
      method: PATCH
      url: https://livepeer.studio/api/multistream/target/:id
      params:
      - name: id
        value: ''
        type: path
        description: ID of the multistream target
      body:
        type: json
        data: '{}'
    docs: Update Multistream Target
  - info:
      name: Delete a multistream target
      type: http
    http:
      method: DELETE
      url: https://livepeer.studio/api/multistream/target/:id
      params:
      - name: id
        value: ''
        type: path
        description: ID of the multistream target
    docs: 'Make sure to remove any references to the target on existing

      streams before actually deleting it from the API.

      '
- info:
    name: webhook
    type: folder
  items:
  - info:
      name: Retrieve a Webhook
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/webhook
    docs: Retrieve a Webhook
  - info:
      name: Create a webhook
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/webhook
      body:
        type: json
        data: '{}'
    docs: 'To create a new webhook, you need to make an API call with the events you want to listen for and the URL that will
      be called when those events occur.

      '
  - info:
      name: Retrieve a webhook
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/webhook/:id
      params:
      - name: id
        value: ''
        type: path
    docs: Retrieve a webhook
  - info:
      name: Update a webhook
      type: http
    http:
      method: PUT
      url: https://livepeer.studio/api/webhook/:id
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Update a webhook
  - info:
      name: Delete a webhook
      type: http
    http:
      method: DELETE
      url: https://livepeer.studio/api/webhook/:id
      params:
      - name: id
        value: ''
        type: path
    docs: Delete a webhook
  - info:
      name: Retrieve webhook logs
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/webhook/:id/log
      params:
      - name: id
        value: ''
        type: path
    docs: Retrieve webhook logs
  - info:
      name: Retrieve a webhook log
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/webhook/:id/log/:logId
      params:
      - name: id
        value: ''
        type: path
      - name: logId
        value: ''
        type: path
    docs: Retrieve a webhook log
  - info:
      name: Resend a webhook
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/webhook/:id/log/:logId/resend
      params:
      - name: id
        value: ''
        type: path
      - name: logId
        value: ''
        type: path
    docs: 'Use this API to resend the same webhook request. This is useful when

      developing and debugging, allowing you to easily repeat the same webhook

      to check or fix the behaviour in your handler.

      '
- info:
    name: asset
    type: folder
  items:
  - info:
      name: Retrieve assets
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/asset
    docs: Retrieve assets
  - info:
      name: Upload an asset
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/asset/request-upload
      body:
        type: json
        data: '{}'
    docs: 'To upload an asset, your first need to request for a direct upload URL

      and only then actually upload the contents of the asset.

      \

      \

      Once you created a upload link, you have 2 options, resumable or direct

      upload. For a more reliable experience, you should use resumable uploads

      which will work better for users with unreliable or slow network

      connections. If you want a simpler implementation though, you should

      just use a direct upload.



      ## Direct Upload

      For a direct upload, make a PUT request to t'
  - info:
      name: Upload asset via URL
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/asset/upload/url
      body:
        type: json
        data: '{}'
    docs: Upload asset via URL
  - info:
      name: Retrieves an asset
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/asset/:assetId
      params:
      - name: assetId
        value: ''
        type: path
        description: ID of the asset
    docs: Retrieves an asset
  - info:
      name: Patch an asset
      type: http
    http:
      method: PATCH
      url: https://livepeer.studio/api/asset/:assetId
      params:
      - name: assetId
        value: ''
        type: path
        description: ID of the asset
      body:
        type: json
        data: '{}'
    docs: Patch an asset
  - info:
      name: Delete an asset
      type: http
    http:
      method: DELETE
      url: https://livepeer.studio/api/asset/:assetId
      params:
      - name: assetId
        value: ''
        type: path
        description: ID of the asset
    docs: Delete an asset
- info:
    name: session
    type: folder
  items:
  - info:
      name: Retrieve clips of a session
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/session/:id/clips
      params:
      - name: id
        value: ''
        type: path
        description: ID of the parent session
    docs: Retrieve clips of a session
  - info:
      name: Retrieve sessions
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/session
    docs: Retrieve sessions
  - info:
      name: Retrieve a session
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/session/:id
      params:
      - name: id
        value: ''
        type: path
        description: ID of the session
    docs: Retrieve a session
  - info:
      name: Retrieve Recorded Sessions
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/stream/:parentId/sessions
      params:
      - name: parentId
        value: ''
        type: path
        description: ID of the parent stream
      - name: record
        value: ''
        type: query
        description: 'Flag indicating if the response should only include recorded

          sessions

          '
    docs: Retrieve Recorded Sessions
- info:
    name: room
    type: folder
  items:
  - info:
      name: Create a room
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/room
    docs: 'Create a multiparticipant livestreaming room.

      '
  - info:
      name: Retrieve a room
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/room/:id
      params:
      - name: id
        value: ''
        type: path
    docs: Retrieve a room
  - info:
      name: Delete a room
      type: http
    http:
      method: DELETE
      url: https://livepeer.studio/api/room/:id
      params:
      - name: id
        value: ''
        type: path
    docs: Delete a room
  - info:
      name: Start room RTMP egress
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/room/:id/egress
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: 'Create a livestream for your room.

      This allows you to leverage livestreaming features like recording and HLS output.

      '
  - info:
      name: Stop room RTMP egress
      type: http
    http:
      method: DELETE
      url: https://livepeer.studio/api/room/:id/egress
      params:
      - name: id
        value: ''
        type: path
    docs: Stop room RTMP egress
  - info:
      name: Create a room user
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/room/:id/user
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: 'Call this endpoint to add a user to a room, specifying a display name at a minimum.

      The response will contain a joining URL for Livepeer''s default meeting app.

      Alternatively the joining token can be used with a custom app.

      '
  - info:
      name: Get user details
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/room/:id/user/:userId
      params:
      - name: id
        value: ''
        type: path
      - name: userId
        value: ''
        type: path
    docs: Get user details
  - info:
      name: Update a room user
      type: http
    http:
      method: PUT
      url: https://livepeer.studio/api/room/:id/user/:userId
      params:
      - name: id
        value: ''
        type: path
      - name: userId
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Update properties for a user.
  - info:
      name: Remove a user from the room
      type: http
    http:
      method: DELETE
      url: https://livepeer.studio/api/room/:id/user/:userId
      params:
      - name: id
        value: ''
        type: path
      - name: userId
        value: ''
        type: path
    docs: Remove a user from the room
- info:
    name: metrics
    type: folder
  items:
  - info:
      name: Query realtime viewership
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/data/views/now
      params:
      - name: playbackId
        value: ''
        type: query
        description: 'The playback ID to filter the query results. This can be a canonical

          playback ID from Livepeer assets or streams, or dStorage identifiers

          for assets

          '
      - name: creatorId
        value: ''
        type: query
        description: The creator ID to filter the query results
      - name: breakdownBy[]
        value: ''
        type: query
        description: 'The list of fields to break down the query results. Specify this

          query-string multiple times to break down by multiple fields.

          '
    docs: 'Requires a private (non-CORS) API key to be used.

      '
  - info:
      name: Query viewership metrics
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/data/views/query
      params:
      - name: playbackId
        value: ''
        type: query
        description: 'The playback ID to filter the query results. This can be a canonical

          playback ID from Livepeer assets or streams, or dStorage identifiers

          for assets

          '
      - name: from
        value: ''
        type: query
        description: Start timestamp for the query range (inclusive)
      - name: to
        value: ''
        type: query
        description: End timestamp for the query range (exclusive)
      - name: timeStep
        value: ''
        type: query
        description: The time step to aggregate viewership metrics by
      - name: assetId
        value: ''
        type: query
        description: The asset ID to filter metrics for
      - name: streamId
        value: ''
        type: query
        description: The stream ID to filter metrics for
      - name: creatorId
        value: ''
        type: query
        description: The creator ID to filter the query results
      - name: breakdownBy[]
        value: ''
        type: query
        description: 'The list of fields to break down the query results. Specify this

          query-string multiple times to break down by multiple fields.

          '
    docs: 'Requires a private (non-CORS) API key to be used.

      '
  - info:
      name: Query creator viewership metrics
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/data/views/query/creator
      params:
      - name: from
        value: ''
        type: query
        description: Start timestamp for the query range (inclusive)
      - name: to
        value: ''
        type: query
        description: End timestamp for the query range (exclusive)
      - name: timeStep
        value: ''
        type: query
        description: The time step to aggregate viewership metrics by
      - name: assetId
        value: ''
        type: query
        description: The asset ID to filter metrics for
      - name: streamId
        value: ''
        type: query
        description: The stream ID to filter metrics for
      - name: creatorId
        value: ''
        type: query
        description: The creator ID to filter the query results
      - name: breakdownBy[]
        value: ''
        type: query
        description: 'The list of fields to break down the query results. Specify this

          query-string multiple times to break down by multiple fields.

          '
    docs: 'Requires a proof of ownership to be sent in the request, which for now is just the assetId or streamId parameters
      (1 of those must be in the query-string).

      '
  - info:
      name: Query public total views metrics
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/data/views/query/total/:playbackId
      params:
      - name: playbackId
        value: ''
        type: path
        description: 'The playback ID to filter the query results. This can be a canonical

          playback ID from Livepeer assets or streams, or dStorage identifiers

          for assets

          '
    docs: 'Allows querying for the public metrics for viewership about a video.

      This can be called from the frontend with a CORS key, or even

      unauthenticated.

      '
  - info:
      name: Query usage metrics
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/data/usage/query
      params:
      - name: from
        value: ''
        type: query
        description: 'Start millis timestamp for the query range (inclusive)

          '
      - name: to
        value: ''
        type: query
        description: 'End millis timestamp for the query range (exclusive)

          '
      - name: timeStep
        value: ''
        type: query
        description: 'The time step to aggregate viewership metrics by

          '
      - name: creatorId
        value: ''
        type: query
        description: 'The creator ID to filter the query results

          '
      - name: breakdownBy[]
        value: ''
        type: query
        description: 'The list of fields to break down the query results. Currently the

          only supported breakdown is by `creatorId`.

          '
    docs: Query usage metrics
- info:
    name: accessControl
    type: folder
  items:
  - info:
      name: Retrieves signing keys
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/access-control/signing-key
    docs: Retrieves signing keys
  - info:
      name: Create a signing key
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/access-control/signing-key
    docs: 'The publicKey is a representation of the public key, encoded as base 64 and is passed as a string, and  the privateKey
      is displayed only on creation. This is the only moment where the client can save the private key, otherwise it will
      be lost. Remember to decode your string when signing JWTs.

      Up to 10 signing keys can be generated, after that you must delete at least one signing key to create a new one.

      '
  - info:
      name: Retrieves a signing key
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/access-control/signing-key/:keyId
      params:
      - name: keyId
        value: ''
        type: path
        description: ID of the signing key
    docs: Retrieves a signing key
  - info:
      name: Update a signing key
      type: http
    http:
      method: PATCH
      url: https://livepeer.studio/api/access-control/signing-key/:keyId
      params:
      - name: keyId
        value: ''
        type: path
        description: ID of the signing key
      body:
        type: json
        data: '{}'
    docs: Update a signing key
  - info:
      name: Delete Signing Key
      type: http
    http:
      method: DELETE
      url: https://livepeer.studio/api/access-control/signing-key/:keyId
      params:
      - name: keyId
        value: ''
        type: path
        description: ID of the signing key
    docs: Delete Signing Key
- info:
    name: task
    type: folder
  items:
  - info:
      name: Retrieve Tasks
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/task
    docs: Retrieve Tasks
  - info:
      name: Retrieve a Task
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/task/:taskId
      params:
      - name: taskId
        value: ''
        type: path
        description: ID of the task
    docs: Retrieve a Task
- info:
    name: transcode
    type: folder
  items:
  - info:
      name: Transcode a video
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/transcode
      body:
        type: json
        data: '{}'
    docs: '`POST /transcode` transcodes a video file and uploads the results to the

      specified storage service.

      \

      \

      Transcoding is asynchronous so you will need to check the status of the

      task in order to determine when transcoding is complete. The `id` field

      in the response is the unique ID for the transcoding `Task`. The task

      status can be queried using the [GET tasks

      endpoint](https://docs.livepeer.org/reference/api/get-tasks):

      \

      \

      When `status.phase` is `completed`,  transcoding will be complete and

      the'
- info:
    name: playback
    type: folder
  items:
  - info:
      name: Retrieve Playback Info
      type: http
    http:
      method: GET
      url: https://livepeer.studio/api/playback/:id
      params:
      - name: id
        value: ''
        type: path
        description: The playback ID from the asset or livestream, e.g. `eaw4nk06ts2d0mzb`.
    docs: Retrieve Playback Info
- info:
    name: generate
    type: folder
  items:
  - info:
      name: Text To Image
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/api/generate/text-to-image
      body:
        type: json
        data: '{}'
    docs: Generate images from text prompts.
  - info:
      name: Image To Image
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/api/generate/image-to-image
      body:
        type: multipart-form
        data: []
    docs: Apply image transformations to a provided image.
  - info:
      name: Image To Video
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/api/generate/image-to-video
      body:
        type: multipart-form
        data: []
    docs: Generate a video from a provided image.
  - info:
      name: Upscale
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/api/generate/upscale
      body:
        type: multipart-form
        data: []
    docs: Upscale an image by increasing its resolution.
  - info:
      name: Audio To Text
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/api/generate/audio-to-text
      body:
        type: multipart-form
        data: []
    docs: Transcribe audio files to text.
  - info:
      name: Segment Anything 2
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/api/generate/segment-anything-2
      body:
        type: multipart-form
        data: []
    docs: Segment objects in an image.
  - info:
      name: LLM
      type: http
    http:
      method: POST
      url: https://livepeer.studio/api/api/generate/llm
      body:
        type: form-urlencoded
        data: []
    docs: Generate text using a language model.
bundled: true