# Copy ## Upload videos from a URL `client.Stream.Copy.New(ctx, params) (*Video, error)` **post** `/accounts/{account_id}/stream/copy` Uploads a video to Stream from a provided URL. ### Parameters - `params CopyNewParams` - `AccountID param.Field[string]` Path param: The account identifier tag. - `URL param.Field[string]` Body param: A video's URL. The server must be publicly routable and support `HTTP HEAD` requests and `HTTP GET` range requests. The server should respond to `HTTP HEAD` requests with a `content-range` header that includes the size of the file. - `AllowedOrigins param.Field[[]AllowedOrigins]` Body param: Lists the origins allowed to display the video. Enter allowed origin domains in an array and use `*` for wildcard subdomains. Empty arrays allow the video to be viewed on any origin. - `Creator param.Field[string]` Body param: A user-defined identifier for the media creator. - `Meta param.Field[unknown]` Body param: A user modifiable key-value store used to reference other systems of record for managing videos. - `RequireSignedURLs param.Field[bool]` Body param: Indicates whether the video can be a accessed using the UID. When set to `true`, a signed token must be generated with a signing key to view the video. - `ScheduledDeletion param.Field[Time]` Body param: Indicates the date and time at which the video will be deleted. Omit the field to indicate no change, or include with a `null` value to remove an existing scheduled deletion. If specified, must be at least 30 days from upload time. - `ThumbnailTimestampPct param.Field[float64]` Body param: The timestamp for a thumbnail image calculated as a percentage value of the video's duration. To convert from a second-wise timestamp to a percentage, divide the desired timestamp by the total duration of the video. If this value is not set, the default thumbnail image is taken from 0s of the video. - `Watermark param.Field[CopyNewParamsWatermark]` Body param - `UID string` The unique identifier for the watermark profile. - `UploadCreator param.Field[string]` Header param: A user-defined identifier for the media creator. ### Returns - `type Video struct{…}` - `AllowedOrigins []AllowedOrigins` Lists the origins allowed to display the video. Enter allowed origin domains in an array and use `*` for wildcard subdomains. Empty arrays allow the video to be viewed on any origin. - `Created Time` The date and time the media item was created. - `Creator string` A user-defined identifier for the media creator. - `Duration float64` The duration of the video in seconds. A value of `-1` means the duration is unknown. The duration becomes available after the upload and before the video is ready. - `Input VideoInput` - `Height int64` The video height in pixels. A value of `-1` means the height is unknown. The value becomes available after the upload and before the video is ready. - `Width int64` The video width in pixels. A value of `-1` means the width is unknown. The value becomes available after the upload and before the video is ready. - `LiveInput string` The live input ID used to upload a video with Stream Live. - `MaxDurationSeconds int64` The maximum duration in seconds for a video upload. Can be set for a video that is not yet uploaded to limit its duration. Uploads that exceed the specified duration will fail during processing. A value of `-1` means the value is unknown. - `Meta unknown` A user modifiable key-value store used to reference other systems of record for managing videos. - `Modified Time` The date and time the media item was last modified. - `Playback VideoPlayback` - `Dash string` DASH Media Presentation Description for the video. - `Hls string` The HLS manifest for the video. - `Preview string` The video's preview page URI. This field is omitted until encoding is complete. - `ReadyToStream bool` Indicates whether the video is playable. The field is empty if the video is not ready for viewing or the live stream is still in progress. - `ReadyToStreamAt Time` Indicates the time at which the video became playable. The field is empty if the video is not ready for viewing or the live stream is still in progress. - `RequireSignedURLs bool` Indicates whether the video can be a accessed using the UID. When set to `true`, a signed token must be generated with a signing key to view the video. - `ScheduledDeletion Time` Indicates the date and time at which the video will be deleted. Omit the field to indicate no change, or include with a `null` value to remove an existing scheduled deletion. If specified, must be at least 30 days from upload time. - `Size float64` The size of the media item in bytes. - `Status VideoStatus` Specifies a detailed status for a video. If the `state` is `inprogress` or `error`, the `step` field returns `encoding` or `manifest`. If the `state` is `inprogress`, `pctComplete` returns a number between 0 and 100 to indicate the approximate percent of completion. If the `state` is `error`, `errorReasonCode` and `errorReasonText` provide additional details. - `ErrorReasonCode string` Specifies why the video failed to encode. This field is empty if the video is not in an `error` state. Preferred for programmatic use. - `ErrorReasonText string` Specifies why the video failed to encode using a human readable error message in English. This field is empty if the video is not in an `error` state. - `PctComplete string` Indicates the progress as a percentage between 0 and 100. - `State VideoStatusState` Specifies the processing status for all quality levels for a video. - `const VideoStatusStatePendingupload VideoStatusState = "pendingupload"` - `const VideoStatusStateDownloading VideoStatusState = "downloading"` - `const VideoStatusStateQueued VideoStatusState = "queued"` - `const VideoStatusStateInprogress VideoStatusState = "inprogress"` - `const VideoStatusStateReady VideoStatusState = "ready"` - `const VideoStatusStateError VideoStatusState = "error"` - `const VideoStatusStateLiveInprogress VideoStatusState = "live-inprogress"` - `Thumbnail string` The media item's thumbnail URI. This field is omitted until encoding is complete. - `ThumbnailTimestampPct float64` The timestamp for a thumbnail image calculated as a percentage value of the video's duration. To convert from a second-wise timestamp to a percentage, divide the desired timestamp by the total duration of the video. If this value is not set, the default thumbnail image is taken from 0s of the video. - `UID string` A Cloudflare-generated unique identifier for a media item. - `Uploaded Time` The date and time the media item was uploaded. - `UploadExpiry Time` The date and time when the video upload URL is no longer valid for direct user uploads. - `Watermark Watermark` - `Created Time` The date and a time a watermark profile was created. - `DownloadedFrom string` The source URL for a downloaded image. If the watermark profile was created via direct upload, this field is null. - `Height int64` The height of the image in pixels. - `Name string` A short description of the watermark profile. - `Opacity float64` The translucency of the image. A value of `0.0` makes the image completely transparent, and `1.0` makes the image completely opaque. Note that if the image is already semi-transparent, setting this to `1.0` will not make the image completely opaque. - `Padding float64` The whitespace between the adjacent edges (determined by position) of the video and the image. `0.0` indicates no padding, and `1.0` indicates a fully padded video width or length, as determined by the algorithm. - `Position string` The location of the image. Valid positions are: `upperRight`, `upperLeft`, `lowerLeft`, `lowerRight`, and `center`. Note that `center` ignores the `padding` parameter. - `Scale float64` The size of the image relative to the overall size of the video. This parameter will adapt to horizontal and vertical videos automatically. `0.0` indicates no scaling (use the size of the image as-is), and `1.0`fills the entire video. - `Size float64` The size of the image in bytes. - `UID string` The unique identifier for a watermark profile. - `Width int64` The width of the image in pixels. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/option" "github.com/cloudflare/cloudflare-go/stream" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) video, err := client.Stream.Copy.New(context.TODO(), stream.CopyNewParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), URL: cloudflare.F("https://example.com/myvideo.mp4"), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", video.UID) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": { "allowedOrigins": [ "example.com" ], "created": "2014-01-02T02:20:00Z", "creator": "creator-id_abcde12345", "duration": 0, "input": { "height": 0, "width": 0 }, "liveInput": "fc0a8dc887b16759bfd9ad922230a014", "maxDurationSeconds": 1, "meta": { "name": "video12345.mp4" }, "modified": "2014-01-02T02:20:00Z", "playback": { "dash": "https://customer-m033z5x00ks6nunl.cloudflarestream.com/ea95132c15732412d22c1476fa83f27a/manifest/video.mpd", "hls": "https://customer-m033z5x00ks6nunl.cloudflarestream.com/ea95132c15732412d22c1476fa83f27a/manifest/video.m3u8" }, "preview": "https://customer-m033z5x00ks6nunl.cloudflarestream.com/ea95132c15732412d22c1476fa83f27a/watch", "readyToStream": true, "readyToStreamAt": "2014-01-02T02:20:00Z", "requireSignedURLs": true, "scheduledDeletion": "2014-01-02T02:20:00Z", "size": 4190963, "status": { "errorReasonCode": "ERR_NON_VIDEO", "errorReasonText": "The file was not recognized as a valid video file.", "pctComplete": "pctComplete", "state": "inprogress" }, "thumbnail": "https://customer-m033z5x00ks6nunl.cloudflarestream.com/ea95132c15732412d22c1476fa83f27a/thumbnails/thumbnail.jpg", "thumbnailTimestampPct": 0.529241, "uid": "ea95132c15732412d22c1476fa83f27a", "uploaded": "2014-01-02T02:20:00Z", "uploadExpiry": "2014-01-02T02:20:00Z", "watermark": { "created": "2014-01-02T02:20:00Z", "downloadedFrom": "https://company.com/logo.png", "height": 0, "name": "Marketing Videos", "opacity": 0.75, "padding": 0.1, "position": "center", "scale": 0.1, "size": 29472, "uid": "ea95132c15732412d22c1476fa83f27a", "width": 0 } } } ```