ProductsServicesDocsPricingAboutContact Log in Sign up

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.