publ betaReference (MCP guide)
Open publ console

serial_files_apply

# serial_files_apply

Uploads a series cover, episode thumbnail, home image or home background video from this computer (presigned upload; a link is downloaded to the computer first) in the Serial VOD app (pApp C00006). Returns a completed task to use in the matching editor. Called without confirmToken it previews and returns a confirmToken; repeating the same input with it executes once.

## Inputs

| Field | Required here | Contract |
| --- | --- | --- |
| `purpose` | Yes | one of: `serial-home-image`, `serial-home-background-video`, `serial-episode-thumbnail`, `serial-series-cover` |
| `sectionId` | Yes | When `purpose` is `serial-home-image`: integer; greater than 0 |
| `itemId` | Yes | When `purpose` is `serial-home-image`: integer; greater than 0 |
| `field` | Yes | When `purpose` is `serial-home-image`: `alternativeLogoSrc`, `backgroundDesktopImgSrc`, `backgroundMobileImgSrc`, `bannerImgSrc` |
| `upload` | Yes | When `purpose` is `serial-home-image`: one of: `local-file`, `more-parts`, `complete`, `cancel` (by `kind`); Upload the file from this computer: {kind:"local-file", filename, byteLength, sha256} returns one presigned PUT (size, type and SHA-256 signed) and the console upload screen; send the file, then call again with the same purpose and target and upload {kind:"complete", uploadId, parts:[{partNumber:1, etag}]}. The server never receives the file or downloads a link; download a Google Drive or other link to this computer first. |
| `upload.filename` | Yes | When `purpose` is `serial-home-image` and `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 `purpose` is `serial-home-image` and `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 `purpose` is `serial-home-image` and `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 `purpose` is `serial-home-image` and `upload.kind` is `more-parts`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `upload.fromPart` | Yes | When `purpose` is `serial-home-image` and `upload.kind` is `more-parts`: integer; minimum 1; maximum 10000 |
| `upload.uploadId` | Yes | When `purpose` is `serial-home-image` and `upload.kind` is `complete`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `upload.parts` | Yes | When `purpose` is `serial-home-image` and `upload.kind` is `complete`: array; min items 1; max items 10000 |
| `upload.parts[].partNumber` | Yes | When `purpose` is `serial-home-image` and `upload.kind` is `complete`: integer; minimum 1; maximum 10000 |
| `upload.parts[].etag` | Yes | When `purpose` is `serial-home-image` and `upload.kind` is `complete`: string; min length 1; max length 200 |
| `upload.measured` | No | When `purpose` is `serial-home-image` and `upload.kind` is `complete`: object; What the video measures on this computer, read with measureCommand. |
| `upload.measured.durationSeconds` | Yes | When `purpose` is `serial-home-image` and `upload.kind` is `complete`: number; maximum 1000000; greater than 0; Video duration in seconds (ffprobe format.duration). |
| `upload.measured.frameRate` | Yes | When `purpose` is `serial-home-image` and `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 `purpose` is `serial-home-image` and `upload.kind` is `complete`: integer; maximum 100000; greater than 0 |
| `upload.measured.height` | Yes | When `purpose` is `serial-home-image` and `upload.kind` is `complete`: integer; maximum 100000; greater than 0 |
| `upload.measured.frameRateMode` | No | When `purpose` is `serial-home-image` and `upload.kind` is `complete`: `CFR`, `VFR`; Constant or variable frame rate, when the tool reports it. |
| `upload.measured.minFrameRate` | No | When `purpose` is `serial-home-image` and `upload.kind` is `complete`: number; maximum 1000; greater than 0 |
| `upload.measured.maxFrameRate` | No | When `purpose` is `serial-home-image` and `upload.kind` is `complete`: number; maximum 1000; greater than 0 |
| `upload.uploadId` | Yes | When `purpose` is `serial-home-image` and `upload.kind` is `cancel`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `confirmToken` | No | When `purpose` is `serial-home-image`: 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. |
| `sectionId` | Yes | When `purpose` is `serial-home-background-video`: integer; greater than 0 |
| `itemId` | Yes | When `purpose` is `serial-home-background-video`: integer; greater than 0 |
| `field` | Yes | When `purpose` is `serial-home-background-video`: `backgroundVideoSrc` |
| `upload` | Yes | When `purpose` is `serial-home-background-video`: one of: `local-file`, `more-parts`, `complete`, `cancel` (by `kind`); Upload the file from this computer: {kind:"local-file", filename, byteLength, sha256} returns one presigned PUT (size, type and SHA-256 signed) and the console upload screen; send the file, then call again with the same purpose and target and upload {kind:"complete", uploadId, parts:[{partNumber:1, etag}]}. The server never receives the file or downloads a link; download a Google Drive or other link to this computer first. |
| `upload.filename` | Yes | When `purpose` is `serial-home-background-video` and `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 `purpose` is `serial-home-background-video` and `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 `purpose` is `serial-home-background-video` and `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 `purpose` is `serial-home-background-video` and `upload.kind` is `more-parts`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `upload.fromPart` | Yes | When `purpose` is `serial-home-background-video` and `upload.kind` is `more-parts`: integer; minimum 1; maximum 10000 |
| `upload.uploadId` | Yes | When `purpose` is `serial-home-background-video` and `upload.kind` is `complete`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `upload.parts` | Yes | When `purpose` is `serial-home-background-video` and `upload.kind` is `complete`: array; min items 1; max items 10000 |
| `upload.parts[].partNumber` | Yes | When `purpose` is `serial-home-background-video` and `upload.kind` is `complete`: integer; minimum 1; maximum 10000 |
| `upload.parts[].etag` | Yes | When `purpose` is `serial-home-background-video` and `upload.kind` is `complete`: string; min length 1; max length 200 |
| `upload.measured` | No | When `purpose` is `serial-home-background-video` and `upload.kind` is `complete`: object; What the video measures on this computer, read with measureCommand. |
| `upload.measured.durationSeconds` | Yes | When `purpose` is `serial-home-background-video` and `upload.kind` is `complete`: number; maximum 1000000; greater than 0; Video duration in seconds (ffprobe format.duration). |
| `upload.measured.frameRate` | Yes | When `purpose` is `serial-home-background-video` and `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 `purpose` is `serial-home-background-video` and `upload.kind` is `complete`: integer; maximum 100000; greater than 0 |
| `upload.measured.height` | Yes | When `purpose` is `serial-home-background-video` and `upload.kind` is `complete`: integer; maximum 100000; greater than 0 |
| `upload.measured.frameRateMode` | No | When `purpose` is `serial-home-background-video` and `upload.kind` is `complete`: `CFR`, `VFR`; Constant or variable frame rate, when the tool reports it. |
| `upload.measured.minFrameRate` | No | When `purpose` is `serial-home-background-video` and `upload.kind` is `complete`: number; maximum 1000; greater than 0 |
| `upload.measured.maxFrameRate` | No | When `purpose` is `serial-home-background-video` and `upload.kind` is `complete`: number; maximum 1000; greater than 0 |
| `upload.uploadId` | Yes | When `purpose` is `serial-home-background-video` and `upload.kind` is `cancel`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `video` | No | When `purpose` is `serial-home-background-video`: object; Background video only: what the file measures on this computer with measureCommand (ffprobe), including the container, videoCodec and audioCodec. |
| `video.durationSeconds` | Yes | When `purpose` is `serial-home-background-video`: number; maximum 1000000; greater than 0; Video duration in seconds (ffprobe format.duration). |
| `video.frameRate` | Yes | When `purpose` is `serial-home-background-video`: number; maximum 1000; greater than 0; Frames per second (ffprobe avg_frame_rate, for example 30000/1001 = 29.97). |
| `video.width` | Yes | When `purpose` is `serial-home-background-video`: integer; maximum 100000; greater than 0 |
| `video.height` | Yes | When `purpose` is `serial-home-background-video`: integer; maximum 100000; greater than 0 |
| `video.frameRateMode` | No | When `purpose` is `serial-home-background-video`: `CFR`, `VFR`; Constant or variable frame rate, when the tool reports it. |
| `video.minFrameRate` | No | When `purpose` is `serial-home-background-video`: number; maximum 1000; greater than 0 |
| `video.maxFrameRate` | No | When `purpose` is `serial-home-background-video`: number; maximum 1000; greater than 0 |
| `video.videoCodec` | Yes | When `purpose` is `serial-home-background-video`: string; min length 1; max length 40; The video stream codec_name from ffprobe (h264 for H.264/AVC). |
| `video.audioCodec` | Yes | When `purpose` is `serial-home-background-video`: string; min length 1; max length 40 or null; The audio stream codec_name from ffprobe (aac), or null when the file has no audio. |
| `video.container` | Yes | When `purpose` is `serial-home-background-video`: `MPEG-4`, `QuickTime`; The container: QuickTime when ffprobe format_tags.major_brand is "qt  ", otherwise MPEG-4. |
| `confirmToken` | No | When `purpose` is `serial-home-background-video`: 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. |
| `postId` | Yes | When `purpose` is `serial-episode-thumbnail`: integer; greater than 0 |
| `upload` | Yes | When `purpose` is `serial-episode-thumbnail`: one of: `local-file`, `more-parts`, `complete`, `cancel` (by `kind`); Upload the file from this computer: {kind:"local-file", filename, byteLength, sha256} returns one presigned PUT (size, type and SHA-256 signed) and the console upload screen; send the file, then call again with the same purpose and target and upload {kind:"complete", uploadId, parts:[{partNumber:1, etag}]}. The server never receives the file or downloads a link; download a Google Drive or other link to this computer first. |
| `upload.filename` | Yes | When `purpose` is `serial-episode-thumbnail` and `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 `purpose` is `serial-episode-thumbnail` and `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 `purpose` is `serial-episode-thumbnail` and `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 `purpose` is `serial-episode-thumbnail` and `upload.kind` is `more-parts`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `upload.fromPart` | Yes | When `purpose` is `serial-episode-thumbnail` and `upload.kind` is `more-parts`: integer; minimum 1; maximum 10000 |
| `upload.uploadId` | Yes | When `purpose` is `serial-episode-thumbnail` and `upload.kind` is `complete`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `upload.parts` | Yes | When `purpose` is `serial-episode-thumbnail` and `upload.kind` is `complete`: array; min items 1; max items 10000 |
| `upload.parts[].partNumber` | Yes | When `purpose` is `serial-episode-thumbnail` and `upload.kind` is `complete`: integer; minimum 1; maximum 10000 |
| `upload.parts[].etag` | Yes | When `purpose` is `serial-episode-thumbnail` and `upload.kind` is `complete`: string; min length 1; max length 200 |
| `upload.measured` | No | When `purpose` is `serial-episode-thumbnail` and `upload.kind` is `complete`: object; What the video measures on this computer, read with measureCommand. |
| `upload.measured.durationSeconds` | Yes | When `purpose` is `serial-episode-thumbnail` and `upload.kind` is `complete`: number; maximum 1000000; greater than 0; Video duration in seconds (ffprobe format.duration). |
| `upload.measured.frameRate` | Yes | When `purpose` is `serial-episode-thumbnail` and `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 `purpose` is `serial-episode-thumbnail` and `upload.kind` is `complete`: integer; maximum 100000; greater than 0 |
| `upload.measured.height` | Yes | When `purpose` is `serial-episode-thumbnail` and `upload.kind` is `complete`: integer; maximum 100000; greater than 0 |
| `upload.measured.frameRateMode` | No | When `purpose` is `serial-episode-thumbnail` and `upload.kind` is `complete`: `CFR`, `VFR`; Constant or variable frame rate, when the tool reports it. |
| `upload.measured.minFrameRate` | No | When `purpose` is `serial-episode-thumbnail` and `upload.kind` is `complete`: number; maximum 1000; greater than 0 |
| `upload.measured.maxFrameRate` | No | When `purpose` is `serial-episode-thumbnail` and `upload.kind` is `complete`: number; maximum 1000; greater than 0 |
| `upload.uploadId` | Yes | When `purpose` is `serial-episode-thumbnail` and `upload.kind` is `cancel`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `confirmToken` | No | When `purpose` is `serial-episode-thumbnail`: 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. |
| `seriesId` | Yes | When `purpose` is `serial-series-cover`: integer; greater than 0 |
| `upload` | Yes | When `purpose` is `serial-series-cover`: one of: `local-file`, `more-parts`, `complete`, `cancel` (by `kind`); Upload the file from this computer: {kind:"local-file", filename, byteLength, sha256} returns one presigned PUT (size, type and SHA-256 signed) and the console upload screen; send the file, then call again with the same purpose and target and upload {kind:"complete", uploadId, parts:[{partNumber:1, etag}]}. The server never receives the file or downloads a link; download a Google Drive or other link to this computer first. |
| `upload.filename` | Yes | When `purpose` is `serial-series-cover` and `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 `purpose` is `serial-series-cover` and `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 `purpose` is `serial-series-cover` and `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 `purpose` is `serial-series-cover` and `upload.kind` is `more-parts`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `upload.fromPart` | Yes | When `purpose` is `serial-series-cover` and `upload.kind` is `more-parts`: integer; minimum 1; maximum 10000 |
| `upload.uploadId` | Yes | When `purpose` is `serial-series-cover` and `upload.kind` is `complete`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `upload.parts` | Yes | When `purpose` is `serial-series-cover` and `upload.kind` is `complete`: array; min items 1; max items 10000 |
| `upload.parts[].partNumber` | Yes | When `purpose` is `serial-series-cover` and `upload.kind` is `complete`: integer; minimum 1; maximum 10000 |
| `upload.parts[].etag` | Yes | When `purpose` is `serial-series-cover` and `upload.kind` is `complete`: string; min length 1; max length 200 |
| `upload.measured` | No | When `purpose` is `serial-series-cover` and `upload.kind` is `complete`: object; What the video measures on this computer, read with measureCommand. |
| `upload.measured.durationSeconds` | Yes | When `purpose` is `serial-series-cover` and `upload.kind` is `complete`: number; maximum 1000000; greater than 0; Video duration in seconds (ffprobe format.duration). |
| `upload.measured.frameRate` | Yes | When `purpose` is `serial-series-cover` and `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 `purpose` is `serial-series-cover` and `upload.kind` is `complete`: integer; maximum 100000; greater than 0 |
| `upload.measured.height` | Yes | When `purpose` is `serial-series-cover` and `upload.kind` is `complete`: integer; maximum 100000; greater than 0 |
| `upload.measured.frameRateMode` | No | When `purpose` is `serial-series-cover` and `upload.kind` is `complete`: `CFR`, `VFR`; Constant or variable frame rate, when the tool reports it. |
| `upload.measured.minFrameRate` | No | When `purpose` is `serial-series-cover` and `upload.kind` is `complete`: number; maximum 1000; greater than 0 |
| `upload.measured.maxFrameRate` | No | When `purpose` is `serial-series-cover` and `upload.kind` is `complete`: number; maximum 1000; greater than 0 |
| `upload.uploadId` | Yes | When `purpose` is `serial-series-cover` and `upload.kind` is `cancel`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `confirmToken` | No | When `purpose` is `serial-series-cover`: 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. |