# Create Transcoding

> Create a standalone file export with resolved encoding settings.

```json
{
  "path": "/transcodings",
  "method": "post",
  "schema": {
    "description": "Create a standalone file export with resolved encoding settings.",
    "operationId": "createTranscoding",
    "requestBody": {
      "content": {
        "application/json": {
          "examples": {
            "trimmedAudio": {
              "value": {
                "format": {
                  "duration": 30,
                  "id": "m4a_aac",
                  "seek": 10
                },
                "source_id": "src_example"
              }
            },
            "video": {
              "value": {
                "format": {
                  "height": 720,
                  "id": "mp4_h264"
                },
                "source_id": "src_example"
              }
            }
          },
          "schema": {
            "$ref": "#/components/schemas/TranscodingCreateParams"
          }
        }
      },
      "required": true
    },
    "responses": {
      "201": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/TranscodingResponse",
              "examples": [
                {
                  "data": {
                    "created_at": "2026-10-16T10:00:00Z",
                    "files": [],
                    "format": {
                      "crf": 21,
                      "disable_audio": true,
                      "duration": 60.1,
                      "framerate": 30,
                      "gop": 120,
                      "height": 720,
                      "id": "mp4_h264",
                      "movflags": "faststart",
                      "per_title": false,
                      "pixfmt": "yuv420p",
                      "preset": "faster",
                      "seek": 0,
                      "width": 1280
                    },
                    "id": "tcg_example",
                    "metadata": {},
                    "processing_stage": "queued",
                    "source_id": "src_example",
                    "status": "preparing",
                    "storage": {
                      "id": "stor_example",
                      "path": "exports/video.mp4"
                    },
                    "updated_at": "2026-10-16T10:00:00Z"
                  },
                  "status": "success"
                }
              ]
            }
          }
        },
        "description": "Transcoding accepted for processing."
      },
      "400": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ResponseErrorValidation"
            }
          }
        },
        "description": "The request, Source or output destination is invalid or unavailable."
      },
      "401": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ResponseErrorAuthentication"
            }
          }
        },
        "description": "Authentication error"
      },
      "403": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ResponseErrorForbidden"
            }
          }
        },
        "description": "Processing is blocked by the subscription, source-size limit or available credit."
      },
      "429": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
            }
          }
        },
        "description": "The request rate or team limit of 1000 unfinished Transcodings has been reached."
      },
      "500": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ResponseErrorUnexpected"
            }
          }
        },
        "description": "Unexpected error"
      }
    },
    "security": [
      {
        "ProjectAccessToken": []
      }
    ],
    "summary": "Create Transcoding",
    "tags": [
      "Transcodings"
    ],
    "x-codeSamples": [
      {
        "lang": "typescript",
        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\n// Transcode using h264 format with 720p resolution\nconst transcoding = await client.transcodings.create({\n  source_id: 'src_UioP9I876hjKlNBH78ILp0mo56t',\n  format: {\n    id: 'mp4_h264',\n    height: 720,\n  }\n});\n\nconsole.log(transcoding);"
      },
      {
        "lang": "python",
        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\n\n# Transcode using h264 format with 720p resolution\ntranscoding = client.transcodings.create(\n    source_id=\"src_UioP9I876hjKlNBH78ILp0mo56t\",\n    format={\n        \"id\": \"mp4_h264\",\n        \"height\": 720,\n    }\n)\n\nprint(transcoding)"
      },
      {
        "lang": "php",
        "source": "\u003c?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n// Transcode using H.264 at 720p resolution.\n$transcoding = $client-\u003etranscodings-\u003ecreate(\n    format: [\n        'id' =\u003e 'mp4_h264',\n        'height' =\u003e 720,\n    ],\n    sourceID: 'src_UioP9I876hjKlNBH78ILp0mo56t',\n);\n\nvar_dump($transcoding);"
      },
      {
        "lang": "golang",
        "source": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\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\ttranscoding, err := client.Transcodings.New(\n\t\tcontext.TODO(),\n\t\tchunkify.TranscodingNewParams{\n\t\t\tSourceID: \"src_example\",\n\t\t\tFormat: chunkify.TranscodingNewParamsFormatUnion{\n\t\t\t\tOfMP4H264: \u0026chunkify.TranscodingMP4H264Param{\n\t\t\t\t\tHeight: chunkify.Int(720),\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(transcoding)\n}\n"
      }
    ]
  }
}
```



```json #/components/schemas/TranscodingCreateParams
{
  "additionalProperties": false,
  "description": "Parameters for a standalone Transcoding with a fixed price accepted at creation.",
  "properties": {
    "format": {
      "$ref": "#/components/schemas/TranscodingCreateFormatParams",
      "description": "Format specifies the requested encoding settings."
    },
    "metadata": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "Metadata attaches string values to the Transcoding. The serialized object may contain at most 2048 bytes.",
      "type": "object",
      "x-maxJSONBytes": 2048
    },
    "source_id": {
      "description": "SourceId identifies a Source in this Project.",
      "maxLength": 64,
      "minLength": 1,
      "type": "string"
    },
    "storage": {
      "$ref": "#/components/schemas/TranscodingCreateStorageParams",
      "description": "Storage overrides the Project output destination. Source storage remains independent."
    }
  },
  "required": [
    "source_id",
    "format"
  ],
  "type": "object",
  "x-reject-unknown-fields": true
}
```



```json #/components/schemas/TranscodingCreateFormatParams
{
  "description": "Format specifies one supported standalone encoding profile.",
  "discriminator": {
    "propertyName": "id"
  },
  "oneOf": [
    {
      "$ref": "#/components/schemas/TranscodingMp4H264"
    },
    {
      "$ref": "#/components/schemas/TranscodingMp4H265"
    },
    {
      "$ref": "#/components/schemas/TranscodingMp4Av1"
    },
    {
      "$ref": "#/components/schemas/TranscodingWebmVp9"
    },
    {
      "$ref": "#/components/schemas/TranscodingM4aAac"
    }
  ],
  "type": "object"
}
```



```json #/components/schemas/TranscodingM4aAac
{
  "allOf": [
    {
      "$ref": "#/components/schemas/TranscodingAudioSettings"
    }
  ],
  "description": "AAC audio-only export from a video or audio Source.",
  "properties": {
    "id": {
      "const": "m4a_aac",
      "description": "Id specifies an AAC M4A export.",
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "type": "object",
  "unevaluatedProperties": false,
  "x-reject-unknown-fields": true
}
```



```json #/components/schemas/TranscodingAudioSettings
{
  "description": "Audio and timeline settings for file exports.",
  "properties": {
    "audio_bitrate": {
      "default": 128000,
      "description": "AudioBitrate specifies the output audio bitrate in bits per second. Defaults to 128000.",
      "maximum": 512000,
      "minimum": 32000,
      "type": "integer"
    },
    "audio_samplerate": {
      "default": 48000,
      "description": "AudioSamplerate specifies the output sample rate in Hz. Defaults to 48000. WebM Opus audio uses 48000.",
      "enum": [
        8000,
        11025,
        12000,
        16000,
        22050,
        24000,
        32000,
        44100,
        48000,
        64000,
        88200,
        96000
      ],
      "type": "integer"
    },
    "channels": {
      "default": 2,
      "description": "Channels specifies the output channel count. Defaults to stereo. Six channels means 5.1; eight means 7.1.",
      "enum": [
        1,
        2,
        6,
        8
      ],
      "type": "integer"
    },
    "duration": {
      "description": "Duration specifies the requested output length in seconds. Defaults to the remaining source duration and is capped at the source end. Audio-only output must resolve to at least 0.001 seconds after trimming and sample rounding. The accepted interval determines the fixed price.",
      "exclusiveMinimum": 0,
      "type": "number"
    },
    "seek": {
      "description": "Seek specifies the start in source seconds. Defaults to zero and must precede the source end. The accepted interval uses the output frame or sample timeline. Audio-only output must retain at least 0.001 seconds after sample rounding.",
      "minimum": 0,
      "type": "number"
    }
  },
  "type": "object",
  "x-oapi-gen-ignore": true
}
```



```json #/components/schemas/TranscodingMp4H264
{
  "allOf": [
    {
      "$ref": "#/components/schemas/TranscodingVideoSettings"
    }
  ],
  "description": "mp4_h264 standalone file encoding settings.",
  "properties": {
    "crf": {
      "default": 21,
      "description": "Crf (Constant Rate Factor) controls the quality of the output video.\nLower values mean better quality but larger file size. Range: 16 to 35.\nRecommended values: 18-28 for high quality, 23-28 for good quality, 28-35 for acceptable quality.",
      "examples": [
        23
      ],
      "maximum": 35,
      "minimum": 16,
      "type": "integer"
    },
    "id": {
      "const": "mp4_h264",
      "description": "Id specifies the output format.",
      "type": "string"
    },
    "level": {
      "description": "Level specifies the H.264 decoder level using its two-digit representation, such as 41 for level 4.1. The dimensions, frame rate and rate controls must fit this level and the effective profile. Omitted rate limits resolve to level-compatible defaults.",
      "enum": [
        10,
        11,
        12,
        13,
        20,
        21,
        22,
        30,
        31,
        32,
        40,
        41,
        42,
        50,
        51
      ],
      "examples": [
        41
      ],
      "type": "integer"
    },
    "movflags": {
      "default": "faststart",
      "description": "Movflags specifies MP4 packaging. Defaults to faststart, which places playback metadata before the media.",
      "enum": [
        "faststart"
      ],
      "type": "string"
    },
    "pixfmt": {
      "default": "yuv420p",
      "description": "Pixfmt specifies the output pixel format. Defaults to yuv420p. The selected profile must support it.",
      "enum": [
        "yuv420p",
        "yuv422p",
        "yuv444p",
        "yuv420p10le",
        "yuv422p10le",
        "yuv444p10le"
      ],
      "type": "string"
    },
    "preset": {
      "default": "faster",
      "description": "Preset specifies the encoding speed preset. Valid values (from fastest to slowest):\n- ultrafast: Fastest encoding, lowest quality\n- superfast: Very fast encoding, lower quality\n- veryfast: Fast encoding, moderate quality\n- faster: Faster encoding, good quality\n- fast: Fast encoding, better quality\n- medium: Balanced preset, best quality",
      "enum": [
        "ultrafast",
        "superfast",
        "veryfast",
        "faster",
        "fast",
        "medium"
      ],
      "examples": [
        "medium"
      ],
      "type": "string"
    },
    "profilev": {
      "description": "Profilev specifies the H.264 profile. Valid values:\n- baseline: Basic profile, good for mobile devices\n- main: Main profile, good for most applications\n- high: High profile, best quality but requires more processing\n- high10: High 10-bit profile, supports 10-bit color\n- high422: High 4:2:2 profile, supports 4:2:2 color sampling\n- high444: High 4:4:4 profile, supports 4:4:4 color sampling",
      "enum": [
        "baseline",
        "main",
        "high",
        "high10",
        "high422",
        "high444"
      ],
      "examples": [
        "high"
      ],
      "type": "string"
    },
    "x264_keyint": {
      "description": "X264KeyInt specifies the maximum number of frames between keyframes for H.264 encoding.\nRange: 1 to 960. Higher values can improve compression but may affect seeking.",
      "examples": [
        60
      ],
      "maximum": 960,
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "id"
  ],
  "type": "object",
  "unevaluatedProperties": false,
  "x-reject-unknown-fields": true
}
```



```json #/components/schemas/TranscodingVideoSettings
{
  "allOf": [
    {
      "$ref": "#/components/schemas/TranscodingAudioSettings"
    }
  ],
  "description": "Video settings for standalone file exports.",
  "properties": {
    "bufsize": {
      "description": "Bufsize specifies the video buffer size in bits, from 100000 through 50000000. H.264 and H.265 require maxrate. AV1 and VP9 require a bitrate-controlled mode.",
      "maximum": 50000000,
      "minimum": 100000,
      "type": "integer"
    },
    "disable_audio": {
      "description": "DisableAudio omits the audio stream. Defaults to false. A source without audio produces video only.",
      "type": "boolean"
    },
    "disable_video": {
      "description": "DisableVideo selects an audio-only AAC M4A export. Defaults to false. The source must contain audio.",
      "type": "boolean"
    },
    "framerate": {
      "description": "Framerate specifies the output video frame rate. Defaults to the source rate and must be between 0.001 and 240 fps.",
      "maximum": 240,
      "minimum": 0.001,
      "type": "number"
    },
    "gop": {
      "description": "Gop specifies the maximum keyframe interval in frames. Defaults to four seconds at the accepted frame rate, capped at 960 frames.",
      "maximum": 960,
      "minimum": 1,
      "type": "integer"
    },
    "height": {
      "description": "Height specifies the output dimension in pixels. Use -2 or omit one dimension to preserve the source aspect ratio. Explicit dimensions must be 2 to 7680 and even. Omitting both preserves the source dimensions rounded down to even pixels.",
      "maximum": 7680,
      "minimum": -2,
      "type": "integer"
    },
    "maxrate": {
      "description": "Maxrate specifies the video buffer maximum rate in bits per second, from 100000 through 50000000. H.264 and H.265 require bufsize. VP9 requires video_bitrate; AV1 requires CRF mode.",
      "maximum": 50000000,
      "minimum": 100000,
      "type": "integer"
    },
    "per_title": {
      "default": false,
      "description": "PerTitle enables independent content-based bitrate prediction for each part of the video. Analysis uses only the selected trim interval. Defaults to false. Explicit rate-control settings cannot be combined with it.",
      "type": "boolean"
    },
    "video_bitrate": {
      "description": "VideoBitrate specifies the target video bitrate in bits per second, from 1000 through 100000000. Omit it for CRF or per-title encoding.",
      "maximum": 100000000,
      "minimum": 1000,
      "type": "integer"
    },
    "width": {
      "description": "Width specifies the output dimension in pixels. Use -2 or omit one dimension to preserve the source aspect ratio. Explicit dimensions must be 2 to 7680 and even. Omitting both preserves the source dimensions rounded down to even pixels.",
      "maximum": 7680,
      "minimum": -2,
      "type": "integer"
    }
  },
  "type": "object",
  "x-oapi-gen-ignore": true
}
```



```json #/components/schemas/TranscodingAudioSettings
{
  "description": "Audio and timeline settings for file exports.",
  "properties": {
    "audio_bitrate": {
      "default": 128000,
      "description": "AudioBitrate specifies the output audio bitrate in bits per second. Defaults to 128000.",
      "maximum": 512000,
      "minimum": 32000,
      "type": "integer"
    },
    "audio_samplerate": {
      "default": 48000,
      "description": "AudioSamplerate specifies the output sample rate in Hz. Defaults to 48000. WebM Opus audio uses 48000.",
      "enum": [
        8000,
        11025,
        12000,
        16000,
        22050,
        24000,
        32000,
        44100,
        48000,
        64000,
        88200,
        96000
      ],
      "type": "integer"
    },
    "channels": {
      "default": 2,
      "description": "Channels specifies the output channel count. Defaults to stereo. Six channels means 5.1; eight means 7.1.",
      "enum": [
        1,
        2,
        6,
        8
      ],
      "type": "integer"
    },
    "duration": {
      "description": "Duration specifies the requested output length in seconds. Defaults to the remaining source duration and is capped at the source end. Audio-only output must resolve to at least 0.001 seconds after trimming and sample rounding. The accepted interval determines the fixed price.",
      "exclusiveMinimum": 0,
      "type": "number"
    },
    "seek": {
      "description": "Seek specifies the start in source seconds. Defaults to zero and must precede the source end. The accepted interval uses the output frame or sample timeline. Audio-only output must retain at least 0.001 seconds after sample rounding.",
      "minimum": 0,
      "type": "number"
    }
  },
  "type": "object",
  "x-oapi-gen-ignore": true
}
```



```json #/components/schemas/TranscodingMp4H265
{
  "allOf": [
    {
      "$ref": "#/components/schemas/TranscodingVideoSettings"
    }
  ],
  "description": "mp4_h265 standalone file encoding settings.",
  "properties": {
    "crf": {
      "default": 24,
      "description": "Crf (Constant Rate Factor) controls the quality of the output video.\nLower values mean better quality but larger file size. Range: 16 to 35.\nRecommended values: 18-28 for high quality, 23-28 for good quality, 28-35 for acceptable quality.",
      "examples": [
        23
      ],
      "maximum": 35,
      "minimum": 16,
      "type": "integer"
    },
    "id": {
      "const": "mp4_h265",
      "description": "Id specifies the output format.",
      "type": "string"
    },
    "level": {
      "description": "Level specifies the HEVC level using its two-digit representation, such as 31 for level 3.1. The dimensions, frame rate and rate controls must fit this level. Omitted rate limits resolve to level-compatible defaults.",
      "enum": [
        30,
        31,
        41
      ],
      "examples": [
        41
      ],
      "type": "integer"
    },
    "movflags": {
      "default": "faststart",
      "description": "Movflags specifies MP4 packaging. Defaults to faststart, which places playback metadata before the media.",
      "enum": [
        "faststart"
      ],
      "type": "string"
    },
    "pixfmt": {
      "default": "yuv420p",
      "description": "Pixfmt specifies the output pixel format. Defaults to yuv420p. The selected profile must support it.",
      "enum": [
        "yuv420p",
        "yuv422p",
        "yuv444p",
        "yuv420p10le",
        "yuv422p10le",
        "yuv444p10le",
        "yuv420p12le",
        "yuv422p12le",
        "yuv444p12le"
      ],
      "type": "string"
    },
    "preset": {
      "default": "veryfast",
      "description": "Preset specifies the encoding speed preset. Valid values (from fastest to slowest):\n- ultrafast: Fastest encoding, lowest quality\n- superfast: Very fast encoding, lower quality\n- veryfast: Fast encoding, moderate quality\n- faster: Faster encoding, good quality\n- fast: Fast encoding, better quality\n- medium: Balanced preset, best quality",
      "enum": [
        "ultrafast",
        "superfast",
        "veryfast",
        "faster",
        "fast",
        "medium"
      ],
      "examples": [
        "medium"
      ],
      "type": "string"
    },
    "profilev": {
      "description": "Profilev selects the HEVC profile. It must support the requested pixel format.",
      "enum": [
        "main",
        "main10",
        "main12",
        "main422-10",
        "main422-12",
        "main444-8",
        "main444-10",
        "main444-12"
      ],
      "type": "string"
    },
    "x265_keyint": {
      "description": "X265KeyInt specifies the maximum number of frames between keyframes for H.265 encoding.\nRange: 1 to 300. Higher values can improve compression but may affect seeking.",
      "examples": [
        60
      ],
      "maximum": 300,
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "id"
  ],
  "type": "object",
  "unevaluatedProperties": false,
  "x-reject-unknown-fields": true
}
```



```json #/components/schemas/TranscodingVideoSettings
{
  "allOf": [
    {
      "$ref": "#/components/schemas/TranscodingAudioSettings"
    }
  ],
  "description": "Video settings for standalone file exports.",
  "properties": {
    "bufsize": {
      "description": "Bufsize specifies the video buffer size in bits, from 100000 through 50000000. H.264 and H.265 require maxrate. AV1 and VP9 require a bitrate-controlled mode.",
      "maximum": 50000000,
      "minimum": 100000,
      "type": "integer"
    },
    "disable_audio": {
      "description": "DisableAudio omits the audio stream. Defaults to false. A source without audio produces video only.",
      "type": "boolean"
    },
    "disable_video": {
      "description": "DisableVideo selects an audio-only AAC M4A export. Defaults to false. The source must contain audio.",
      "type": "boolean"
    },
    "framerate": {
      "description": "Framerate specifies the output video frame rate. Defaults to the source rate and must be between 0.001 and 240 fps.",
      "maximum": 240,
      "minimum": 0.001,
      "type": "number"
    },
    "gop": {
      "description": "Gop specifies the maximum keyframe interval in frames. Defaults to four seconds at the accepted frame rate, capped at 960 frames.",
      "maximum": 960,
      "minimum": 1,
      "type": "integer"
    },
    "height": {
      "description": "Height specifies the output dimension in pixels. Use -2 or omit one dimension to preserve the source aspect ratio. Explicit dimensions must be 2 to 7680 and even. Omitting both preserves the source dimensions rounded down to even pixels.",
      "maximum": 7680,
      "minimum": -2,
      "type": "integer"
    },
    "maxrate": {
      "description": "Maxrate specifies the video buffer maximum rate in bits per second, from 100000 through 50000000. H.264 and H.265 require bufsize. VP9 requires video_bitrate; AV1 requires CRF mode.",
      "maximum": 50000000,
      "minimum": 100000,
      "type": "integer"
    },
    "per_title": {
      "default": false,
      "description": "PerTitle enables independent content-based bitrate prediction for each part of the video. Analysis uses only the selected trim interval. Defaults to false. Explicit rate-control settings cannot be combined with it.",
      "type": "boolean"
    },
    "video_bitrate": {
      "description": "VideoBitrate specifies the target video bitrate in bits per second, from 1000 through 100000000. Omit it for CRF or per-title encoding.",
      "maximum": 100000000,
      "minimum": 1000,
      "type": "integer"
    },
    "width": {
      "description": "Width specifies the output dimension in pixels. Use -2 or omit one dimension to preserve the source aspect ratio. Explicit dimensions must be 2 to 7680 and even. Omitting both preserves the source dimensions rounded down to even pixels.",
      "maximum": 7680,
      "minimum": -2,
      "type": "integer"
    }
  },
  "type": "object",
  "x-oapi-gen-ignore": true
}
```



```json #/components/schemas/TranscodingAudioSettings
{
  "description": "Audio and timeline settings for file exports.",
  "properties": {
    "audio_bitrate": {
      "default": 128000,
      "description": "AudioBitrate specifies the output audio bitrate in bits per second. Defaults to 128000.",
      "maximum": 512000,
      "minimum": 32000,
      "type": "integer"
    },
    "audio_samplerate": {
      "default": 48000,
      "description": "AudioSamplerate specifies the output sample rate in Hz. Defaults to 48000. WebM Opus audio uses 48000.",
      "enum": [
        8000,
        11025,
        12000,
        16000,
        22050,
        24000,
        32000,
        44100,
        48000,
        64000,
        88200,
        96000
      ],
      "type": "integer"
    },
    "channels": {
      "default": 2,
      "description": "Channels specifies the output channel count. Defaults to stereo. Six channels means 5.1; eight means 7.1.",
      "enum": [
        1,
        2,
        6,
        8
      ],
      "type": "integer"
    },
    "duration": {
      "description": "Duration specifies the requested output length in seconds. Defaults to the remaining source duration and is capped at the source end. Audio-only output must resolve to at least 0.001 seconds after trimming and sample rounding. The accepted interval determines the fixed price.",
      "exclusiveMinimum": 0,
      "type": "number"
    },
    "seek": {
      "description": "Seek specifies the start in source seconds. Defaults to zero and must precede the source end. The accepted interval uses the output frame or sample timeline. Audio-only output must retain at least 0.001 seconds after sample rounding.",
      "minimum": 0,
      "type": "number"
    }
  },
  "type": "object",
  "x-oapi-gen-ignore": true
}
```



```json #/components/schemas/TranscodingMp4Av1
{
  "allOf": [
    {
      "$ref": "#/components/schemas/TranscodingVideoSettings"
    }
  ],
  "description": "mp4_av1 standalone file encoding settings.",
  "properties": {
    "crf": {
      "default": 35,
      "description": "Crf (Constant Rate Factor) controls the quality of the output video.\nLower values mean better quality but larger file size. Range: 16 to 63.\nRecommended values: 16-35 for high quality, 35-45 for good quality, 45-63 for acceptable quality.",
      "examples": [
        35
      ],
      "maximum": 63,
      "minimum": 16,
      "type": "integer"
    },
    "id": {
      "const": "mp4_av1",
      "description": "Id specifies the output format.",
      "type": "string"
    },
    "level": {
      "description": "Level specifies the AV1 level using its two-digit representation, such as 31 for level 3.1. The dimensions, frame rate and rate controls must fit this level. Omitted rate limits resolve to level-compatible defaults.",
      "enum": [
        30,
        31,
        41
      ],
      "examples": [
        41
      ],
      "type": "integer"
    },
    "movflags": {
      "default": "faststart",
      "description": "Movflags specifies MP4 packaging. Defaults to faststart, which places playback metadata before the media.",
      "enum": [
        "faststart"
      ],
      "type": "string"
    },
    "pixfmt": {
      "default": "yuv420p",
      "description": "Pixfmt specifies the output pixel format. Defaults to yuv420p. The selected profile must support it.",
      "enum": [
        "yuv420p",
        "yuv420p10le"
      ],
      "type": "string"
    },
    "preset": {
      "default": "8",
      "description": "Preset controls the encoding efficiency and processing intensity. Lower presets use more\noptimization features, creating smaller files with better quality but requiring more compute time.\nHigher presets encode faster but produce larger files.\n\nPreset ranges:\n- 6-7: Fast encoding for real-time applications (smaller files)\n- 8-10: Balanced efficiency and speed for general use\n- 11-13: Fastest encoding for real-time applications (larger files)",
      "enum": [
        "6",
        "7",
        "8",
        "9",
        "10",
        "11",
        "12",
        "13"
      ],
      "examples": [
        "10"
      ],
      "type": "string"
    },
    "profilev": {
      "description": "Profilev selects the AV1 Main profile. Use pixfmt to select 8-bit or 10-bit output.",
      "enum": [
        "main"
      ],
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "type": "object",
  "unevaluatedProperties": false,
  "x-reject-unknown-fields": true
}
```



```json #/components/schemas/TranscodingVideoSettings
{
  "allOf": [
    {
      "$ref": "#/components/schemas/TranscodingAudioSettings"
    }
  ],
  "description": "Video settings for standalone file exports.",
  "properties": {
    "bufsize": {
      "description": "Bufsize specifies the video buffer size in bits, from 100000 through 50000000. H.264 and H.265 require maxrate. AV1 and VP9 require a bitrate-controlled mode.",
      "maximum": 50000000,
      "minimum": 100000,
      "type": "integer"
    },
    "disable_audio": {
      "description": "DisableAudio omits the audio stream. Defaults to false. A source without audio produces video only.",
      "type": "boolean"
    },
    "disable_video": {
      "description": "DisableVideo selects an audio-only AAC M4A export. Defaults to false. The source must contain audio.",
      "type": "boolean"
    },
    "framerate": {
      "description": "Framerate specifies the output video frame rate. Defaults to the source rate and must be between 0.001 and 240 fps.",
      "maximum": 240,
      "minimum": 0.001,
      "type": "number"
    },
    "gop": {
      "description": "Gop specifies the maximum keyframe interval in frames. Defaults to four seconds at the accepted frame rate, capped at 960 frames.",
      "maximum": 960,
      "minimum": 1,
      "type": "integer"
    },
    "height": {
      "description": "Height specifies the output dimension in pixels. Use -2 or omit one dimension to preserve the source aspect ratio. Explicit dimensions must be 2 to 7680 and even. Omitting both preserves the source dimensions rounded down to even pixels.",
      "maximum": 7680,
      "minimum": -2,
      "type": "integer"
    },
    "maxrate": {
      "description": "Maxrate specifies the video buffer maximum rate in bits per second, from 100000 through 50000000. H.264 and H.265 require bufsize. VP9 requires video_bitrate; AV1 requires CRF mode.",
      "maximum": 50000000,
      "minimum": 100000,
      "type": "integer"
    },
    "per_title": {
      "default": false,
      "description": "PerTitle enables independent content-based bitrate prediction for each part of the video. Analysis uses only the selected trim interval. Defaults to false. Explicit rate-control settings cannot be combined with it.",
      "type": "boolean"
    },
    "video_bitrate": {
      "description": "VideoBitrate specifies the target video bitrate in bits per second, from 1000 through 100000000. Omit it for CRF or per-title encoding.",
      "maximum": 100000000,
      "minimum": 1000,
      "type": "integer"
    },
    "width": {
      "description": "Width specifies the output dimension in pixels. Use -2 or omit one dimension to preserve the source aspect ratio. Explicit dimensions must be 2 to 7680 and even. Omitting both preserves the source dimensions rounded down to even pixels.",
      "maximum": 7680,
      "minimum": -2,
      "type": "integer"
    }
  },
  "type": "object",
  "x-oapi-gen-ignore": true
}
```



```json #/components/schemas/TranscodingAudioSettings
{
  "description": "Audio and timeline settings for file exports.",
  "properties": {
    "audio_bitrate": {
      "default": 128000,
      "description": "AudioBitrate specifies the output audio bitrate in bits per second. Defaults to 128000.",
      "maximum": 512000,
      "minimum": 32000,
      "type": "integer"
    },
    "audio_samplerate": {
      "default": 48000,
      "description": "AudioSamplerate specifies the output sample rate in Hz. Defaults to 48000. WebM Opus audio uses 48000.",
      "enum": [
        8000,
        11025,
        12000,
        16000,
        22050,
        24000,
        32000,
        44100,
        48000,
        64000,
        88200,
        96000
      ],
      "type": "integer"
    },
    "channels": {
      "default": 2,
      "description": "Channels specifies the output channel count. Defaults to stereo. Six channels means 5.1; eight means 7.1.",
      "enum": [
        1,
        2,
        6,
        8
      ],
      "type": "integer"
    },
    "duration": {
      "description": "Duration specifies the requested output length in seconds. Defaults to the remaining source duration and is capped at the source end. Audio-only output must resolve to at least 0.001 seconds after trimming and sample rounding. The accepted interval determines the fixed price.",
      "exclusiveMinimum": 0,
      "type": "number"
    },
    "seek": {
      "description": "Seek specifies the start in source seconds. Defaults to zero and must precede the source end. The accepted interval uses the output frame or sample timeline. Audio-only output must retain at least 0.001 seconds after sample rounding.",
      "minimum": 0,
      "type": "number"
    }
  },
  "type": "object",
  "x-oapi-gen-ignore": true
}
```



```json #/components/schemas/TranscodingWebmVp9
{
  "allOf": [
    {
      "$ref": "#/components/schemas/TranscodingVideoSettings"
    }
  ],
  "description": "webm_vp9 standalone file encoding settings.",
  "properties": {
    "cpu_used": {
      "default": "5",
      "description": "CpuUsed specifies the CPU usage level for VP9 encoding. Range: 0 to 8.\nLower values mean better quality but slower encoding, higher values mean faster encoding but lower quality.\nRecommended values: 0-2 for high quality, 2-4 for good quality, 4-6 for balanced, 6-8 for speed",
      "enum": [
        "0",
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8"
      ],
      "examples": [
        "4"
      ],
      "maxLength": 8,
      "type": "string"
    },
    "crf": {
      "default": 24,
      "description": "Crf (Constant Rate Factor) controls the quality of the output video.\nLower values mean better quality but larger file size. Range: 15 to 35.\nRecommended values: 18-28 for high quality, 23-28 for good quality, 28-35 for acceptable quality.",
      "examples": [
        23
      ],
      "maximum": 35,
      "minimum": 15,
      "type": "integer"
    },
    "id": {
      "const": "webm_vp9",
      "description": "Id specifies the output format.",
      "type": "string"
    },
    "minrate": {
      "description": "Minrate selects VP9 constant bitrate when equal to video_bitrate and maxrate. Other minimum-rate combinations are unsupported.",
      "maximum": 50000000,
      "minimum": 100000,
      "type": "integer"
    },
    "pixfmt": {
      "default": "yuv420p",
      "description": "Pixfmt specifies the output pixel format. Defaults to yuv420p. The selected profile must support it.",
      "enum": [
        "yuv420p",
        "yuv422p",
        "yuv440p",
        "yuv444p",
        "yuv420p10le",
        "yuv422p10le",
        "yuv440p10le",
        "yuv444p10le",
        "yuv420p12le",
        "yuv422p12le",
        "yuv440p12le",
        "yuv444p12le"
      ],
      "type": "string"
    },
    "quality": {
      "default": "realtime",
      "description": "Quality specifies the VP9 encoding quality preset. Valid values:\n- good: Balanced quality preset, good for most applications\n- best: Best quality preset, slower encoding\n- realtime: Fast encoding preset, suitable for live streaming",
      "enum": [
        "good",
        "best",
        "realtime"
      ],
      "examples": [
        "good"
      ],
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "type": "object",
  "unevaluatedProperties": false,
  "x-reject-unknown-fields": true
}
```



```json #/components/schemas/TranscodingVideoSettings
{
  "allOf": [
    {
      "$ref": "#/components/schemas/TranscodingAudioSettings"
    }
  ],
  "description": "Video settings for standalone file exports.",
  "properties": {
    "bufsize": {
      "description": "Bufsize specifies the video buffer size in bits, from 100000 through 50000000. H.264 and H.265 require maxrate. AV1 and VP9 require a bitrate-controlled mode.",
      "maximum": 50000000,
      "minimum": 100000,
      "type": "integer"
    },
    "disable_audio": {
      "description": "DisableAudio omits the audio stream. Defaults to false. A source without audio produces video only.",
      "type": "boolean"
    },
    "disable_video": {
      "description": "DisableVideo selects an audio-only AAC M4A export. Defaults to false. The source must contain audio.",
      "type": "boolean"
    },
    "framerate": {
      "description": "Framerate specifies the output video frame rate. Defaults to the source rate and must be between 0.001 and 240 fps.",
      "maximum": 240,
      "minimum": 0.001,
      "type": "number"
    },
    "gop": {
      "description": "Gop specifies the maximum keyframe interval in frames. Defaults to four seconds at the accepted frame rate, capped at 960 frames.",
      "maximum": 960,
      "minimum": 1,
      "type": "integer"
    },
    "height": {
      "description": "Height specifies the output dimension in pixels. Use -2 or omit one dimension to preserve the source aspect ratio. Explicit dimensions must be 2 to 7680 and even. Omitting both preserves the source dimensions rounded down to even pixels.",
      "maximum": 7680,
      "minimum": -2,
      "type": "integer"
    },
    "maxrate": {
      "description": "Maxrate specifies the video buffer maximum rate in bits per second, from 100000 through 50000000. H.264 and H.265 require bufsize. VP9 requires video_bitrate; AV1 requires CRF mode.",
      "maximum": 50000000,
      "minimum": 100000,
      "type": "integer"
    },
    "per_title": {
      "default": false,
      "description": "PerTitle enables independent content-based bitrate prediction for each part of the video. Analysis uses only the selected trim interval. Defaults to false. Explicit rate-control settings cannot be combined with it.",
      "type": "boolean"
    },
    "video_bitrate": {
      "description": "VideoBitrate specifies the target video bitrate in bits per second, from 1000 through 100000000. Omit it for CRF or per-title encoding.",
      "maximum": 100000000,
      "minimum": 1000,
      "type": "integer"
    },
    "width": {
      "description": "Width specifies the output dimension in pixels. Use -2 or omit one dimension to preserve the source aspect ratio. Explicit dimensions must be 2 to 7680 and even. Omitting both preserves the source dimensions rounded down to even pixels.",
      "maximum": 7680,
      "minimum": -2,
      "type": "integer"
    }
  },
  "type": "object",
  "x-oapi-gen-ignore": true
}
```



```json #/components/schemas/TranscodingAudioSettings
{
  "description": "Audio and timeline settings for file exports.",
  "properties": {
    "audio_bitrate": {
      "default": 128000,
      "description": "AudioBitrate specifies the output audio bitrate in bits per second. Defaults to 128000.",
      "maximum": 512000,
      "minimum": 32000,
      "type": "integer"
    },
    "audio_samplerate": {
      "default": 48000,
      "description": "AudioSamplerate specifies the output sample rate in Hz. Defaults to 48000. WebM Opus audio uses 48000.",
      "enum": [
        8000,
        11025,
        12000,
        16000,
        22050,
        24000,
        32000,
        44100,
        48000,
        64000,
        88200,
        96000
      ],
      "type": "integer"
    },
    "channels": {
      "default": 2,
      "description": "Channels specifies the output channel count. Defaults to stereo. Six channels means 5.1; eight means 7.1.",
      "enum": [
        1,
        2,
        6,
        8
      ],
      "type": "integer"
    },
    "duration": {
      "description": "Duration specifies the requested output length in seconds. Defaults to the remaining source duration and is capped at the source end. Audio-only output must resolve to at least 0.001 seconds after trimming and sample rounding. The accepted interval determines the fixed price.",
      "exclusiveMinimum": 0,
      "type": "number"
    },
    "seek": {
      "description": "Seek specifies the start in source seconds. Defaults to zero and must precede the source end. The accepted interval uses the output frame or sample timeline. Audio-only output must retain at least 0.001 seconds after sample rounding.",
      "minimum": 0,
      "type": "number"
    }
  },
  "type": "object",
  "x-oapi-gen-ignore": true
}
```



```json #/components/schemas/TranscodingCreateStorageParams
{
  "additionalProperties": false,
  "description": "Output storage selection, independent of the Source storage.",
  "properties": {
    "id": {
      "description": "Id specifies a Storage in this Project. Defaults to the Project output storage.",
      "examples": [
        "stor_example"
      ],
      "maxLength": 64,
      "minLength": 4,
      "type": "string"
    },
    "path": {
      "description": "Path specifies the output object path relative to the selected Storage base_prefix. Required for customer storage; generated for Chunkify temporary storage. The extension must match the resolved output format. The combined path may contain at most 1024 bytes.",
      "examples": [
        "exports/video.mp4"
      ],
      "maxLength": 1024,
      "type": "string"
    }
  },
  "type": "object",
  "x-reject-unknown-fields": true
}
```



```json #/components/schemas/TranscodingResponse
{
  "description": "A Project-scoped Transcoding response.",
  "properties": {
    "data": {
      "$ref": "#/components/schemas/Transcoding",
      "description": "Data contains the Transcoding."
    },
    "status": {
      "const": "success",
      "description": "Status is success for a successful request.",
      "type": "string"
    }
  },
  "required": [
    "status",
    "data"
  ],
  "type": "object"
}
```



```json #/components/schemas/Transcoding
{
  "description": "A standalone file-encoding request with its accepted settings and published files.",
  "properties": {
    "created_at": {
      "description": "CreatedAt specifies 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 record 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 the Transcoding is preparing.",
      "format": "date-time",
      "type": "string"
    },
    "error": {
      "$ref": "#/components/schemas/TranscodingError",
      "description": "Error describes why processing failed. Omitted when no processing error exists."
    },
    "expires_at": {
      "description": "ExpiresAt specifies when temporary output files expire. Omitted for customer output Storage and before the Transcoding is ready.",
      "format": "date-time",
      "type": "string"
    },
    "files": {
      "description": "Files contains the published output files and their measured properties, ordered by creation time. Empty until publication. Presigned URLs are refreshed on each read and included in lifecycle webhooks when available.",
      "items": {
        "$ref": "#/components/schemas/TranscodingFile"
      },
      "type": "array"
    },
    "format": {
      "$ref": "#/components/schemas/TranscodingFormat",
      "description": "Format contains the resolved encoding settings accepted at creation, including defaults, dimensions, frame rate and normalized seek and duration. Per-title rate control is resolved during processing. Measured media properties are available in Files."
    },
    "id": {
      "description": "Id uniquely identifies the Transcoding.",
      "type": "string"
    },
    "metadata": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "Metadata contains the string values attached to the Transcoding.",
      "type": "object"
    },
    "processing_stage": {
      "$ref": "#/components/schemas/TranscodingProcessingStage",
      "description": "ProcessingStage specifies the current activity while the status is preparing. Omitted otherwise."
    },
    "progress": {
      "description": "Progress specifies the video encoding percentage. Available once processing starts and after the output is ready. Omitted for audio-only output; 100 requires published output.",
      "maximum": 100,
      "minimum": 0,
      "type": "number"
    },
    "ready_at": {
      "description": "ReadyAt specifies when the output was published. Omitted before the Transcoding is ready.",
      "format": "date-time",
      "type": "string"
    },
    "source_id": {
      "description": "SourceId identifies the original Source. Omitted after Source deletion.",
      "type": "string"
    },
    "status": {
      "$ref": "#/components/schemas/TranscodingStatus",
      "description": "Status reports processing or output expiry."
    },
    "storage": {
      "$ref": "#/components/schemas/TranscodingStorage",
      "description": "Storage contains the resolved output destination."
    },
    "updated_at": {
      "description": "UpdatedAt specifies when the request was last updated.",
      "format": "date-time",
      "type": "string"
    }
  },
  "required": [
    "id",
    "storage",
    "format",
    "status",
    "metadata",
    "files",
    "created_at",
    "updated_at"
  ],
  "type": "object"
}
```



```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/TranscodingError
{
  "description": "A customer-facing Transcoding processing failure.",
  "properties": {
    "code": {
      "description": "Code identifies the processing failure.",
      "type": "string"
    },
    "message": {
      "description": "Message describes the failure without internal worker or provider diagnostics.",
      "type": "string"
    },
    "stage": {
      "$ref": "#/components/schemas/TranscodingProcessingStage",
      "description": "Stage identifies where processing failed."
    }
  },
  "required": [
    "code",
    "stage",
    "message"
  ],
  "type": "object"
}
```



```json #/components/schemas/TranscodingProcessingStage
{
  "description": "ProcessingStage specifies the current preparation activity. queued means the request is waiting for processing capacity.",
  "enum": [
    "queued",
    "starting",
    "encoding",
    "finalizing",
    "uploading"
  ],
  "type": "string"
}
```



```json #/components/schemas/TranscodingFile
{
  "description": "A validated media file published by a Transcoding.",
  "properties": {
    "audio_bitrate": {
      "description": "AudioBitrate specifies measured audio bits per second, or zero when unavailable. Omitted without audio.",
      "type": "integer"
    },
    "audio_codec": {
      "description": "AudioCodec specifies the measured audio codec. Omitted without audio.",
      "type": "string"
    },
    "audio_samplerate": {
      "description": "AudioSamplerate specifies measured audio samples per second. Omitted without audio.",
      "type": "integer"
    },
    "cdn_url": {
      "description": "CdnUrl provides the URL from the Storage CDN configuration. Omitted without a configured CDN or after file expiry.",
      "type": "string"
    },
    "created_at": {
      "description": "CreatedAt records when the validated file was published.",
      "format": "date-time",
      "type": "string"
    },
    "duration": {
      "description": "Duration specifies the measured output duration in seconds.",
      "exclusiveMinimum": 0,
      "type": "number"
    },
    "expires_at": {
      "description": "ExpiresAt specifies when a temporary output expires. Omitted for customer-owned output storage.",
      "format": "date-time",
      "type": "string"
    },
    "height": {
      "description": "Height specifies the measured video height in pixels. Omitted for audio-only files.",
      "type": "integer"
    },
    "id": {
      "description": "Id identifies this published Transcoding file.",
      "type": "string"
    },
    "mime_type": {
      "description": "MimeType specifies the media content type.",
      "type": "string"
    },
    "path": {
      "description": "Path specifies the output path relative to the Storage base_prefix saved when the Transcoding was created. Later Storage prefix changes do not move this file.",
      "type": "string"
    },
    "size": {
      "description": "Size specifies the measured file size in bytes.",
      "minimum": 1,
      "type": "integer"
    },
    "storage_id": {
      "description": "StorageId identifies the output Storage.",
      "type": "string"
    },
    "thumbnail_status": {
      "description": "ThumbnailStatus reports the optional dashboard preview result. Failure does not affect the media file. Omitted for audio-only files.",
      "enum": [
        "ready",
        "failed"
      ],
      "type": "string"
    },
    "thumbnails": {
      "description": "Thumbnails contains available dashboard preview images. Empty for audio-only files, failed previews or expired files.",
      "items": {
        "$ref": "#/components/schemas/TranscodingFileThumbnail"
      },
      "type": "array"
    },
    "transcoding_id": {
      "description": "TranscodingId identifies the Transcoding that produced this file.",
      "type": "string"
    },
    "url": {
      "description": "Url provides a signed download valid for at most ten minutes. Omitted when the file has expired or signing is unavailable.",
      "type": "string"
    },
    "video_bitrate": {
      "description": "VideoBitrate specifies measured video bits per second, or zero when unavailable. Omitted without video.",
      "type": "integer"
    },
    "video_codec": {
      "description": "VideoCodec specifies the measured video codec. Omitted for audio-only files.",
      "type": "string"
    },
    "video_framerate": {
      "description": "VideoFramerate specifies measured video frames per second. Omitted without video.",
      "type": "number"
    },
    "width": {
      "description": "Width specifies the measured video width in pixels. Omitted for audio-only files.",
      "type": "integer"
    }
  },
  "required": [
    "id",
    "transcoding_id",
    "storage_id",
    "path",
    "size",
    "mime_type",
    "duration",
    "thumbnails",
    "created_at"
  ],
  "type": "object"
}
```



```json #/components/schemas/TranscodingFileThumbnail
{
  "description": "An optional dashboard preview of the completed output.",
  "properties": {
    "format": {
      "description": "Format specifies the image encoding.",
      "enum": [
        "jpeg",
        "webp"
      ],
      "type": "string"
    },
    "height": {
      "description": "Height specifies the measured image height in pixels.",
      "type": "integer"
    },
    "size": {
      "description": "Size specifies the measured image size in bytes.",
      "type": "integer"
    },
    "url": {
      "description": "Url provides a signed image URL valid for at most ten minutes.",
      "type": "string"
    },
    "width": {
      "description": "Width specifies the measured image width in pixels.",
      "type": "integer"
    }
  },
  "required": [
    "format",
    "width",
    "height",
    "size",
    "url"
  ],
  "type": "object"
}
```



```json #/components/schemas/TranscodingFormat
{
  "description": "Resolved encoding settings accepted at creation. Only settings applicable to the selected streams and codec are included.",
  "properties": {
    "audio_bitrate": {
      "description": "AudioBitrate specifies the resolved audio bitrate in bits per second. Omitted for video-only output.",
      "maximum": 512000,
      "minimum": 32000,
      "type": "integer"
    },
    "audio_samplerate": {
      "description": "AudioSamplerate specifies the resolved audio samples per second. Omitted for video-only output.",
      "maximum": 96000,
      "minimum": 8000,
      "type": "integer"
    },
    "bufsize": {
      "description": "Bufsize specifies the resolved video buffer size in bits, including codec-level defaults. Omitted when no buffer applies.",
      "maximum": 50000000,
      "minimum": 1,
      "type": "integer"
    },
    "channels": {
      "description": "Channels specifies the resolved audio channel count: 1, 2, 6 or 8. Omitted for video-only output.",
      "maximum": 8,
      "minimum": 1,
      "type": "integer"
    },
    "cpu_used": {
      "description": "CpuUsed specifies the accepted VP9 encoder speed setting from 0 through 8. Omitted for other codecs.",
      "type": "string"
    },
    "crf": {
      "description": "Crf specifies the accepted constant quality. Omitted for bitrate-controlled, per-title and audio-only encoding.",
      "maximum": 63,
      "minimum": 0,
      "type": "integer"
    },
    "disable_audio": {
      "description": "DisableAudio is true for video-only output. Omitted when audio is selected.",
      "type": "boolean"
    },
    "duration": {
      "description": "Duration specifies the accepted output duration in seconds, including normalized trims.",
      "exclusiveMinimum": 0,
      "type": "number"
    },
    "framerate": {
      "description": "Framerate specifies the resolved video frames per second. Omitted for audio-only output.",
      "maximum": 240,
      "minimum": 0.001,
      "type": "number"
    },
    "gop": {
      "description": "Gop specifies the resolved maximum keyframe interval in frames. Omitted for audio-only output.",
      "maximum": 960,
      "minimum": 1,
      "type": "integer"
    },
    "height": {
      "description": "Height specifies the resolved video height in pixels. Omitted for audio-only output.",
      "maximum": 7680,
      "minimum": 2,
      "type": "integer"
    },
    "id": {
      "description": "Id specifies the resolved container and codec selection.",
      "enum": [
        "mp4_h264",
        "mp4_h265",
        "mp4_av1",
        "webm_vp9",
        "m4a_aac"
      ],
      "type": "string"
    },
    "level": {
      "description": "Level specifies the accepted codec level when explicitly selected.",
      "type": "integer"
    },
    "maxrate": {
      "description": "Maxrate specifies the resolved maximum video bitrate in bits per second, including codec-level defaults. Omitted when no maximum applies.",
      "maximum": 100000000,
      "minimum": 1,
      "type": "integer"
    },
    "minrate": {
      "description": "Minrate specifies the accepted minimum video bitrate in bits per second, when configured.",
      "maximum": 50000000,
      "minimum": 1,
      "type": "integer"
    },
    "movflags": {
      "description": "Movflags specifies MP4 packaging. MP4 video exports use faststart.",
      "type": "string"
    },
    "per_title": {
      "description": "PerTitle specifies whether video rate control is selected during content analysis. Omitted for audio-only output.",
      "type": "boolean"
    },
    "pixfmt": {
      "description": "Pixfmt specifies the accepted video pixel format. Omitted for audio-only output.",
      "type": "string"
    },
    "preset": {
      "description": "Preset specifies the accepted codec preset. Omitted when the codec does not use presets.",
      "type": "string"
    },
    "profilev": {
      "description": "Profilev specifies the accepted codec profile when explicitly selected.",
      "type": "string"
    },
    "quality": {
      "description": "Quality specifies the accepted VP9 deadline policy: good, best or realtime. Omitted for other codecs.",
      "type": "string"
    },
    "seek": {
      "description": "Seek specifies the accepted start position in source seconds, normalized to the output timeline.",
      "minimum": 0,
      "type": "number"
    },
    "video_bitrate": {
      "description": "VideoBitrate specifies the accepted video bitrate in bits per second. Omitted for CRF and per-title encoding.",
      "maximum": 100000000,
      "minimum": 1,
      "type": "integer"
    },
    "width": {
      "description": "Width specifies the resolved video width in pixels. Omitted for audio-only output.",
      "maximum": 7680,
      "minimum": 2,
      "type": "integer"
    }
  },
  "required": [
    "id",
    "seek",
    "duration"
  ],
  "type": "object"
}
```



```json #/components/schemas/TranscodingProcessingStage
{
  "description": "ProcessingStage specifies the current preparation activity. queued means the request is waiting for processing capacity.",
  "enum": [
    "queued",
    "starting",
    "encoding",
    "finalizing",
    "uploading"
  ],
  "type": "string"
}
```



```json #/components/schemas/TranscodingStatus
{
  "description": "Status is ready only after the output is validated and published. Temporary output becomes expired when its files are no longer available.",
  "enum": [
    "preparing",
    "ready",
    "failed",
    "cancelled",
    "expired"
  ],
  "type": "string"
}
```



```json #/components/schemas/TranscodingStorage
{
  "description": "The resolved output destination for a Transcoding.",
  "properties": {
    "id": {
      "description": "Id identifies the output Storage.",
      "type": "string"
    },
    "path": {
      "description": "Path specifies the output file path relative to the Storage base_prefix saved at creation.",
      "type": "string"
    }
  },
  "required": [
    "id",
    "path"
  ],
  "type": "object"
}
```



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