---
title: Upload videos via direct upload URLs
---

[Skip to content](#_top)

[API Reference](https://developers.cloudflare.com/api/go)

[Stream](https://developers.cloudflare.com/api/go/resources/stream)

[Direct Upload](https://developers.cloudflare.com/api/go/resources/stream/subresources/direct_upload)

Copy Markdown

Open in **Claude**Open in **ChatGPT**Open in **Cursor**

---

**Copy Markdown****View as Markdown**

# Upload videos via direct upload URLs

client.Stream.DirectUpload.New(ctx, params) (\*[DirectUploadNewResponse](<https://developers.cloudflare.com/api/go/resources/stream#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)>), error)

POST/accounts/{account\_id}/stream/direct\_upload

Creates a direct upload endpoint that allows an end-user to upload a video without an API key.

##### Security

<details>

<summary>API Token</summary>



The preferred authorization scheme for interacting with the Cloudflare API. <a href="https://developers.cloudflare.com/fundamentals/api/get-started/create-token/">Create a token</a>.

**Example:**<code>Authorization: Bearer Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY</code>

</details>

<details>

<summary>API Email + API Key</summary>



The previous authorization scheme for interacting with the Cloudflare API, used in conjunction with a Global API key.

**Example:**<code>X-Auth-Email: user@example.com</code>

The previous authorization scheme for interacting with the Cloudflare API. When possible, use API tokens instead of Global API keys.

**Example:**<code>X-Auth-Key: 144c9defac04969c7bfad8efaa8ea194</code>

</details>

##### Accepted Permissions (at least one required)

`Stream Write`

##### ParametersExpand Collapse

<details>

<summary>

params DirectUploadNewParams

</summary>

AccountID param.Field\[string]

Path param: The account identifier tag.

maxLength32

<a href="#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default%20%3E%20(param)%20account_id">Link to this property</a>

MaxDurationSeconds param.Field\[int64]

Body param: 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 <code>-1</code> means the value is unknown.

maximum36000

minimum1

<a href="#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default%20%3E%20(param)%20maxDurationSeconds">Link to this property</a>

AllowedOrigins param.Field\[\[]<a href="https://developers.cloudflare.com/api/go/resources/stream#(resource)%20stream%20%3E%20(model)%20allowed_origins%20%3E%20(schema)">AllowedOrigins</a>]Optional

Body param: Lists the origins allowed to display the video. Enter allowed origin domains in an array and use <code>*</code> for wildcard subdomains. Empty arrays allow the video to be viewed on any origin.

<a href="#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default%20%3E%20(param)%20allowedOrigins">Link to this property</a>

Creator param.Field\[string]Optional

Body param: A user-defined identifier for the media creator.

maxLength64

<a href="#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default%20%3E%20(param)%20creator">Link to this property</a>

Expiry param.Field\[<a href="https://developers.cloudflare.com/api/go/resources/stream/subresources/direct_upload/methods/create#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default%20%3E%20(param)%20expiry%20%3E%20(schema)">Time</a>]Optional

Body param: The date and time after upload when videos will not be accepted.

formatdate-time

<a href="#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default%20%3E%20(param)%20expiry">Link to this property</a>

Meta param.Field\[unknown]Optional

Body param: A user modifiable key-value store used to reference other systems of record for managing videos.

<a href="#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default%20%3E%20(param)%20meta">Link to this property</a>

RequireSignedURLs param.Field\[bool]Optional

Body param: Indicates whether the video can be a accessed using the UID. When set to <code>true</code>, a signed token must be generated with a signing key to view the video.

<a href="#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default%20%3E%20(param)%20requireSignedURLs">Link to this property</a>

ScheduledDeletion param.Field\[<a href="https://developers.cloudflare.com/api/go/resources/stream/subresources/direct_upload/methods/create#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default%20%3E%20(param)%20scheduledDeletion%20%3E%20(schema)">Time</a>]Optional

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 <code>null</code> value to remove an existing scheduled deletion. If specified, must be at least 30 days from upload time.

formatdate-time

<a href="#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default%20%3E%20(param)%20scheduledDeletion">Link to this property</a>

ThumbnailTimestampPct param.Field\[float64]Optional

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.

maximum1

minimum0

<a href="#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default%20%3E%20(param)%20thumbnailTimestampPct">Link to this property</a>

<details>

<summary>

Watermark param.Field\[<a href="https://developers.cloudflare.com/api/go/resources/stream/subresources/direct_upload/methods/create#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default%20%3E%20(param)%20watermark%20%3E%20(schema)">DirectUploadNewParamsWatermark</a>]Optional

Body param

</summary>

UID stringOptional

The unique identifier for the watermark profile.

maxLength32

<a href="#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default%20%3E%20(param)%20watermark%20%3E%20(schema)%20%3E%20(property)%20uid">Link to this property</a>

</details>

<a href="#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default%20%3E%20(param)%20watermark">Link to this property</a>

UploadCreator param.Field\[string]Optional

Header param: A user-defined identifier for the media creator.

maxLength64

<a href="#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default%20%3E%20(param)%20Upload-Creator">Link to this property</a>

</details>

[Link to this property](<#(resource)%20stream.direct_upload%20%3E%20(method)%20create%20%3E%20(params)%20default>)

##### ReturnsExpand Collapse

<details>

<summary>

type DirectUploadNewResponse struct{…}

</summary>

ScheduledDeletion TimeOptional

Indicates the date and time at which the video will be deleted. Omit the field to indicate no change, or include with a <code>null</code> value to remove an existing scheduled deletion. If specified, must be at least 30 days from upload time.

formatdate-time

<a href="#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)%20%3E%20(property)%20scheduledDeletion">Link to this property</a>

UID stringOptional

A Cloudflare-generated unique identifier for a media item.

maxLength32

<a href="#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)%20%3E%20(property)%20uid">Link to this property</a>

UploadURL stringOptional

The URL an unauthenticated upload can use for a single <code>HTTP POST multipart/form-data</code> request.

<a href="#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)%20%3E%20(property)%20uploadURL">Link to this property</a>

<details>

<summary>

Watermark <a href="https://developers.cloudflare.com/api/go/resources/stream#(resource)%20stream.watermarks%20%3E%20(model)%20watermark%20%3E%20(schema)">Watermark</a>Optional

</summary>

Created TimeOptional

The date and a time a watermark profile was created.

formatdate-time

<a href="#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)%20%3E%20(property)%20watermark%20%2B%20(resource)%20stream.watermarks%20%3E%20(model)%20watermark%20%3E%20(schema)%20%3E%20(property)%20created">Link to this property</a>

DownloadedFrom stringOptional

The source URL for a downloaded image. If the watermark profile was created via direct upload, this field is null.

<a href="#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)%20%3E%20(property)%20watermark%20%2B%20(resource)%20stream.watermarks%20%3E%20(model)%20watermark%20%3E%20(schema)%20%3E%20(property)%20downloadedFrom">Link to this property</a>

Height int64Optional

The height of the image in pixels.

<a href="#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)%20%3E%20(property)%20watermark%20%2B%20(resource)%20stream.watermarks%20%3E%20(model)%20watermark%20%3E%20(schema)%20%3E%20(property)%20height">Link to this property</a>

Name stringOptional

A short description of the watermark profile.

<a href="#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)%20%3E%20(property)%20watermark%20%2B%20(resource)%20stream.watermarks%20%3E%20(model)%20watermark%20%3E%20(schema)%20%3E%20(property)%20name">Link to this property</a>

Opacity float64Optional

The translucency of the image. A value of <code>0.0</code> makes the image completely transparent, and <code>1.0</code> makes the image completely opaque. Note that if the image is already semi-transparent, setting this to <code>1.0</code> will not make the image completely opaque.

maximum1

minimum0

<a href="#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)%20%3E%20(property)%20watermark%20%2B%20(resource)%20stream.watermarks%20%3E%20(model)%20watermark%20%3E%20(schema)%20%3E%20(property)%20opacity">Link to this property</a>

Padding float64Optional

The whitespace between the adjacent edges (determined by position) of the video and the image. <code>0.0</code> indicates no padding, and <code>1.0</code> indicates a fully padded video width or length, as determined by the algorithm.

maximum1

minimum0

<a href="#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)%20%3E%20(property)%20watermark%20%2B%20(resource)%20stream.watermarks%20%3E%20(model)%20watermark%20%3E%20(schema)%20%3E%20(property)%20padding">Link to this property</a>

Position stringOptional

The location of the image. Valid positions are: <code>upperRight</code>, <code>upperLeft</code>, <code>lowerLeft</code>, <code>lowerRight</code>, and <code>center</code>. Note that <code>center</code> ignores the <code>padding</code> parameter.

<a href="#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)%20%3E%20(property)%20watermark%20%2B%20(resource)%20stream.watermarks%20%3E%20(model)%20watermark%20%3E%20(schema)%20%3E%20(property)%20position">Link to this property</a>

Scale float64Optional

The size of the image relative to the overall size of the video. This parameter will adapt to horizontal and vertical videos automatically. <code>0.0</code> indicates no scaling (use the size of the image as-is), and <code>1.0</code> fills the entire video.

maximum1

minimum0

<a href="#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)%20%3E%20(property)%20watermark%20%2B%20(resource)%20stream.watermarks%20%3E%20(model)%20watermark%20%3E%20(schema)%20%3E%20(property)%20scale">Link to this property</a>

Size float64Optional

The size of the image in bytes.

<a href="#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)%20%3E%20(property)%20watermark%20%2B%20(resource)%20stream.watermarks%20%3E%20(model)%20watermark%20%3E%20(schema)%20%3E%20(property)%20size">Link to this property</a>

UID stringOptional

The unique identifier for a watermark profile.

maxLength32

<a href="#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)%20%3E%20(property)%20watermark%20%2B%20(resource)%20stream.watermarks%20%3E%20(model)%20watermark%20%3E%20(schema)%20%3E%20(property)%20uid">Link to this property</a>

Width int64Optional

The width of the image in pixels.

<a href="#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)%20%3E%20(property)%20watermark%20%2B%20(resource)%20stream.watermarks%20%3E%20(model)%20watermark%20%3E%20(schema)%20%3E%20(property)%20width">Link to this property</a>

</details>

<a href="#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)%20%3E%20(property)%20watermark">Link to this property</a>

</details>

[Link to this property](<#(resource)%20stream.direct_upload%20%3E%20(model)%20DirectUploadNewResponse%20%3E%20(schema)>)

### Upload videos via direct upload URLs

Go

HTTPTypeScriptPythonGoTerraform

```
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"),
  )
  directUpload, err := client.Stream.DirectUpload.New(context.TODO(), stream.DirectUploadNewParams{
    AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"),
    MaxDurationSeconds: cloudflare.F(int64(1)),
  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", directUpload.UID)
}
```

200 example

```
{
  "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": {
    "scheduledDeletion": "2014-01-02T02:20:00Z",
    "uid": "ea95132c15732412d22c1476fa83f27a",
    "uploadURL": "www.example.com/samplepath",
    "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
    }
  }
}
```

##### Returns Examples

200 example

```
{
  "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": {
    "scheduledDeletion": "2014-01-02T02:20:00Z",
    "uid": "ea95132c15732412d22c1476fa83f27a",
    "uploadURL": "www.example.com/samplepath",
    "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
    }
  }
}
```