# List Asset outputs

> List outputs requested directly or by a Workflow. Results are ordered by creation date, newest first, with descending output ID as a tie-breaker. Pagination and total apply after type and status filters. Core playback, poster and default timeline previews remain on the Asset.

```json
{
  "path": "/assets/{assetId}/outputs",
  "method": "get",
  "schema": {
    "description": "List outputs requested directly or by a Workflow. Results are ordered by creation date, newest first, with descending output ID as a tie-breaker. Pagination and total apply after type and status filters. Core playback, poster and default timeline previews remain on the Asset.",
    "operationId": "listAssetOutputs",
    "parameters": [
      {
        "description": "ID of the Asset.",
        "in": "path",
        "name": "assetId",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      {
        "description": "Limit specifies the maximum number of results to return.\nAccepts 1 to 100. Defaults to 100.",
        "in": "query",
        "name": "limit",
        "required": false,
        "schema": {
          "default": 100,
          "maximum": 100,
          "minimum": 1,
          "type": "integer"
        }
      },
      {
        "description": "Offset specifies the number of matching results to skip.\nMust be at least 0. Defaults to 0.",
        "in": "query",
        "name": "offset",
        "required": false,
        "schema": {
          "default": 0,
          "minimum": 0,
          "type": "integer"
        }
      },
      {
        "description": "Type specifies the output kind to include. Omit it to include all kinds.",
        "in": "query",
        "name": "type",
        "required": false,
        "schema": {
          "enum": [
            "caption",
            "transcript",
            "static_rendition",
            "thumbnail"
          ],
          "type": "string"
        }
      },
      {
        "description": "Status specifies the current output state to include. Omit it to include all states.",
        "in": "query",
        "name": "status",
        "required": false,
        "schema": {
          "enum": [
            "preparing",
            "ready",
            "failed",
            "expired"
          ],
          "type": "string"
        }
      }
    ],
    "responses": {
      "200": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AssetOutputListResponse",
              "examples": [
                {
                  "data": [
                    {
                      "asset_id": "ast_example",
                      "details": {
                        "id": "aop_example",
                        "language_code": "fr",
                        "status": "ready",
                        "vtt_path": "videos/ast_example/captions/fr/subtitles.vtt"
                      },
                      "id": "aop_example",
                      "status": "ready",
                      "type": "caption"
                    }
                  ],
                  "limit": 100,
                  "offset": 0,
                  "status": "success",
                  "total": 1
                }
              ]
            }
          }
        },
        "description": "List Asset outputs"
      },
      "400": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ResponseErrorValidation"
            }
          }
        },
        "description": "Validation error"
      },
      "401": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ResponseErrorAuthentication"
            }
          }
        },
        "description": "Authentication error"
      },
      "403": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ResponseErrorForbidden"
            }
          }
        },
        "description": "Forbidden error"
      },
      "404": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ResponseErrorNotFound"
            }
          }
        },
        "description": "NotFound error"
      },
      "429": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
            }
          }
        },
        "description": "TooManyRequests error"
      },
      "500": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ResponseErrorUnexpected"
            }
          }
        },
        "description": "Unexpected error"
      }
    },
    "security": [
      {
        "ProjectAccessToken": []
      }
    ],
    "summary": "List Asset outputs",
    "tags": [
      "Assets"
    ],
    "x-codeSamples": [
      {
        "lang": "typescript",
        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst result = await client.assets.outputs.list('ast_example', {\n  type: 'caption',\n});\n\nconsole.log(result);"
      },
      {
        "lang": "python",
        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\n\nresult = client.assets.outputs.list(\n    \"ast_example\",\n    type=\"caption\",\n)\n\nprint(result)"
      },
      {
        "lang": "php",
        "source": "\u003c?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$result = $client-\u003eassets-\u003eoutputs-\u003elist(\n    'ast_example',\n    type: 'caption',\n);\n\nvar_dump($result);"
      },
      {
        "lang": "golang",
        "source": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/chunkifydev/chunkify-go\"\n\t\"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n\tclient := chunkify.NewClient(\n\t\toption.WithProjectAccessToken(\"My Project Access Token\"),\n\t)\n\n\tresult, err := client.Assets.Outputs.List(\n\t\tcontext.TODO(),\n\t\t\"ast_example\",\n\t\tchunkify.AssetOutputListParams{\n\t\t\tType: chunkify.AssetOutputListParamsTypeCaption,\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tfmt.Printf(\"%+v\\n\", result)\n}\n"
      }
    ]
  }
}
```



```json #/components/schemas/ResponseErrorValidation
{
  "properties": {
    "error": {
      "properties": {
        "code": {
          "const": 400,
          "description": "Code is the HTTP status code",
          "examples": [
            400
          ],
          "type": "integer"
        },
        "message": {
          "description": "Message is a human-readable error description",
          "examples": [
            "Invalid request parameters"
          ],
          "type": "string"
        },
        "type": {
          "const": "ValidationError",
          "description": "Type indicates the error category",
          "enum": [
            "ValidationError"
          ],
          "type": "string"
        }
      },
      "required": [
        "type",
        "code",
        "message"
      ],
      "type": "object"
    },
    "status": {
      "const": "error",
      "description": "Status indicates the response status \"error\"",
      "type": "string"
    }
  },
  "required": [
    "status",
    "error"
  ]
}
```



```json #/components/schemas/ResponseErrorAuthentication
{
  "description": "Error response",
  "properties": {
    "error": {
      "description": "Error response details",
      "properties": {
        "code": {
          "const": 401,
          "description": "Code is the HTTP status code",
          "examples": [
            401
          ],
          "type": "integer"
        },
        "message": {
          "description": "Message is a human-readable error description",
          "examples": [
            "Authentication error: invalid token or subscription inactive"
          ],
          "type": "string"
        },
        "type": {
          "const": "AuthenticationError",
          "description": "Type indicates the error category",
          "enum": [
            "AuthenticationError"
          ],
          "type": "string"
        }
      },
      "required": [
        "type",
        "code",
        "message"
      ],
      "type": "object"
    },
    "status": {
      "const": "error",
      "description": "Status indicates the response status \"error\"",
      "type": "string"
    }
  },
  "required": [
    "status",
    "error"
  ],
  "type": "object"
}
```



```json #/components/schemas/ResponseErrorForbidden
{
  "properties": {
    "error": {
      "description": "Error response details",
      "properties": {
        "code": {
          "const": 403,
          "description": "Code is the HTTP status code",
          "examples": [
            403
          ],
          "type": "integer"
        },
        "message": {
          "description": "Message is a human-readable error description",
          "examples": [
            "Unauthorized to perform this action"
          ],
          "type": "string"
        },
        "type": {
          "const": "ForbiddenError",
          "description": "Type indicates the error category",
          "enum": [
            "ForbiddenError"
          ],
          "type": "string"
        }
      },
      "required": [
        "type",
        "code",
        "message"
      ],
      "type": "object"
    },
    "status": {
      "const": "error",
      "description": "Status indicates the response status \"error\"",
      "type": "string"
    }
  },
  "required": [
    "status",
    "error"
  ]
}
```



```json #/components/schemas/ResponseErrorNotFound
{
  "description": "Error response",
  "properties": {
    "error": {
      "description": "Error response details",
      "properties": {
        "code": {
          "const": 404,
          "description": "Code is the HTTP status code",
          "examples": [
            404
          ],
          "type": "integer"
        },
        "message": {
          "description": "Message is a human-readable error description",
          "examples": [
            "Ressource not found"
          ],
          "type": "string"
        },
        "type": {
          "const": "NotFoundError",
          "description": "Type indicates the error category",
          "enum": [
            "NotFoundError"
          ],
          "type": "string"
        }
      },
      "required": [
        "type",
        "code",
        "message"
      ],
      "type": "object"
    },
    "status": {
      "const": "error",
      "description": "Status indicates the response status \"error\"",
      "type": "string"
    }
  },
  "required": [
    "status",
    "error"
  ],
  "type": "object"
}
```



```json #/components/schemas/ResponseErrorTooManyRequests
{
  "description": "Error response",
  "properties": {
    "error": {
      "description": "Error response details",
      "properties": {
        "code": {
          "const": 429,
          "description": "Code is the HTTP status code",
          "examples": [
            429
          ],
          "type": "integer"
        },
        "message": {
          "description": "Message is a human-readable error description",
          "examples": [
            "Rate limit exceeded"
          ],
          "type": "string"
        },
        "type": {
          "const": "TooManyRequestsError",
          "description": "Type indicates the error category",
          "enum": [
            "TooManyRequestsError"
          ],
          "type": "string"
        }
      },
      "required": [
        "type",
        "code",
        "message"
      ],
      "type": "object"
    },
    "status": {
      "const": "error",
      "description": "Status indicates the response status \"error\"",
      "type": "string"
    }
  },
  "required": [
    "status",
    "error"
  ],
  "type": "object"
}
```



```json #/components/schemas/ResponseErrorUnexpected
{
  "description": "Unexpected preview processing or storage failure.",
  "properties": {
    "error": {
      "properties": {
        "code": {
          "const": 500,
          "type": "integer"
        },
        "message": {
          "examples": [
            "Internal server error"
          ],
          "type": "string"
        },
        "type": {
          "const": "UnexpectedError",
          "type": "string"
        }
      },
      "required": [
        "type",
        "code",
        "message"
      ],
      "type": "object"
    },
    "status": {
      "const": "error",
      "type": "string"
    }
  },
  "required": [
    "status",
    "error"
  ],
  "type": "object"
}
```



```json #/components/schemas/AssetOutputListResponse
{
  "description": "A page of Asset outputs.",
  "properties": {
    "data": {
      "description": "Data contains the outputs on this page.",
      "items": {
        "$ref": "#/components/schemas/AssetOutput"
      },
      "type": "array"
    },
    "limit": {
      "description": "Limit is the maximum number of outputs on this page.",
      "type": "integer"
    },
    "offset": {
      "description": "Offset is the number of matching outputs skipped.",
      "type": "integer"
    },
    "status": {
      "const": "success",
      "description": "Status is success for a successful request.",
      "type": "string"
    },
    "total": {
      "description": "Total counts all outputs matching the filters.",
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "status",
    "data",
    "total",
    "limit",
    "offset"
  ],
  "type": "object"
}
```



```json #/components/schemas/AssetOutput
{
  "description": "A resource produced for an Asset, requested directly or by a Workflow. Its type selects the details schema. Output state is independent of Asset playback readiness.",
  "discriminator": {
    "mapping": {
      "caption": "#/components/schemas/AssetCaptionOutput",
      "static_rendition": "#/components/schemas/AssetStaticRenditionOutput",
      "thumbnail": "#/components/schemas/AssetThumbnailOutput",
      "transcript": "#/components/schemas/AssetTranscriptOutput"
    },
    "propertyName": "type"
  },
  "oneOf": [
    {
      "$ref": "#/components/schemas/AssetCaptionOutput"
    },
    {
      "$ref": "#/components/schemas/AssetStaticRenditionOutput"
    },
    {
      "$ref": "#/components/schemas/AssetThumbnailOutput"
    },
    {
      "$ref": "#/components/schemas/AssetTranscriptOutput"
    }
  ],
  "x-go-unknown-variant": "AssetUnknownOutput"
}
```



```json #/components/schemas/AssetThumbnailOutput
{
  "description": "An Asset-owned thumbnail output and its canonical resource details.",
  "properties": {
    "asset_id": {
      "description": "AssetId identifies the owning Asset.",
      "type": "string"
    },
    "details": {
      "$ref": "#/components/schemas/Thumbnail",
      "description": "Details contains the canonical typed output resource, including its available delivery fields."
    },
    "id": {
      "description": "Id identifies the Asset output, prefixed with aop_. The type field identifies the output kind.",
      "type": "string"
    },
    "status": {
      "$ref": "#/components/schemas/AssetOutputStatus"
    },
    "type": {
      "const": "thumbnail",
      "description": "Type identifies the output kind.",
      "type": "string"
    }
  },
  "required": [
    "id",
    "asset_id",
    "type",
    "status",
    "details"
  ],
  "type": "object"
}
```



```json #/components/schemas/Thumbnail
{
  "description": "One thumbnail generation request. At least one sample and its companion files must be published before the resource is ready.",
  "properties": {
    "asset_id": {
      "description": "AssetId identifies the owning Asset for Workflow outputs, or null for standalone requests.",
      "type": [
        "string",
        "null"
      ]
    },
    "created_at": {
      "description": "CreatedAt records when the request was accepted.",
      "format": "date-time",
      "type": "string"
    },
    "created_by_token_id": {
      "description": "CreatedByTokenId specifies the Project token used to create the resource. It remains set after the token is revoked.\nOmitted for dashboard requests, MCP OAuth connections, Workflow actions, and unknown creators.",
      "examples": [
        "tok_2G6MJiNz71bHQGNzGwKx5cJwPFS"
      ],
      "type": "string"
    },
    "created_by_user_id": {
      "description": "CreatedByUserId specifies the team member who created the resource.\nOmitted for Workflow actions, unknown creators, and deleted accounts.",
      "examples": [
        "u_2G6MJiNz71bHQGNzGwKx5cJwPFS"
      ],
      "type": "string"
    },
    "created_via": {
      "$ref": "#/components/schemas/CreatedVia"
    },
    "delete_at": {
      "description": "DeleteAt specifies when this standalone request is deleted: three days after its temporary output expires, otherwise when the team's data retention period ends, counted from when the request was accepted, and no sooner than three days after it finished. It does not delete files in customer-owned Storage. Omitted while preparing and for Asset-owned thumbnails, which follow their Asset.",
      "format": "date-time",
      "type": "string"
    },
    "error": {
      "$ref": "#/components/schemas/ThumbnailError",
      "description": "Error explains a failed request. Omitted otherwise."
    },
    "expires_at": {
      "description": "ExpiresAt specifies when temporary output files expire. Omitted for customer output Storage.",
      "format": "date-time",
      "type": "string"
    },
    "files": {
      "description": "Files contains all published images or sheets and the WebVTT index. Empty while preparing.",
      "items": {
        "$ref": "#/components/schemas/ThumbnailFile"
      },
      "type": "array"
    },
    "id": {
      "description": "Id identifies this thumbnail request. Standalone requests use thm_ IDs; Asset-owned outputs use aop_ IDs.",
      "examples": [
        "thm_example"
      ],
      "type": "string"
    },
    "metadata": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "Metadata contains the accepted string metadata.",
      "type": "object"
    },
    "ready_at": {
      "description": "ReadyAt records when the complete available set was published. Omitted before publication.",
      "format": "date-time",
      "type": "string"
    },
    "samples": {
      "description": "Samples contains published thumbnails ordered by timestamp. Empty while preparing. A ready resource may contain fewer samples than requested.",
      "items": {
        "$ref": "#/components/schemas/ThumbnailSample"
      },
      "type": "array"
    },
    "settings": {
      "$ref": "#/components/schemas/ThumbnailSettings",
      "description": "Settings contains the accepted sampling and output settings."
    },
    "source_id": {
      "description": "SourceId identifies the input Source, or null if it has been deleted.",
      "type": [
        "string",
        "null"
      ]
    },
    "status": {
      "$ref": "#/components/schemas/ThumbnailStatus",
      "description": "Status reports processing or output expiry."
    },
    "storage_id": {
      "description": "StorageId identifies the accepted output Storage.",
      "type": "string"
    },
    "storage_path": {
      "description": "StoragePath specifies the accepted filename template relative to the Storage base_prefix, or null when Chunkify generated the file names.",
      "type": [
        "string",
        "null"
      ]
    },
    "storage_prefix": {
      "description": "StoragePrefix specifies the complete output folder saved at creation. File and sample paths are relative to this folder.",
      "type": "string"
    },
    "updated_at": {
      "description": "UpdatedAt records the last lifecycle update.",
      "format": "date-time",
      "type": "string"
    }
  },
  "required": [
    "id",
    "source_id",
    "asset_id",
    "storage_id",
    "storage_prefix",
    "storage_path",
    "settings",
    "status",
    "metadata",
    "samples",
    "files",
    "created_at",
    "updated_at"
  ],
  "type": "object"
}
```



```json #/components/schemas/ThumbnailError
{
  "description": "A customer-facing processing failure.",
  "properties": {
    "code": {
      "description": "Code identifies the processing failure.",
      "type": "string"
    },
    "message": {
      "description": "Message explains the processing failure.",
      "type": "string"
    }
  },
  "required": [
    "code",
    "message"
  ],
  "type": "object"
}
```



```json #/components/schemas/ThumbnailFile
{
  "description": "One published image, sprite sheet, or WebVTT file.",
  "properties": {
    "cdn_url": {
      "description": "CdnUrl provides delivery through the configured CDN. Omitted without a CDN or after expiry.",
      "type": "string"
    },
    "height": {
      "description": "Height specifies the measured image or complete sprite canvas height. Omitted for WebVTT.",
      "minimum": 1,
      "type": "integer"
    },
    "kind": {
      "description": "Kind identifies an individual image, sprite sheet, or WebVTT index.",
      "enum": [
        "image",
        "sprite",
        "vtt"
      ],
      "type": "string"
    },
    "path": {
      "description": "Path specifies the file relative to storage_prefix.",
      "type": "string"
    },
    "size": {
      "description": "Size specifies the measured encoded file size in bytes.",
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Url provides temporary authorized delivery. Omitted after expiry or when unavailable.",
      "type": "string"
    },
    "width": {
      "description": "Width specifies the measured image or complete sprite canvas width. Omitted for WebVTT.",
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "path",
    "kind",
    "size"
  ],
  "type": "object"
}
```



```json #/components/schemas/ThumbnailSample
{
  "description": "One successfully published requested sample. Repeated samples remain separate entries.",
  "properties": {
    "crop": {
      "$ref": "#/components/schemas/ThumbnailCrop",
      "description": "Crop specifies the tile origin in its sprite sheet. Omitted for individual images; width and height give the tile dimensions."
    },
    "height": {
      "description": "Height specifies this image or tile height in pixels.",
      "minimum": 1,
      "type": "integer"
    },
    "path": {
      "description": "Path identifies the image or sprite sheet in files.",
      "type": "string"
    },
    "timestamp": {
      "description": "Timestamp specifies the measured Source-relative presentation time of the selected frame in seconds. Compatible cached inputs use millisecond timestamps, which can select a neighboring frame compared with the original Source.",
      "minimum": 0,
      "type": "number"
    },
    "width": {
      "description": "Width specifies this image or tile width in pixels.",
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "timestamp",
    "path",
    "width",
    "height"
  ],
  "type": "object"
}
```



```json #/components/schemas/ThumbnailCrop
{
  "description": "The image rectangle within a sprite sheet.",
  "properties": {
    "x": {
      "description": "X specifies the left edge in pixels.",
      "minimum": 0,
      "type": "integer"
    },
    "y": {
      "description": "Y specifies the top edge in pixels.",
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "x",
    "y"
  ],
  "type": "object"
}
```



```json #/components/schemas/ThumbnailSettings
{
  "description": "Accepted sampling and output settings, with defaults resolved.",
  "oneOf": [
    {
      "required": [
        "timestamps"
      ]
    },
    {
      "required": [
        "count"
      ]
    }
  ],
  "properties": {
    "count": {
      "description": "Count specifies 1 to 100 thumbnails at the middle of equal sections of the selected range.",
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "format": {
      "$ref": "#/components/schemas/ThumbnailFormat",
      "description": "Format specifies the accepted image encoding."
    },
    "output": {
      "$ref": "#/components/schemas/ThumbnailOutput",
      "description": "Output specifies the accepted output mode."
    },
    "range": {
      "$ref": "#/components/schemas/ThumbnailRange",
      "description": "Range contains the accepted sampling boundaries."
    },
    "size": {
      "description": "Size specifies the accepted maximum image or tile edge in pixels.",
      "maximum": 1920,
      "minimum": 64,
      "type": "integer"
    },
    "timestamps": {
      "description": "Timestamps specifies 1 to 100 Source-relative target times in seconds. Every time must be within the selected range. Repeated targets produce separate outputs.",
      "items": {
        "description": "A target time in seconds.",
        "minimum": 0,
        "type": "number"
      },
      "maxItems": 100,
      "minItems": 1,
      "type": "array"
    }
  },
  "required": [
    "range",
    "output",
    "format",
    "size"
  ],
  "type": "object"
}
```



```json #/components/schemas/ThumbnailFormat
{
  "description": "Format specifies the image encoding.",
  "enum": [
    "jpeg",
    "webp"
  ],
  "type": "string"
}
```



```json #/components/schemas/ThumbnailOutput
{
  "description": "Output specifies individual images or automatically arranged sprite sheets.",
  "enum": [
    "images",
    "sprites"
  ],
  "type": "string"
}
```



```json #/components/schemas/ThumbnailRange
{
  "description": "The resolved Source-relative sampling range.",
  "properties": {
    "end": {
      "description": "End specifies the exclusive upper bound in seconds.",
      "exclusiveMinimum": 0,
      "type": "number"
    },
    "start": {
      "description": "Start specifies the inclusive lower bound in seconds.",
      "minimum": 0,
      "type": "number"
    }
  },
  "required": [
    "start",
    "end"
  ],
  "type": "object"
}
```



```json #/components/schemas/ThumbnailStatus
{
  "description": "Status is ready only after processing and publication finish. Temporary outputs become expired after their retention period.",
  "enum": [
    "preparing",
    "ready",
    "failed",
    "expired"
  ],
  "type": "string"
}
```



```json #/components/schemas/CreatedVia
{
  "description": "CreatedVia specifies how the resource was created: api for API requests, dashboard for the Chunkify dashboard, mcp for MCP clients, and workflow for Workflow actions.\nOmitted when the creator is unknown.",
  "enum": [
    "api",
    "dashboard",
    "mcp",
    "workflow"
  ],
  "examples": [
    "api"
  ],
  "type": "string"
}
```



```json #/components/schemas/AssetOutputStatus
{
  "description": "Status specifies the output processing state. Expired means temporary output files are no longer available.",
  "enum": [
    "preparing",
    "ready",
    "failed",
    "expired"
  ],
  "type": "string"
}
```



```json #/components/schemas/AssetTranscriptOutput
{
  "description": "An Asset-owned transcript output and its content.",
  "properties": {
    "asset_id": {
      "description": "AssetId identifies the owning Asset.",
      "type": "string"
    },
    "details": {
      "$ref": "#/components/schemas/AssetTranscript"
    },
    "id": {
      "description": "Id identifies the Asset output, prefixed with aop_.",
      "type": "string"
    },
    "status": {
      "$ref": "#/components/schemas/AssetOutputStatus"
    },
    "type": {
      "const": "transcript",
      "description": "Type identifies the output kind.",
      "type": "string"
    }
  },
  "required": [
    "id",
    "asset_id",
    "type",
    "status",
    "details"
  ],
  "type": "object"
}
```



```json #/components/schemas/AssetTranscript
{
  "description": "An original-language transcript. Content is included in ready output responses and lifecycle event snapshots. Transcripts have no download or CDN URL.",
  "properties": {
    "content": {
      "$ref": "#/components/schemas/AssetTranscriptContent",
      "description": "Content contains the complete text and timed segments. Included when ready; omitted while preparing, failed or expired."
    },
    "error": {
      "$ref": "#/components/schemas/AssetError"
    },
    "id": {
      "description": "Id identifies the Asset output, prefixed with aop_.",
      "type": "string"
    },
    "language_code": {
      "description": "LanguageCode identifies the detected primary language, such as en. Omitted before recognition or when no speech is detected.",
      "type": "string"
    },
    "status": {
      "$ref": "#/components/schemas/AssetOutputStatus"
    }
  },
  "required": [
    "id",
    "status"
  ],
  "type": "object"
}
```



```json #/components/schemas/AssetOutputStatus
{
  "description": "Status specifies the output processing state. Expired means temporary output files are no longer available.",
  "enum": [
    "preparing",
    "ready",
    "failed",
    "expired"
  ],
  "type": "string"
}
```



```json #/components/schemas/AssetTranscriptContent
{
  "description": "The complete transcript and its timed passages. An audio track without speech produces empty text and an empty segments array.",
  "properties": {
    "segments": {
      "description": "Segments contains timed passages in chronological order. Individual word timestamps are not included.",
      "items": {
        "$ref": "#/components/schemas/AssetTranscriptSegment"
      },
      "type": "array"
    },
    "text": {
      "description": "Text contains the complete recognized speech in the original language.",
      "type": "string"
    }
  },
  "required": [
    "text",
    "segments"
  ],
  "type": "object"
}
```



```json #/components/schemas/AssetTranscriptSegment
{
  "description": "A timed passage of recognized speech. Times are seconds from the start of the Asset.",
  "properties": {
    "end": {
      "description": "End specifies the passage end time in seconds.",
      "minimum": 0,
      "type": "number"
    },
    "start": {
      "description": "Start specifies the passage start time in seconds.",
      "minimum": 0,
      "type": "number"
    },
    "text": {
      "description": "Text contains the recognized passage, including punctuation.",
      "type": "string"
    }
  },
  "required": [
    "start",
    "end",
    "text"
  ],
  "type": "object"
}
```



```json #/components/schemas/AssetError
{
  "properties": {
    "code": {
      "description": "Machine-readable processing error code.",
      "type": "string"
    },
    "message": {
      "description": "Description of the processing failure.",
      "type": "string"
    },
    "stage": {
      "description": "Processing stage that failed.",
      "enum": [
        "ingest",
        "analysis",
        "encoding",
        "packaging",
        "upload",
        "validation",
        "cleanup"
      ],
      "type": "string"
    }
  },
  "required": [
    "stage",
    "code",
    "message"
  ],
  "type": "object"
}
```



```json #/components/schemas/AssetOutputStatus
{
  "description": "Status specifies the output processing state. Expired means temporary output files are no longer available.",
  "enum": [
    "preparing",
    "ready",
    "failed",
    "expired"
  ],
  "type": "string"
}
```



```json #/components/schemas/AssetCaptionOutput
{
  "description": "An Asset-owned caption output and its canonical resource details.",
  "properties": {
    "asset_id": {
      "description": "AssetId identifies the owning Asset.",
      "type": "string"
    },
    "details": {
      "$ref": "#/components/schemas/AssetCaption",
      "description": "Details contains the canonical typed output resource, including its available delivery fields."
    },
    "id": {
      "description": "Id identifies the Asset output, prefixed with aop_. The type field identifies the output kind.",
      "type": "string"
    },
    "status": {
      "$ref": "#/components/schemas/AssetOutputStatus"
    },
    "type": {
      "const": "caption",
      "description": "Type identifies the output kind.",
      "type": "string"
    }
  },
  "required": [
    "id",
    "asset_id",
    "type",
    "status",
    "details"
  ],
  "type": "object"
}
```



```json #/components/schemas/AssetOutputStatus
{
  "description": "Status specifies the output processing state. Expired means temporary output files are no longer available.",
  "enum": [
    "preparing",
    "ready",
    "failed",
    "expired"
  ],
  "type": "string"
}
```



```json #/components/schemas/AssetCaption
{
  "properties": {
    "created_at": {
      "description": "Time this caption output was requested.",
      "format": "date-time",
      "type": "string"
    },
    "error": {
      "$ref": "#/components/schemas/AssetError",
      "description": "Reason caption processing failed."
    },
    "id": {
      "description": "Unique Asset output ID, prefixed with aop_.",
      "type": "string"
    },
    "language_code": {
      "description": "Primary language of this subtitle track, such as en or fr. Omitted when no speech was detected or processing has not finished.",
      "type": "string"
    },
    "playlist_path": {
      "description": "Subtitle media playlist path in Storage. Available when speech was detected.",
      "type": "string"
    },
    "size": {
      "description": "Combined subtitle playlist and WebVTT size in bytes. Available when ready.",
      "minimum": 0,
      "type": "integer"
    },
    "source_caption_id": {
      "description": "ID of the caption track translated to create this track. Omitted for speech transcription.",
      "type": "string"
    },
    "status": {
      "description": "Caption processing status.",
      "enum": [
        "preparing",
        "ready",
        "failed",
        "expired"
      ],
      "type": "string"
    },
    "transcript_id": {
      "description": "TranscriptId identifies the original-language transcript used to generate this caption. Omitted for translated captions.",
      "type": "string"
    },
    "vtt_path": {
      "description": "WebVTT subtitle segment path in Storage. Available when speech was detected.",
      "type": "string"
    }
  },
  "required": [
    "id",
    "status"
  ],
  "type": "object"
}
```



```json #/components/schemas/AssetError
{
  "properties": {
    "code": {
      "description": "Machine-readable processing error code.",
      "type": "string"
    },
    "message": {
      "description": "Description of the processing failure.",
      "type": "string"
    },
    "stage": {
      "description": "Processing stage that failed.",
      "enum": [
        "ingest",
        "analysis",
        "encoding",
        "packaging",
        "upload",
        "validation",
        "cleanup"
      ],
      "type": "string"
    }
  },
  "required": [
    "stage",
    "code",
    "message"
  ],
  "type": "object"
}
```



```json #/components/schemas/AssetStaticRenditionOutput
{
  "description": "An Asset-owned static rendition output and its canonical resource details.",
  "properties": {
    "asset_id": {
      "description": "AssetId identifies the owning Asset.",
      "type": "string"
    },
    "details": {
      "$ref": "#/components/schemas/AssetStaticRendition",
      "description": "Details contains the canonical typed output resource, including its available delivery fields."
    },
    "id": {
      "description": "Id identifies the Asset output, prefixed with aop_. The type field identifies the output kind.",
      "type": "string"
    },
    "status": {
      "$ref": "#/components/schemas/AssetOutputStatus"
    },
    "type": {
      "const": "static_rendition",
      "description": "Type identifies the output kind.",
      "type": "string"
    }
  },
  "required": [
    "id",
    "asset_id",
    "type",
    "status",
    "details"
  ],
  "type": "object"
}
```



```json #/components/schemas/AssetOutputStatus
{
  "description": "Status specifies the output processing state. Expired means temporary output files are no longer available.",
  "enum": [
    "preparing",
    "ready",
    "failed",
    "expired"
  ],
  "type": "string"
}
```



```json #/components/schemas/AssetStaticRendition
{
  "properties": {
    "asset_id": {
      "description": "Parent Asset ID.",
      "type": "string"
    },
    "audio_bitrate": {
      "description": "Measured audio bitrate in bits per second. Omitted until known or when there is no audio.",
      "minimum": 0,
      "type": "integer"
    },
    "audio_codec": {
      "description": "Measured audio codec. Omitted until known or when there is no audio.",
      "type": "string"
    },
    "audio_samplerate": {
      "description": "Measured audio sample rate in Hz. Omitted until known or when there is no audio.",
      "minimum": 0,
      "type": "integer"
    },
    "cdn_url": {
      "description": "Unsigned MP4 CDN URL. Available when ready and unexpired and Storage has a CDN URL.",
      "format": "uri",
      "type": "string"
    },
    "container": {
      "const": "mp4",
      "description": "Media container.",
      "type": "string"
    },
    "created_at": {
      "description": "When the rendition was created.",
      "format": "date-time",
      "type": "string"
    },
    "duration": {
      "description": "Output duration in seconds. Omitted until ready.",
      "minimum": 0,
      "type": "number"
    },
    "error": {
      "$ref": "#/components/schemas/AssetError"
    },
    "height": {
      "description": "Output height in pixels.",
      "minimum": 0,
      "type": "integer"
    },
    "id": {
      "description": "Unique Asset output ID, prefixed with aop_.",
      "type": "string"
    },
    "path": {
      "description": "MP4 path in Storage. Recreating the same resolution reuses this path and overwrites any retained file.",
      "type": "string"
    },
    "progress": {
      "$ref": "#/components/schemas/AssetRenditionProgress",
      "description": "Progress specifies the current processing stage and encoding percentage. Omitted after processing ends."
    },
    "ready_at": {
      "description": "When the MP4 became available.",
      "format": "date-time",
      "type": "string"
    },
    "requested_resolution": {
      "description": "Requested resolution selector.",
      "enum": [
        "highest",
        "240p",
        "360p",
        "480p",
        "540p",
        "720p",
        "1080p",
        "1440p",
        "2160p"
      ],
      "type": "string"
    },
    "resolution": {
      "description": "Selected output resolution. May be smaller than 240p for small sources. Use width and height for pixel dimensions.",
      "type": "string"
    },
    "size": {
      "description": "File size in bytes. Omitted until ready.",
      "minimum": 0,
      "type": "integer"
    },
    "status": {
      "description": "Processing status of this MP4, independent of streaming outputs.",
      "enum": [
        "preparing",
        "ready",
        "failed",
        "expired"
      ],
      "type": "string"
    },
    "storage_id": {
      "description": "Storage containing this rendition, inherited from its Asset.",
      "type": "string"
    },
    "updated_at": {
      "description": "When the rendition was last updated.",
      "format": "date-time",
      "type": "string"
    },
    "url": {
      "description": "Signed MP4 download URL, available when ready and unexpired. Valid for up to ten minutes. Retrieve the output to refresh it. Independent of preview_enabled.",
      "format": "uri",
      "type": "string"
    },
    "video_bitrate": {
      "description": "Measured video bitrate in bits per second. Omitted until ready.",
      "minimum": 0,
      "type": "integer"
    },
    "video_codec": {
      "const": "h264",
      "description": "Video codec.",
      "type": "string"
    },
    "video_framerate": {
      "description": "Measured video frame rate in frames per second. Omitted until known.",
      "minimum": 0,
      "type": "number"
    },
    "width": {
      "description": "Output width in pixels.",
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "id",
    "asset_id",
    "storage_id",
    "status",
    "requested_resolution",
    "resolution",
    "width",
    "height",
    "video_codec",
    "container",
    "path",
    "created_at",
    "updated_at"
  ],
  "type": "object"
}
```



```json #/components/schemas/AssetError
{
  "properties": {
    "code": {
      "description": "Machine-readable processing error code.",
      "type": "string"
    },
    "message": {
      "description": "Description of the processing failure.",
      "type": "string"
    },
    "stage": {
      "description": "Processing stage that failed.",
      "enum": [
        "ingest",
        "analysis",
        "encoding",
        "packaging",
        "upload",
        "validation",
        "cleanup"
      ],
      "type": "string"
    }
  },
  "required": [
    "stage",
    "code",
    "message"
  ],
  "type": "object"
}
```



```json #/components/schemas/AssetRenditionProgress
{
  "description": "Current rendition preparation progress. Encoding progress measures processed video duration, not elapsed time or playback availability.",
  "properties": {
    "percent": {
      "description": "Percent specifies the percentage of the video encoded so far. Present only during encoding when video duration is known. It may decrease if processing restarts. It does not estimate total preparation time.",
      "maximum": 100,
      "minimum": 0,
      "type": "number"
    },
    "stage": {
      "description": "Stage specifies the current preparation activity. Finalization and streaming publication can overlap encoding; finalizing is shown once encoding has completed.",
      "enum": [
        "queued",
        "starting",
        "encoding",
        "finalizing",
        "uploading"
      ],
      "type": "string"
    }
  },
  "required": [
    "stage"
  ],
  "type": "object"
}
```