Upload
Media never goes through the API origin as raw bytes. Request a presigned URL, PUT the file to S3, then pass the returned taskId into client.jobs.createJob().
Request a URL
The JSON body and PresignUploadResponse fields are in the API reference. The URL expires after expiresIn seconds (300 by default).
PUT the file
The Content-Type on the PUT must match the contentType you presigned. A mismatch is a 403 from S3.
Formats
Common, well-tested types:
Any image/* or video/* MIME type is accepted. The type you presign with is the type your PUT must send.