# Create an Asset output

> Create one caption, static rendition or additional thumbnail output. The accepted output processes asynchronously and is returned in the same envelope as output reads.

```json
{
  "path": "/assets/{assetId}/outputs",
  "method": "post",
  "schema": {
    "description": "Create one caption, static rendition or additional thumbnail output. The accepted output processes asynchronously and is returned in the same envelope as output reads.",
    "operationId": "createAssetOutput",
    "parameters": [
      {
        "description": "AssetId identifies the Asset that owns the output within the authenticated Project.",
        "in": "path",
        "name": "assetId",
        "required": true,
        "schema": {
          "type": "string"
        }
      }
    ],
    "requestBody": {
      "content": {
        "application/json": {
          "examples": {
            "caption": {
              "value": {
                "params": {},
                "type": "caption"
              }
            },
            "caption_translation": {
              "value": {
                "params": {
                  "language_code": "fr",
                  "source_caption_id": "aop_example"
                },
                "type": "caption"
              }
            },
            "static_rendition": {
              "value": {
                "params": {
                  "resolution": "1080p"
                },
                "type": "static_rendition"
              }
            },
            "thumbnail": {
              "value": {
                "params": {
                  "count": 10,
                  "output": "sprites"
                },
                "type": "thumbnail"
              }
            }
          },
          "schema": {
            "$ref": "#/components/schemas/AssetOutputCreateParams"
          }
        }
      },
      "required": true
    },
    "responses": {
      "202": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AssetOutputResponse",
              "examples": [
                {
                  "data": {
                    "asset_id": "ast_example",
                    "details": {
                      "id": "aop_example",
                      "status": "preparing"
                    },
                    "id": "aop_example",
                    "status": "preparing",
                    "type": "caption"
                  },
                  "status": "success"
                }
              ]
            }
          }
        },
        "description": "Output accepted for processing"
      },
      "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"
      },
      "409": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ResponseErrorConflict"
            }
          }
        },
        "description": "The Asset or input cannot accept this output, the output already exists, or the source caption is not ready for translation."
      },
      "429": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
            }
          }
        },
        "description": "TooManyRequests error"
      },
      "500": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ResponseErrorUnexpected"
            }
          }
        },
        "description": "Unexpected error"
      },
      "503": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ResponseErrorServiceUnavailable"
            }
          }
        },
        "description": "ServiceUnavailable error"
      }
    },
    "security": [
      {
        "ProjectAccessToken": []
      }
    ],
    "summary": "Create an Asset output",
    "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 output = await client.assets.outputs.create(\n  'ast_example',\n  {\n    type: 'static_rendition',\n    params: {\n      resolution: '1080p',\n    },\n  },\n);\n\nconsole.log(output);"
      },
      {
        "lang": "python",
        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\noutput = client.assets.outputs.create(\n    \"ast_example\",\n    type=\"static_rendition\",\n    params={\n        \"resolution\": \"1080p\",\n    },\n)\nprint(output)"
      },
      {
        "lang": "php",
        "source": "\u003c?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$output = $client-\u003eassets-\u003eoutputs-\u003ecreate(\n    'ast_example',\n    type: 'static_rendition',\n    params: [\n        'resolution' =\u003e '1080p',\n    ],\n);\n\nvar_dump($output);"
      },
      {
        "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\toutput, err := client.Assets.Outputs.New(\n\t\tcontext.TODO(),\n\t\t\"ast_example\",\n\t\tchunkify.AssetOutputNewParams{\n\t\t\tOfStaticRendition: \u0026chunkify.AssetOutputNewParamsStaticRendition{\n\t\t\t\tParams: chunkify.AssetStaticRenditionCreateParams{\n\t\t\t\t\tResolution: chunkify.AssetStaticRenditionCreateParamsResolution1080p,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tfmt.Println(output)\n}\n"
      }
    ]
  }
}
```



```json #/components/schemas/AssetOutputResponse
{
  "description": "One Asset output.",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/AssetOutput"
    },
    "status": {
      "const": "success",
      "description": "Status is success for a successful request.",
      "type": "string"
    }
  },
  "required": [
    "status",
    "data"
  ],
  "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/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/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/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/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/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"
}
```



```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/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/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/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/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/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/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/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/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/ResponseErrorConflict
{
  "description": "Error response",
  "properties": {
    "error": {
      "description": "Error response details",
      "properties": {
        "code": {
          "const": 409,
          "description": "Code is the HTTP status code",
          "examples": [
            409
          ],
          "type": "integer"
        },
        "message": {
          "description": "Message is a human-readable error description",
          "examples": [
            "source_unavailable: the original video is no longer accessible"
          ],
          "type": "string"
        },
        "type": {
          "const": "ConflictError",
          "description": "Type indicates the error category",
          "enum": [
            "ConflictError"
          ],
          "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/ResponseErrorServiceUnavailable
{
  "properties": {
    "error": {
      "description": "Error response details",
      "properties": {
        "code": {
          "const": 503,
          "description": "Code is the HTTP status code",
          "examples": [
            503
          ],
          "type": "integer"
        },
        "message": {
          "description": "Message is a human-readable error description",
          "examples": [
            "The service is temporarily unavailable; retry the request"
          ],
          "type": "string"
        },
        "type": {
          "const": "ServiceUnavailableError",
          "description": "Type indicates the error category",
          "enum": [
            "ServiceUnavailableError"
          ],
          "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/AssetOutputCreateParams
{
  "description": "Create one output for an Asset. Type selects its required, strictly validated parameters.",
  "discriminator": {
    "mapping": {
      "caption": "#/components/schemas/AssetCaptionOutputCreateParams",
      "static_rendition": "#/components/schemas/AssetStaticRenditionOutputCreateParams",
      "thumbnail": "#/components/schemas/AssetThumbnailOutputCreateParams",
      "transcript": "#/components/schemas/AssetTranscriptOutputCreateParams"
    },
    "propertyName": "type"
  },
  "oneOf": [
    {
      "$ref": "#/components/schemas/AssetCaptionOutputCreateParams"
    },
    {
      "$ref": "#/components/schemas/AssetStaticRenditionOutputCreateParams"
    },
    {
      "$ref": "#/components/schemas/AssetThumbnailOutputCreateParams"
    },
    {
      "$ref": "#/components/schemas/AssetTranscriptOutputCreateParams"
    }
  ]
}
```



```json #/components/schemas/AssetThumbnailOutputCreateParams
{
  "additionalProperties": false,
  "description": "Create an Asset-owned thumbnail output.",
  "properties": {
    "params": {
      "$ref": "#/components/schemas/AssetThumbnailCreateParams",
      "description": "Params specifies the settings for this output type."
    },
    "type": {
      "const": "thumbnail",
      "description": "Type specifies the output kind to create.",
      "type": "string"
    }
  },
  "required": [
    "type",
    "params"
  ],
  "type": "object",
  "x-reject-null-fields": [
    "type",
    "params"
  ],
  "x-reject-unknown-fields": true
}
```



```json #/components/schemas/AssetThumbnailCreateParams
{
  "additionalProperties": false,
  "description": "Generate additional thumbnails from a ready Asset using its retained input, folder and Storage. Specify exactly one of timestamps or count. Each layout, format and size combination can be requested once.",
  "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",
      "default": "jpeg",
      "description": "Format selects JPEG or WebP. Defaults to JPEG."
    },
    "metadata": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "Metadata attaches string values to this request. The serialized object may contain at most 2048 bytes.",
      "type": "object",
      "x-maxJSONBytes": 2048
    },
    "output": {
      "$ref": "#/components/schemas/ThumbnailOutput",
      "default": "images",
      "description": "Output selects images or sprites. Defaults to images."
    },
    "range": {
      "$ref": "#/components/schemas/ThumbnailRangeParams",
      "description": "Range limits sampling to part of the Source. Defaults to the whole Source duration."
    },
    "size": {
      "default": 320,
      "description": "Size specifies the maximum image or tile edge in pixels, from 64 to 1920. Defaults to 320. Odd sizes are supported. Preserves display aspect ratio without cropping or upscaling.",
      "maximum": 1920,
      "minimum": 64,
      "type": "integer"
    },
    "timestamps": {
      "description": "Timestamps specifies 1 to 100 Source-relative target times in seconds. Every timestamp must be within the selected range, including its start and excluding its end. Repeated targets produce separate outputs.",
      "items": {
        "description": "A target time in seconds.",
        "minimum": 0,
        "type": "number"
      },
      "maxItems": 100,
      "minItems": 1,
      "type": "array"
    }
  },
  "type": "object",
  "x-reject-null-fields": [
    "timestamps",
    "count",
    "range",
    "output",
    "format",
    "size",
    "metadata"
  ],
  "x-reject-unknown-fields": true
}
```



```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/ThumbnailRangeParams
{
  "additionalProperties": false,
  "description": "Optional Source-relative sampling boundaries.",
  "properties": {
    "end": {
      "description": "End specifies the exclusive upper bound in seconds. Defaults to the Source duration.",
      "exclusiveMinimum": 0,
      "type": "number"
    },
    "start": {
      "description": "Start specifies the inclusive lower bound in seconds. Defaults to zero.",
      "minimum": 0,
      "type": "number"
    }
  },
  "type": "object",
  "x-reject-null-fields": [
    "start",
    "end"
  ],
  "x-reject-unknown-fields": true
}
```



```json #/components/schemas/AssetTranscriptOutputCreateParams
{
  "additionalProperties": false,
  "description": "Create or reuse the original-language transcript for an Asset. Caption generation shares this transcript and its speech-recognition charge.",
  "properties": {
    "params": {
      "$ref": "#/components/schemas/AssetTranscriptOutputParams"
    },
    "type": {
      "const": "transcript",
      "description": "Type specifies the output kind.",
      "type": "string"
    }
  },
  "required": [
    "type",
    "params"
  ],
  "type": "object",
  "x-reject-null-fields": [
    "type",
    "params"
  ],
  "x-reject-unknown-fields": true
}
```



```json #/components/schemas/AssetTranscriptOutputParams
{
  "additionalProperties": false,
  "description": "Parameters for an original-language transcript. Pass an empty object; the spoken language is detected automatically.",
  "properties": {},
  "type": "object",
  "x-go-required-presence": true,
  "x-reject-unknown-fields": true
}
```



```json #/components/schemas/AssetCaptionOutputCreateParams
{
  "additionalProperties": false,
  "description": "Create an Asset-owned caption output.",
  "properties": {
    "params": {
      "$ref": "#/components/schemas/AssetCaptionOutputParams",
      "description": "Params specifies the settings for this output type."
    },
    "type": {
      "const": "caption",
      "description": "Type specifies the output kind to create.",
      "type": "string"
    }
  },
  "required": [
    "type",
    "params"
  ],
  "type": "object",
  "x-reject-null-fields": [
    "type",
    "params"
  ],
  "x-reject-unknown-fields": true
}
```



```json #/components/schemas/AssetCaptionOutputParams
{
  "additionalProperties": false,
  "dependentRequired": {
    "language_code": [
      "source_caption_id"
    ],
    "source_caption_id": [
      "language_code"
    ]
  },
  "description": "Parameters for original captions or a translation of an existing caption on this Asset.",
  "properties": {
    "language_code": {
      "description": "LanguageCode specifies the target language for a translated caption. Supply source_caption_id with this field. Omit both fields to transcribe the Asset audio with automatic language detection.",
      "enum": [
        "en",
        "fr",
        "es",
        "de",
        "it",
        "pt",
        "nl",
        "ja",
        "ko",
        "zh",
        "ar",
        "hi",
        "ru",
        "tr",
        "pl",
        "sv"
      ],
      "type": "string"
    },
    "source_caption_id": {
      "description": "SourceCaptionId specifies the caption on this Asset to translate. Supply language_code with this field. Omit both fields to generate original captions.",
      "minLength": 1,
      "type": "string"
    }
  },
  "type": "object",
  "x-go-required-presence": true,
  "x-reject-null-fields": [
    "source_caption_id",
    "language_code"
  ],
  "x-reject-unknown-fields": true
}
```



```json #/components/schemas/AssetStaticRenditionOutputCreateParams
{
  "additionalProperties": false,
  "description": "Create an Asset-owned static rendition output.",
  "properties": {
    "params": {
      "$ref": "#/components/schemas/AssetStaticRenditionCreateParams",
      "description": "Params specifies the settings for this output type."
    },
    "type": {
      "const": "static_rendition",
      "description": "Type specifies the output kind to create.",
      "type": "string"
    }
  },
  "required": [
    "type",
    "params"
  ],
  "type": "object",
  "x-reject-null-fields": [
    "type",
    "params"
  ],
  "x-reject-unknown-fields": true
}
```



```json #/components/schemas/AssetStaticRenditionCreateParams
{
  "additionalProperties": false,
  "description": "Parameters for an independently processed H.264 MP4 rendition.",
  "properties": {
    "resolution": {
      "description": "H.264 MP4 resolution. highest selects the largest supported output without upscaling. Hobby supports up to 1080p; other plans support up to 2160p. Independent of the streaming resolution limits.",
      "enum": [
        "highest",
        "240p",
        "360p",
        "480p",
        "540p",
        "720p",
        "1080p",
        "1440p",
        "2160p"
      ],
      "type": "string"
    }
  },
  "required": [
    "resolution"
  ],
  "type": "object",
  "x-reject-null-fields": [
    "resolution"
  ],
  "x-reject-unknown-fields": true
}
```



```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/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/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"
}
```