publ betaReference (MCP guide)
Open publ console

ott_trailer_upload_apply

# ott_trailer_upload_apply

Uploads the trailer of one title and saves it to the title, as the title screen does in the OTT app (pApp C00002). The file goes from this computer to storage: start with upload local-file (filename, byteLength) to get presigned part URLs, PUT the parts, measure the file with the given ffprobe command, then complete with the part ETags and video {durationSeconds, frameRate, width, height, videoCodec, audioCodec}. Every answer carries the console title screen. Deleting or restoring a trailer stays in ott_titles_apply. Called without confirmToken it previews and returns a confirmToken; repeating the same input with it executes once.

## Inputs

| Field | Required here | Contract |
| --- | --- | --- |
| `target` | Yes | object |
| `target.kind` | Yes | `series-trailer` |
| `target.seriesId` | Yes | integer; greater than 0; The OTT title whose trailer is uploaded. |
| `upload` | Yes | one of: `local-file`, `more-parts`, `complete`, `cancel` (by `kind`) |
| `upload.filename` | Yes | When `upload.kind` is `local-file`: string; min length 1; max length 240; pattern `^[^/\\:\x00-\x1f\x7f]+$`; The name of the file on this computer, with its extension. |
| `upload.byteLength` | Yes | When `upload.kind` is `local-file`: integer; greater than 0; The exact file size in bytes (for example from `wc -c < FILE` or `stat`). |
| `upload.sha256` | No | When `upload.kind` is `local-file`: string; pattern `^[0-9a-f]{64}$`; The SHA-256 of the file in lowercase hex (shasum -a 256 FILE). Required when the upload answers UPLOAD_CHECKSUM_REQUIRED. |
| `upload.uploadId` | Yes | When `upload.kind` is `more-parts`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `upload.fromPart` | Yes | When `upload.kind` is `more-parts`: integer; minimum 1; maximum 10000 |
| `upload.uploadId` | Yes | When `upload.kind` is `complete`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `upload.parts` | Yes | When `upload.kind` is `complete`: array; min items 1; max items 10000 |
| `upload.parts[].partNumber` | Yes | When `upload.kind` is `complete`: integer; minimum 1; maximum 10000 |
| `upload.parts[].etag` | Yes | When `upload.kind` is `complete`: string; min length 1; max length 200 |
| `upload.measured` | No | When `upload.kind` is `complete`: object; What the video measures on this computer, read with measureCommand. |
| `upload.measured.durationSeconds` | Yes | When `upload.kind` is `complete`: number; maximum 1000000; greater than 0; Video duration in seconds (ffprobe format.duration). |
| `upload.measured.frameRate` | Yes | When `upload.kind` is `complete`: number; maximum 1000; greater than 0; Frames per second (ffprobe avg_frame_rate, for example 30000/1001 = 29.97). |
| `upload.measured.width` | Yes | When `upload.kind` is `complete`: integer; maximum 100000; greater than 0 |
| `upload.measured.height` | Yes | When `upload.kind` is `complete`: integer; maximum 100000; greater than 0 |
| `upload.measured.frameRateMode` | No | When `upload.kind` is `complete`: `CFR`, `VFR`; Constant or variable frame rate, when the tool reports it. |
| `upload.measured.minFrameRate` | No | When `upload.kind` is `complete`: number; maximum 1000; greater than 0 |
| `upload.measured.maxFrameRate` | No | When `upload.kind` is `complete`: number; maximum 1000; greater than 0 |
| `upload.uploadId` | Yes | When `upload.kind` is `cancel`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `video` | No | object |
| `video.durationSeconds` | Yes | number; maximum 1000000; greater than 0; Video duration in seconds (ffprobe format.duration). |
| `video.frameRate` | Yes | number; maximum 1000; greater than 0; Frames per second (ffprobe avg_frame_rate, for example 30000/1001 = 29.97). |
| `video.width` | Yes | integer; maximum 100000; greater than 0 |
| `video.height` | Yes | integer; maximum 100000; greater than 0 |
| `video.frameRateMode` | No | `CFR`, `VFR`; Constant or variable frame rate, when the tool reports it. |
| `video.minFrameRate` | No | number; maximum 1000; greater than 0 |
| `video.maxFrameRate` | No | number; maximum 1000; greater than 0 |
| `video.videoCodec` | No | string; min length 1; max length 40; OTT title trailer only: the video codec_name from ffprobe (h264). |
| `video.audioCodec` | No | string; min length 1; max length 40 or null; OTT title trailer only: the audio codec_name from ffprobe (aac), or null without audio. |
| `thumbnailImageTaskId` | No | string; pattern `^[A-Za-z0-9_-]{8,80}$`; Course only: a completed course-video-thumbnail task used as the video thumbnail. |
| `confirmToken` | No | string; pattern `^ct[a-f\d]{32}$`; The confirmToken from this tool's preview result. Omit it to preview; repeat the same input with it to execute. |