Livepeer asset API

Operations related to asset/vod api

Operations 6

GET /asset Retrieve assets #
POST /asset/request-upload Upload an asset #
POST /asset/upload/url Upload asset via URL #
GET /asset/{assetId} Retrieves an asset #
PATCH /asset/{assetId} Patch an asset #
DELETE /asset/{assetId} Delete an asset #

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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/livepeer-asset-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

livepeer-asset-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Livepeer Asset API
  version: 1.0.0
  description: 'Operations tagged asset 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: asset
  description: Operations related to asset/vod api
paths:
  /asset:
    get:
      operationId: getAssets
      x-speakeasy-name-override: getAll
      tags:
      - asset
      summary: Retrieve assets
      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: getAssets
        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.asset.getAll();\n\n  // Handle the result\n  console.log(result);\n}\n\nrun();"
      - lang: go
        label: getAssets
        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.Asset.GetAll(ctx)\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.Data != nil {\n        // handle response\n    }\n}"
      - lang: python
        label: getAssets
        source: "from livepeer import Livepeer\n\ns = Livepeer(\n    api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.asset.get_all()\n\nif res.data is not None:\n    # handle response\n    pass"
    servers:
    - url: https://livepeer.studio/api
  /asset/request-upload:
    post:
      operationId: requestUpload
      x-speakeasy-name-override: create
      tags:
      - asset
      summary: Upload an asset
      description: "To upload an asset, your first need to request for a direct upload URL\nand only then actually upload the contents of the asset.\n\\\n\\\nOnce you created a upload link, you have 2 options, resumable or direct\nupload. For a more reliable experience, you should use resumable uploads\nwhich will work better for users with unreliable or slow network\nconnections. If you want a simpler implementation though, you should\njust use a direct upload.\n\n\n## Direct Upload\nFor a direct upload, make a PUT request to the URL received in the url\nfield of the response above, with the raw video file as the request\nbody. response above:\n\n\n## Resumable Upload\nLivepeer supports resumable uploads via Tus. This section provides a\nsimple example of how to use tus-js-client to upload a video file.\n\\\n\\\nFrom the previous section, we generated a URL to upload a video file to\nLivepeer on POST /api/asset/request-upload. You should use the\ntusEndpoint field of the response to upload the video file and track the\nprogress:\n\n```\n# This assumes there is an `input` element of `type=\"file\"` with id\n`fileInput` in the HTML\n\n\nconst input = document.getElementById('fileInput');\n\nconst file = input.files[0];\n\nconst upload = new tus.Upload(file, {\n  endpoint: tusEndpoint, // URL from `tusEndpoint` field in the\n`/request-upload` response\n  metadata: {\n    filename,\n    filetype: 'video/mp4',\n  },\n  uploadSize: file.size,\n  onError(err) {\n    console.error('Error uploading file:', err);\n  },\n  onProgress(bytesUploaded, bytesTotal) {\n    const percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2);\n    console.log('Uploaded ' + percentage + '%');\n  },\n  onSuccess() {\n    console.log('Upload finished:', upload.url);\n  },\n});\n\nconst previousUploads = await upload.findPreviousUploads();\n\nif (previousUploads.length > 0) {\n  upload.resumeFromPreviousUpload(previousUploads[0]);\n}\n\nupload.start();\n\n```\n\n> Note: If you are using tus from node.js, you need to add a custom URL\nstorage to enable resuming from previous uploads. On the browser, this\nis enabled by default using local storage. In node.js, add urlStorage:\nnew tus.FileUrlStorage(\"path/to/tmp/file\"), to the UploadFile object\ndefinition above.\n"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/new-asset-payload'
      responses:
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                required:
                - url
                - tusEndpoint
                - asset
                - task
                properties:
                  url:
                    type: string
                    description: The direct upload endpoint for which supports PUT requests. **It is recommended to use the Tus endpoint for a better upload experience.**
                    example: https://origin.livepeer.com/api/asset/upload/direct?token=eyJhbGciOiJIUzI1NiJ9.eyJtc2ciOiJoZWxsbyBoYWNrZXIsIHRoZXJlJ3Mgbm90aGluZyBmb3IgeW91IGhlcmUg8J-YhiJ9.1YDjmXsqLcgNyMSzT4kXl_kIni46_EuGX_xfqmC7e0Q
                  tusEndpoint:
                    type: string
                    description: The [Tus-compatible](https://tus.io/) endpoint for resumable uploads. **This is the recommended way to upload assets.** See the [Tus-js](https://github.com/tus/tus-js-client) client for more information.
                    example: https://origin.livepeer.com/api/asset/upload/tus?token=eyJhbGciOiJIUzI1NiJ9.eyJtc2ciOiJoZWxsbyBoYWNrZXIsIHRoZXJlJ3Mgbm90aGluZyBmb3IgeW91IGhlcmUg8J-YhiJ9.1YDjmXsqLcgNyMSzT4kXl_kIni46_EuGX_xfqmC7e0Q
                  asset:
                    $ref: '#/components/schemas/asset'
                  task:
                    type: object
                    required:
                    - id
                    additionalProperties: false
                    properties:
                      id:
                        type: string
                        example: 34d7618e-fd42-4798-acf5-19504616a11e
                x-speakeasy-name-override: data
      x-codeSamples:
      - lang: typescript
        label: requestUpload
        source: "import { Livepeer } from \"livepeer\";\nimport { TranscodeProfileEncoder, TranscodeProfileProfile, Type } from \"livepeer/models/components\";\n\nconst livepeer = new Livepeer({\n  apiKey: \"<YOUR_BEARER_TOKEN_HERE>\",\n});\n\nasync function run() {\n  const result = await livepeer.asset.create({\n    name: \"filename.mp4\",\n    staticMp4: true,\n    playbackPolicy: {\n      type: Type.Webhook,\n      webhookId: \"1bde4o2i6xycudoy\",\n      webhookContext: {\n        \"streamerId\": \"my-custom-id\",\n      },\n      refreshInterval: 600,\n    },\n    profiles: [\n      {\n        width: 1280,\n        name: \"720p\",\n        height: 720,\n        bitrate: 3000000,\n        quality: 23,\n        fps: 30,\n        fpsDen: 1,\n        gop: \"2\",\n        profile: TranscodeProfileProfile.H264Baseline,\n        encoder: TranscodeProfileEncoder.H264,\n      },\n    ],\n  });\n\n  // Handle the result\n  console.log(result);\n}\n\nrun();"
      - lang: go
        label: requestUpload
        source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"github.com/livepeer/livepeer-go/models/components\"\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.Asset.Create(ctx, components.NewAssetPayload{\n        Name: \"filename.mp4\",\n        StaticMp4: livepeergo.Bool(true),\n        PlaybackPolicy: &components.PlaybackPolicy{\n            Type: components.TypeWebhook,\n            WebhookID: livepeergo.String(\"1bde4o2i6xycudoy\"),\n            WebhookContext: map[string]any{\n                \"streamerId\": \"my-custom-id\",\n            },\n            RefreshInterval: livepeergo.Float64(600),\n        },\n        Profiles: []components.TranscodeProfile{\n            components.TranscodeProfile{\n                Width: livepeergo.Int64(1280),\n                Name: livepeergo.String(\"720p\"),\n                Height: livepeergo.Int64(720),\n                Bitrate: 3000000,\n                Quality: livepeergo.Int64(23),\n                Fps: livepeergo.Int64(30),\n                FpsDen: livepeergo.Int64(1),\n                Gop: livepeergo.String(\"2\"),\n                Profile: components.TranscodeProfileProfileH264Baseline.ToPointer(),\n                Encoder: components.TranscodeProfileEncoderH264.ToPointer(),\n            },\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.Data != nil {\n        // handle response\n    }\n}"
      - lang: python
        label: requestUpload
        source: "from livepeer import Livepeer\nfrom livepeer.models import components\n\ns = Livepeer(\n    api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.asset.create(request={\n    \"name\": \"filename.mp4\",\n    \"static_mp4\": True,\n    \"playback_policy\": {\n        \"type\": components.Type.WEBHOOK,\n        \"webhook_id\": \"1bde4o2i6xycudoy\",\n        \"webhook_context\": {\n            \"streamerId\": \"my-custom-id\",\n        },\n        \"refresh_interval\": 600,\n    },\n    \"profiles\": [\n        {\n            \"width\": 1280,\n            \"name\": \"720p\",\n            \"height\": 720,\n            \"bitrate\": 3000000,\n            \"quality\": 23,\n            \"fps\": 30,\n            \"fps_den\": 1,\n            \"gop\": \"2\",\n            \"profile\": components.TranscodeProfileProfile.H264_BASELINE,\n            \"encoder\": components.TranscodeProfileEncoder.H_264,\n        },\n    ],\n})\n\nif res.data is not None:\n    # handle response\n    pass"
    servers:
    - url: https://livepeer.studio/api
  /asset/upload/url:
    post:
      operationId: uploadAsset
      x-speakeasy-name-override: createViaUrl
      summary: Upload asset via URL
      tags:
      - asset
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/new-asset-from-url-payload'
      responses:
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '200':
          description: Upload in progress
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                required:
                - asset
                - task
                properties:
                  asset:
                    $ref: '#/components/schemas/asset'
                  task:
                    type: object
                    required:
                    - id
                    additionalProperties: false
                    properties:
                      id:
                        type: string
                        example: 34d7618e-fd42-4798-acf5-19504616a11e
                x-speakeasy-name-override: data
        '201':
          description: Upload started
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                required:
                - asset
                - task
                properties:
                  asset:
                    $ref: '#/components/schemas/asset'
                  task:
                    type: object
                    required:
                    - id
                    additionalProperties: false
                    properties:
                      id:
                        type: string
                        example: 34d7618e-fd42-4798-acf5-19504616a11e
                x-speakeasy-name-override: data
      x-codeSamples:
      - lang: typescript
        label: uploadAsset
        source: "import { Livepeer } from \"livepeer\";\nimport { TranscodeProfileEncoder, TranscodeProfileProfile, Type } from \"livepeer/models/components\";\n\nconst livepeer = new Livepeer({\n  apiKey: \"<YOUR_BEARER_TOKEN_HERE>\",\n});\n\nasync function run() {\n  const result = await livepeer.asset.createViaUrl({\n    name: \"filename.mp4\",\n    staticMp4: true,\n    playbackPolicy: {\n      type: Type.Webhook,\n      webhookId: \"1bde4o2i6xycudoy\",\n      webhookContext: {\n        \"streamerId\": \"my-custom-id\",\n      },\n      refreshInterval: 600,\n    },\n    url: \"https://s3.amazonaws.com/my-bucket/path/filename.mp4\",\n    profiles: [\n      {\n        width: 1280,\n        name: \"720p\",\n        height: 720,\n        bitrate: 3000000,\n        quality: 23,\n        fps: 30,\n        fpsDen: 1,\n        gop: \"2\",\n        profile: TranscodeProfileProfile.H264Baseline,\n        encoder: TranscodeProfileEncoder.H264,\n      },\n      {\n        width: 1280,\n        name: \"720p\",\n        height: 720,\n        bitrate: 3000000,\n        quality: 23,\n        fps: 30,\n        fpsDen: 1,\n        gop: \"2\",\n        profile: TranscodeProfileProfile.H264Baseline,\n        encoder: TranscodeProfileEncoder.H264,\n      },\n    ],\n  });\n\n  // Handle the result\n  console.log(result);\n}\n\nrun();"
      - lang: go
        label: uploadAsset
        source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"github.com/livepeer/livepeer-go/models/components\"\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.Asset.CreateViaURL(ctx, components.NewAssetFromURLPayload{\n        Name: \"filename.mp4\",\n        StaticMp4: livepeergo.Bool(true),\n        PlaybackPolicy: &components.PlaybackPolicy{\n            Type: components.TypeWebhook,\n            WebhookID: livepeergo.String(\"1bde4o2i6xycudoy\"),\n            WebhookContext: map[string]any{\n                \"streamerId\": \"my-custom-id\",\n            },\n            RefreshInterval: livepeergo.Float64(600),\n        },\n        URL: \"https://s3.amazonaws.com/my-bucket/path/filename.mp4\",\n        Profiles: []components.TranscodeProfile{\n            components.TranscodeProfile{\n                Width: livepeergo.Int64(1280),\n                Name: livepeergo.String(\"720p\"),\n                Height: livepeergo.Int64(720),\n                Bitrate: 3000000,\n                Quality: livepeergo.Int64(23),\n                Fps: livepeergo.Int64(30),\n                FpsDen: livepeergo.Int64(1),\n                Gop: livepeergo.String(\"2\"),\n                Profile: components.TranscodeProfileProfileH264Baseline.ToPointer(),\n                Encoder: components.TranscodeProfileEncoderH264.ToPointer(),\n            },\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.TwoHundredApplicationJSONData != nil {\n        // handle response\n    }\n}"
      - lang: python
        label: uploadAsset
        source: "from livepeer import Livepeer\nfrom livepeer.models import components\n\ns = Livepeer(\n    api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.asset.create_via_url(request={\n    \"name\": \"filename.mp4\",\n    \"static_mp4\": True,\n    \"playback_policy\": {\n        \"type\": components.Type.WEBHOOK,\n        \"webhook_id\": \"1bde4o2i6xycudoy\",\n        \"webhook_context\": {\n            \"streamerId\": \"my-custom-id\",\n        },\n        \"refresh_interval\": 600,\n    },\n    \"url\": \"https://s3.amazonaws.com/my-bucket/path/filename.mp4\",\n    \"profiles\": [\n        {\n            \"width\": 1280,\n            \"name\": \"720p\",\n            \"height\": 720,\n            \"bitrate\": 3000000,\n            \"quality\": 23,\n            \"fps\": 30,\n            \"fps_den\": 1,\n            \"gop\": \"2\",\n            \"profile\": components.TranscodeProfileProfile.H264_BASELINE,\n            \"encoder\": components.TranscodeProfileEncoder.H_264,\n        },\n    ],\n})\n\nif res.two_hundred_application_json_data is not None:\n    # handle response\n    pass"
    servers:
    - url: https://livepeer.studio/api
  /asset/{assetId}:
    get:
      operationId: getAsset
      x-speakeasy-name-override: get
      tags:
      - asset
      summary: Retrieves an asset
      parameters:
      - in: path
        name: assetId
        schema:
          type: string
        description: ID of the asset
        required: true
      responses:
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/asset'
                x-speakeasy-name-override: data
      x-codeSamples:
      - lang: typescript
        label: getAsset
        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.asset.get(\"<id>\");\n\n  // Handle the result\n  console.log(result);\n}\n\nrun();"
      - lang: go
        label: getAsset
        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.Asset.Get(ctx, \"<value>\")\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.Asset != nil {\n        // handle response\n    }\n}"
      - lang: python
        label: getAsset
        source: "from livepeer import Livepeer\n\ns = Livepeer(\n    api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.asset.get(asset_id=\"<value>\")\n\nif res.asset is not None:\n    # handle response\n    pass"
    patch:
      operationId: updateAsset
      x-speakeasy-name-override: update
      summary: Patch an asset
      tags:
      - asset
      parameters:
      - in: path
        name: assetId
        schema:
          type: string
        description: ID of the asset
        required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/asset-patch-payload'
      responses:
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/asset'
                x-speakeasy-name-override: data
      x-codeSamples:
      - lang: typescript
        label: updateAsset
        source: "import { Livepeer } from \"livepeer\";\nimport { Type } from \"livepeer/models/components\";\n\nconst livepeer = new Livepeer({\n  apiKey: \"<YOUR_BEARER_TOKEN_HERE>\",\n});\n\nasync function run() {\n  const result = await livepeer.asset.update({\n    name: \"filename.mp4\",\n    playbackPolicy: {\n      type: Type.Webhook,\n      webhookId: \"1bde4o2i6xycudoy\",\n      webhookContext: {\n        \"streamerId\": \"my-custom-id\",\n      },\n      refreshInterval: 600,\n    },\n  }, \"<id>\");\n\n  // Handle the result\n  console.log(result);\n}\n\nrun();"
      - lang: go
        label: updateAsset
        source: "package main\n\nimport(\n\tlivepeergo \"github.com/livepeer/livepeer-go\"\n\t\"context\"\n\t\"github.com/livepeer/livepeer-go/models/components\"\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.Asset.Update(ctx, \"<value>\", components.AssetPatchPayload{\n        Name: livepeergo.String(\"filename.mp4\"),\n        PlaybackPolicy: &components.PlaybackPolicy{\n            Type: components.TypeWebhook,\n            WebhookID: livepeergo.String(\"1bde4o2i6xycudoy\"),\n            WebhookContext: map[string]any{\n                \"streamerId\": \"my-custom-id\",\n            },\n            RefreshInterval: livepeergo.Float64(600),\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.Asset != nil {\n        // handle response\n    }\n}"
      - lang: python
        label: updateAsset
        source: "from livepeer import Livepeer\nfrom livepeer.models import components\n\ns = Livepeer(\n    api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.asset.update(asset_id=\"<value>\", asset_patch_payload={\n    \"name\": \"filename.mp4\",\n    \"playback_policy\": {\n        \"type\": components.Type.WEBHOOK,\n        \"webhook_id\": \"1bde4o2i6xycudoy\",\n        \"webhook_context\": {\n            \"streamerId\": \"my-custom-id\",\n        },\n        \"refresh_interval\": 600,\n    },\n})\n\nif res.asset is not None:\n    # handle response\n    pass"
    delete:
      operationId: deleteAsset
      x-speakeasy-name-override: delete
      summary: Delete an asset
      tags:
      - asset
      parameters:
      - in: path
        name: assetId
        schema:
          type: string
        description: ID of the asset
        required: true
      responses:
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '204':
          description: Success (No content)
      x-codeSamples:
      - lang: typescript
        label: deleteAsset
        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.asset.delete(\"<id>\");\n\n  // Handle the result\n  console.log(result);\n}\n\nrun();"
      - lang: go
        label: deleteAsset
        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.Asset.Delete(ctx, \"<value>\")\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res != nil {\n        // handle response\n    }\n}"
      - lang: python
        label: deleteAsset
        source: "from livepeer import Livepeer\n\ns = Livepeer(\n    api_key=\"<YOUR_BEARER_TOKEN_HERE>\",\n)\n\nres = s.asset.delete(asset_id=\"<value>\")\n\nif res is not None:\n    # handle response\n    pass"
    servers:
    - url: https://livepeer.studio/api
components:
  schemas:
    input-creator-id:
      oneOf:
      - type: object
        additionalProperties: false
        required:
        - type
        - value
        properties:
          type:
            type: string
            enum:
            - unverified
          value:
            type: string
      - type: string
        description: Helper syntax to specify an unverified creator ID, fully managed by the developer.
    asset-patch-payload:
      type: object
      additionalProperties: false
      properties:
        name:
          $ref: '#/components/schemas/asset/properties/name'
        creatorId:
          $ref: '#/components/schemas/input-creator-id'
        playbackPolicy:
          $ref: '#/components/schemas/playback-policy'
        storage:
          $ref: '#/components/schemas/new-asset-payload/properties/storage'
    new-asset-payload:
      additionalProperties: false
      required:
      - name
      properties:
        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
        staticMp4:
          type: boolean
          description: Whether to generate MP4s for the asset.
          example: true
        playbackPolicy:
          $ref: '#/components/schemas/playback-policy'
        creatorId:
          $ref: '#/components/schemas/input-creator-id'
        storage:
          type: object
          additionalProperties: false
          properties:
            ipfs:
              description: 'Set to true to make default export to IPFS. To customize the

                pinned files, specify an object with a spec field. False or null

                means to unpin from IPFS, but it''s unsupported right now.

                '
              oneOf:
              - type: object
                additionalProperties: false
                properties:
                  spec:
                    oneOf:
                    - type: 'null'
                    - $ref: '#/components/schemas/asset/properties/storage/properties/ipfs/properties/spec'
              - type: boolean
              - type: 'null'
        encryption:
          type: object
          additionalProperties: false
          required:
          - encryptedKey
          properties:
            encryptedKey:
              type: string
              writeOnly: true
              description: Encryption key used to encrypt the asset. Only writable in the upload asset endpoints and cannot be retrieved back.
        c2pa:
          type: boolean
          description: Decides if the output video should include C2PA signature
        profiles:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/transcode-profile'
        targetSegmentSizeSecs:
          type: number
          description: How many seconds the duration of each output segment should be
    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: Phas

# --- truncated at 32 KB (43 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/livepeer/refs/heads/main/openapi/livepeer-asset-api-openapi.yml