Platform Editor Pricing Docs Sign In Get Started

Upload Destinations

When you include an upload field in your render request, you specify a destination object that tells the system where to send the rendered video. This page documents the configuration for each supported destination.

Every destination object requires a type field. The remaining fields depend on the destination type.

Amazon S3

Upload rendered videos directly to an S3 bucket. Supports two authentication methods: AWS access keys or bucket policy.

Using access keys

{
  "upload": {
    "extension": "mp4",
    "destination": {
      "type": "s3",
      "bucket": "my-videos",
      "filename": "renders/welcome.mp4",
      "aws_access_key_id": "AKIAIOSFODNN7EXAMPLE",
      "aws_secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
    }
  }
}

Using a bucket policy

Instead of providing AWS keys, you can grant upload permissions to ImpossibleFX via a bucket policy. Set the policy to allow the following actions for the canonical user ID 1ea9f667f8ec65aa76ca17cbacfda01ba70493b59f7124a810823def30e10216:

  • s3:AbortMultipartUpload
  • s3:ListMultipartUploadParts
  • s3:PutObject
  • s3:PutObjectAcl

Then use aws_use_policy instead of keys:

{
  "upload": {
    "extension": "mp4",
    "destination": {
      "type": "s3",
      "bucket": "my-videos",
      "filename": "renders/welcome.mp4",
      "aws_use_policy": true
    }
  }
}
i Note

See the full S3 bucket policy example for a ready-to-use policy you can paste into the AWS Console.

Parameters

Parameter Type Required Default Description
type String Yes — Must be "s3".
bucket String Yes — S3 bucket name.
filename String Yes — Object key (path and filename) in the bucket.
aws_access_key_id String No — AWS access key ID. Not needed if using bucket policy.
aws_secret_access_key String No — AWS secret access key. Not needed if using bucket policy.
aws_use_policy Boolean No false Use bucket policy authentication instead of access keys.
s3host String No — S3 endpoint host. Required for Signature V4 regions (e.g., eu-central-1).
acl String No "public-read" Access control: "private", "public-read", "public-read-write", or "authenticated-read".
contenttype String No "application/octet-stream" MIME type of the uploaded file (e.g., "video/mp4").
contentdisposition String No — Content-Disposition header value.
cachecontrol String No — Cache-Control header value.
secure Boolean No false Return HTTPS URLs in the response.
reduced_redundancy Boolean No false Use reduced redundancy storage class.
metadata Object No — Custom metadata key-value pairs (set as x-amz-meta-* headers).

Response

Returns the public S3 URL of the uploaded file:

{
  "token": "v2:eu-west-1:abc123",
  "upload": "https://my-videos.s3.amazonaws.com/renders/welcome.mp4"
}

Microsoft Azure Blob Storage

Upload to an Azure storage account.

{
  "upload": {
    "extension": "mp4",
    "destination": {
      "type": "azureblob",
      "account": "mystorageaccount",
      "key": "your-storage-key",
      "container": "videos",
      "filename": "renders/welcome.mp4",
      "contenttype": "video/mp4"
    }
  }
}

Parameters

Parameter Type Required Default Description
type String Yes — Must be "azureblob".
account String Yes — Azure storage account name.
key String Yes — Azure storage account key.
filename String Yes — Destination blob name.
container String No — Storage container name.
contenttype String No "application/octet-stream" MIME type of the uploaded file.

YouTube

Upload rendered videos directly to a YouTube channel.

! Warning

YouTube enforces upload rate limits — typically around 400 videos per day, sometimes as low as 50 per hour per channel. These limits are set by YouTube and can change without notice.

{
  "upload": {
    "extension": "mp4",
    "destination": {
      "type": "youtube",
      "title": "Welcome, Alex!",
      "description": "A personalized welcome video.",
      "category": "22",
      "status": "unlisted",
      "tags": ["personalized", "welcome"],
      "oauth_access_token": "ya29.your-oauth-token"
    }
  }
}

Authorization

Upload to a user’s channel: Obtain an OAuth 2.0 access token via Google’s standard OAuth flow and pass it as oauth_access_token.

Upload to your own channel: Visit https://oauth.impossible.io/google/youtube/ to authorize ImpossibleFX. This gives you an auth_secret you can use instead of an OAuth token.

Parameters

Parameter Type Required Default Description
type String Yes — Must be "youtube".
title String Yes — Video title.
description String Yes — Video description.
category String Yes — YouTube category ID (e.g., "22" for People & Blogs). See category list below.
status String No "public" Privacy: "public", "private", or "unlisted".
oauth_access_token String No — Google OAuth 2.0 access token with YouTube upload scope.
auth_secret String No — ImpossibleFX auth secret for uploading to your own channel.
tags Array No — List of tag strings.
playlistid String No — Add the video to this playlist (use the playlist ID, not the name).
notifySubscribers Boolean No true Notify channel subscribers about the upload.
mimetype String No "video/mp4" MIME type of the video file.

YouTube category IDs

IDCategoryIDCategory
1Film & Animation20Gaming
2Autos & Vehicles22People & Blogs
10Music23Comedy
15Pets & Animals24Entertainment
17Sports25News & Politics
18Short Movies26Howto & Style
19Travel & Events27Education
28Science & Technology44Trailers
i Note

Category availability varies by country. Use “22” (People & Blogs) as a safe default.

Facebook

Upload videos to a Facebook page or profile.

{
  "upload": {
    "extension": "mp4",
    "destination": {
      "type": "facebook",
      "title": "Welcome Video",
      "description": "A personalized welcome.",
      "oauth_access_token": "your-facebook-token"
    }
  }
}

Parameters

Parameter Type Required Default Description
type String Yes — Must be "facebook".
title String Yes — Video title.
description String Yes — Video description.
oauth_access_token String No — Facebook OAuth token with publish permission.
caption String No — Video caption.
name String No — Name for the video.
message String No — Text to display in the post.
endpoint String No "https://graph.facebook.com" Facebook API endpoint.

Dropbox

Upload to a Dropbox account.

{
  "upload": {
    "extension": "mp4",
    "destination": {
      "type": "dropbox",
      "filename": "Videos/welcome.mp4",
      "auth_secret": "your-auth-secret"
    }
  }
}

Authorization

Upload to a user’s Dropbox: Obtain an OAuth 2.0 token via Dropbox’s OAuth flow and pass it as oauth_token.

Upload to your own Dropbox: Visit https://oauth.impossible.io/dropbox/authorize/ to get an auth_secret.

Parameters

Parameter Type Required Default Description
type String Yes — Must be "dropbox".
filename String Yes — Destination path and filename in Dropbox.
oauth_token String No — Dropbox OAuth 2.0 token with upload permission.
auth_secret String No — ImpossibleFX auth secret for uploading to your own Dropbox.

HTTP Server

Upload via HTTP POST or PUT to any server endpoint.

{
  "upload": {
    "extension": "mp4",
    "destination": {
      "type": "http",
      "url": "https://your-server.com/api/videos",
      "filename": "welcome.mp4",
      "method": "POST",
      "headers": {
        "Authorization": "Bearer your-api-token"
      }
    }
  }
}

Parameters

Parameter Type Required Default Description
type String Yes — Must be "http".
url String Yes — Upload endpoint URL.
filename String Yes — Filename for the uploaded file.
method String No "POST" HTTP method: "POST" or "GET".
user String No — Username for HTTP Basic authentication.
password String No — Password for HTTP Basic authentication.
fileid String No "file" Form field name for the file in multipart uploads.
fields Object No {} Additional form fields to include in the request.
headers Object No {} Custom HTTP headers to include in the request.

FTP Server

Upload via FTP.

{
  "upload": {
    "extension": "mp4",
    "destination": {
      "type": "ftp",
      "host": "ftp.example.com",
      "filename": "/videos/welcome.mp4",
      "user": "ftpuser",
      "password": "ftppass"
    }
  }
}

Parameters

Parameter Type Required Default Description
type String Yes — Must be "ftp".
host String Yes — FTP server hostname.
filename String Yes — Full destination path and filename on the FTP server.
user String No — FTP username.
password String No — FTP password.
passive Boolean No false Use PASSIVE mode for the FTP connection.
epsv Boolean No false Use Extended Passive (EPSV) mode.