Create AWS Connection for Private S3 Assets
curl --request POST \
--url https://api.pictory.ai/pictoryapis/v1/awsconnections \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>' \
--data '
{
"name": "<string>",
"description": "<string>",
"awsAccountId": "<string>",
"awsRegion": "<string>",
"enabled": true
}
'import requests
url = "https://api.pictory.ai/pictoryapis/v1/awsconnections"
payload = {
"name": "<string>",
"description": "<string>",
"awsAccountId": "<string>",
"awsRegion": "<string>",
"enabled": True
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "<content-type>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': '<content-type>'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
awsAccountId: '<string>',
awsRegion: '<string>',
enabled: true
})
};
fetch('https://api.pictory.ai/pictoryapis/v1/awsconnections', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pictory.ai/pictoryapis/v1/awsconnections",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'awsAccountId' => '<string>',
'awsRegion' => '<string>',
'enabled' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pictory.ai/pictoryapis/v1/awsconnections"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"awsAccountId\": \"<string>\",\n \"awsRegion\": \"<string>\",\n \"enabled\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.pictory.ai/pictoryapis/v1/awsconnections")
.header("Authorization", "<authorization>")
.header("Content-Type", "<content-type>")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"awsAccountId\": \"<string>\",\n \"awsRegion\": \"<string>\",\n \"enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pictory.ai/pictoryapis/v1/awsconnections")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = '<content-type>'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"awsAccountId\": \"<string>\",\n \"awsRegion\": \"<string>\",\n \"enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"enabled": true,
"name": "PictoryPrivateVideosConnection",
"description": "Pictory Private Videos Connection",
"awsAccountId": "123456789012",
"awsRegion": "us-east-2",
"connectionId": "20241207042423053xmex5z9ag9ivmp21",
"version": 1
}
{
"code": "INVALID_REQUEST_BODY",
"message": "Request body validation failed.",
"fields": [
{
"name": "awsAccountId",
"errors": "AWS account ID must be a 12-digit numeric string"
}
]
}
{
"code": "INVALID_REQUEST_BODY",
"message": "Request body validation failed.",
"fields": [
{
"name": "enabled",
"errors": "enabled is required"
}
]
}
{
"message": "Unauthorized"
}
{
"code": "DUPLICATE_CONNECTION",
"message": "Connection with same name or account/region already exist.",
"fields": []
}
AWS Integration
Create AWS Connection for Private S3 Assets
Connect your AWS account to access private S3 videos and images in Pictory
POST
/
pictoryapis
/
v1
/
awsconnections
Create AWS Connection for Private S3 Assets
curl --request POST \
--url https://api.pictory.ai/pictoryapis/v1/awsconnections \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>' \
--data '
{
"name": "<string>",
"description": "<string>",
"awsAccountId": "<string>",
"awsRegion": "<string>",
"enabled": true
}
'import requests
url = "https://api.pictory.ai/pictoryapis/v1/awsconnections"
payload = {
"name": "<string>",
"description": "<string>",
"awsAccountId": "<string>",
"awsRegion": "<string>",
"enabled": True
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "<content-type>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': '<content-type>'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
awsAccountId: '<string>',
awsRegion: '<string>',
enabled: true
})
};
fetch('https://api.pictory.ai/pictoryapis/v1/awsconnections', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pictory.ai/pictoryapis/v1/awsconnections",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => '<string>',
'awsAccountId' => '<string>',
'awsRegion' => '<string>',
'enabled' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pictory.ai/pictoryapis/v1/awsconnections"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"awsAccountId\": \"<string>\",\n \"awsRegion\": \"<string>\",\n \"enabled\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.pictory.ai/pictoryapis/v1/awsconnections")
.header("Authorization", "<authorization>")
.header("Content-Type", "<content-type>")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"awsAccountId\": \"<string>\",\n \"awsRegion\": \"<string>\",\n \"enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pictory.ai/pictoryapis/v1/awsconnections")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = '<content-type>'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"awsAccountId\": \"<string>\",\n \"awsRegion\": \"<string>\",\n \"enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"enabled": true,
"name": "PictoryPrivateVideosConnection",
"description": "Pictory Private Videos Connection",
"awsAccountId": "123456789012",
"awsRegion": "us-east-2",
"connectionId": "20241207042423053xmex5z9ag9ivmp21",
"version": 1
}
{
"code": "INVALID_REQUEST_BODY",
"message": "Request body validation failed.",
"fields": [
{
"name": "awsAccountId",
"errors": "AWS account ID must be a 12-digit numeric string"
}
]
}
{
"code": "INVALID_REQUEST_BODY",
"message": "Request body validation failed.",
"fields": [
{
"name": "enabled",
"errors": "enabled is required"
}
]
}
{
"message": "Unauthorized"
}
{
"code": "DUPLICATE_CONNECTION",
"message": "Connection with same name or account/region already exist.",
"fields": []
}
Overview
This guide shows you how to connect your private AWS S3 storage to Pictory, so you can use your own videos and images stored in Amazon S3 buckets to create Pictory videos. What you will accomplish:- Connect Pictory to your private AWS S3 storage
- Use your private videos and images in Pictory without making them public
- Keep your assets secure with AWS IAM role-based access
Prerequisites: You will need an AWS account with access to create IAM roles. If you do not have AWS experience, consider asking your IT team for help with the AWS setup steps below.
Prerequisites: AWS IAM Role Setup
This creates a secure “key” (called an IAM role) that lets Pictory access your private S3 files without making them public.How It Works
Think of this like giving Pictory a guest pass to your storage:- You create a special role in AWS (the “guest pass”)
- You tell AWS that Pictory is allowed to use this role
- You specify which folders/buckets Pictory can access
- Pictory uses this role to fetch your videos and images when creating content
1
Step 1: Log in to AWS Console
- Go to AWS Management Console
- Sign in with your AWS account credentials
- In the search bar at the top, type “IAM” and click on the IAM service
What is IAM? IAM (Identity and Access Management) is AWS’s security system that controls who can access what in your AWS account.
2
Step 2: Start Creating a New Role
- On the left sidebar, click Roles
- Click the orange Create role button
What is a Role? A role is like a job title with specific permissions. You’re creating a “Pictory Access” role that can only read your S3 files.
3
Step 3: Set Up Trust with Pictory
This step tells AWS that Pictory’s account is allowed to use this role.
- Under Trusted entity type, select Another AWS account
- In the Account ID field, enter:
701488979254(this is Pictory’s AWS account) - Click Next
- On the permissions page, click Next (we will add permissions in the next step)
- Under Role name, enter exactly:
PictoryCloudIntegrationRole(this exact name is required) - Click Create role
4
Step 4: Give Permission to Access Your S3 Bucket
This step specifies which S3 bucket Pictory can access and what it can do (read files and list files).
- In the search box, find the role you just created:
PictoryCloudIntegrationRole - Click on it to open the role details
- Click the Permissions tab
- Click Add permissions → Create inline policy
- Click the JSON tab (ignore the visual editor)
- Delete everything in the box and paste this:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::{YOUR_S3_BUCKET}",
"arn:aws:s3:::{YOUR_S3_BUCKET}/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
- Important: Replace
{YOUR_S3_BUCKET}with your actual bucket name (for example, if your bucket is named “my-company-videos”, replace both instances with “my-company-videos”) - Click Next
- Name the policy:
s3_access_policy - Click Create policy
What this does:
s3:ListBucket- Lets Pictory see what files are in your buckets3:GetObject- Lets Pictory read/download the files- Pictory can only READ files, it cannot modify or delete them
5
Step 5: Configure Trust Relationship (Advanced)
This step sets up the detailed trust relationship between your AWS account and Pictory.
- In the role details, click the Trust relationships tab
- Click Edit trust policy
- Delete everything and paste this:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::701488979254:role/CloudIntegrationRole"
},
"Action": "sts:AssumeRole",
"Condition": {}
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::701488979254:role/ecsTaskExecutionRole"
},
"Action": "sts:AssumeRole",
"Condition": {}
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::701488979254:root"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
- Click Update policy
What this does: This lists three Pictory systems that are allowed to use this role:
CloudIntegrationRole- Handles the API connectionecsTaskExecutionRole- Processes your videosroot- Backup access for Pictory’s account
6
Step 6: Gather Information for API Call
You’ll need these two pieces of information to make the API call:Your AWS Account ID:
- In the AWS Console, click your account name in the top-right corner
- Your 12-digit Account ID is shown there (for example:
123456789012)
- Go to the S3 service in AWS Console
- Find your bucket in the list
- The region is shown next to the bucket name (for example:
us-east-1,us-west-2, etc.)
Write these down - you will use them in the next section when making the API call!
Making the API Call
Now that your AWS role is set up, you can make a simple API call to connect it to Pictory. What you will need:- Your API key (starts with
pictai_- get this from the API Access page) - Your 12-digit AWS Account ID (from Step 6 above)
- Your S3 bucket’s region (from Step 6 above)
API Endpoint
POST https://api.pictory.ai/pictoryapis/v1/awsconnections
Request Parameters
For non-technical users: The sections below show what information you need to include in your API request. If you are using a tool like Postman or writing code, these are the fields you will fill in.
Headers
string
required
API key for authentication (starts with Get your API key from the API Access page in your Pictory dashboard.
pictai_)Authorization: YOUR_API_KEY
string
required
Must be set to
application/jsonBody Parameters
string
required
A unique name for the AWS connectionExample:
"PictoryPrivateVideosConnection"string
Optional description of the AWS connectionExample:
"Pictory Private Videos Connection"string
required
Your 12-digit AWS account IDFormat: 12-digit numeric stringExample:
"123456789012"string
required
The AWS region where your S3 bucket is locatedCommon Regions:
us-east-1- US East (N. Virginia)us-east-2- US East (Ohio)us-west-1- US West (N. California)us-west-2- US West (Oregon)eu-west-1- Europe (Ireland)eu-central-1- Europe (Frankfurt)ap-southeast-1- Asia Pacific (Singapore)ap-northeast-1- Asia Pacific (Tokyo)
"us-east-2"boolean
required
Whether the AWS connection is enabled (should be
true to activate the connection)Default: trueRequest Body Example
Here’s what the complete request looks like. Replace the example values with your actual AWS details:{
"name": "PictoryPrivateVideosConnection",
"description": "Pictory Private Videos Connection",
"awsAccountId": "123456789012", ← Replace with your 12-digit AWS Account ID
"awsRegion": "us-east-2", ← Replace with your S3 bucket's region
"enabled": true
}
Quick tip: You can leave out the
description field if you do not need it - it is optional!Response
When the connection is successful, Pictory will send back a response confirming the details.Save your connectionId! You’ll use this ID when making video API calls to tell Pictory which S3 connection to use. When using it in video creation requests, the field name becomes
awsConnectionId (not just connectionId).Response Examples
{
"enabled": true,
"name": "PictoryPrivateVideosConnection",
"description": "Pictory Private Videos Connection",
"awsAccountId": "123456789012",
"awsRegion": "us-east-2",
"connectionId": "20241207042423053xmex5z9ag9ivmp21",
"version": 1
}
{
"code": "INVALID_REQUEST_BODY",
"message": "Request body validation failed.",
"fields": [
{
"name": "awsAccountId",
"errors": "AWS account ID must be a 12-digit numeric string"
}
]
}
{
"code": "INVALID_REQUEST_BODY",
"message": "Request body validation failed.",
"fields": [
{
"name": "enabled",
"errors": "enabled is required"
}
]
}
{
"message": "Unauthorized"
}
{
"code": "DUPLICATE_CONNECTION",
"message": "Connection with same name or account/region already exist.",
"fields": []
}
Code Examples
Here are complete working examples in different programming languages. Pick the one that matches your programming language.# This is for terminal/command line use
# Replace YOUR_API_KEY with your actual API key
# Replace 123456789012 with your AWS Account ID
# Replace us-east-2 with your S3 bucket's region
curl --request POST \
--url https://api.pictory.ai/pictoryapis/v1/awsconnections \
--header 'Authorization: YOUR_API_KEY' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '{
"name": "PictoryPrivateVideosConnection",
"description": "Pictory Private Videos Connection",
"awsAccountId": "123456789012",
"awsRegion": "us-east-2",
"enabled": true
}' | python -m json.tool
// For use in web applications or Node.js
// Replace 'YOUR_API_KEY' with your actual API key
// Replace '123456789012' with your AWS Account ID
// Replace 'us-east-2' with your S3 bucket's region
const createAWSConnection = async (apiKey) => {
const response = await fetch('https://api.pictory.ai/pictoryapis/v1/awsconnections', {
method: 'POST',
headers: {
'Authorization': `${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'PictoryPrivateVideosConnection',
description: 'Pictory Private Videos Connection',
awsAccountId: '123456789012', // ← Replace with your AWS Account ID
awsRegion: 'us-east-2', // ← Replace with your region
enabled: true
})
});
if (!response.ok) {
const error = await response.json();
throw new Error(`Failed: ${error.message}`);
}
return await response.json();
};
// How to use it:
try {
const connection = await createAWSConnection('YOUR_API_KEY');
console.log('Success! Connection ID:', connection.connectionId);
console.log('Save this ID for making video requests!');
} catch (error) {
console.error('Error:', error.message);
}
# For Python applications
# First install requests: pip install requests
# Replace 'YOUR_API_KEY' with your actual API key
# Replace '123456789012' with your AWS Account ID
# Replace 'us-east-2' with your S3 bucket's region
import requests
def create_aws_connection(api_key):
"""Create AWS connection to access private S3 assets"""
url = "https://api.pictory.ai/pictoryapis/v1/awsconnections"
headers = {
"Authorization": api_key,
"Content-Type": "application/json"
}
payload = {
"name": "PictoryPrivateVideosConnection",
"description": "Pictory Private Videos Connection",
"awsAccountId": "123456789012", # ← Replace with your AWS Account ID
"awsRegion": "us-east-2", # ← Replace with your region
"enabled": True
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status() # Raises error if request failed
return response.json()
# How to use it:
try:
connection = create_aws_connection("YOUR_API_KEY")
print(f"Success! Connection ID: {connection['connectionId']}")
print(f"Save this ID for making video requests!")
except requests.exceptions.HTTPError as e:
error = e.response.json()
print(f"Error: {error.get('message', 'Request failed')}")
<?php
// For PHP applications
// Replace 'YOUR_API_KEY' with your actual API key
// Replace '123456789012' with your AWS Account ID
// Replace 'us-east-2' with your S3 bucket's region
function createAWSConnection($apiKey) {
$url = 'https://api.pictory.ai/pictoryapis/v1/awsconnections';
$payload = [
'name' => 'PictoryPrivateVideosConnection',
'description' => 'Pictory Private Videos Connection',
'awsAccountId' => '123456789012', // ← Replace with your AWS Account ID
'awsRegion' => 'us-east-2', // ← Replace with your region
'enabled' => true
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: ' . $apiKey,
'Content-Type: application/json'
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 201) {
$error = json_decode($response, true);
throw new Exception($error['message'] ?? 'Request failed');
}
return json_decode($response, true);
}
// How to use it:
try {
$connection = createAWSConnection('YOUR_API_KEY');
echo "Success! Connection ID: " . $connection['connectionId'] . "\n";
echo "Save this ID for making video requests!\n";
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
}
?>
// For Go applications
// Replace "YOUR_API_KEY" with your actual API key
// Replace "123456789012" with your AWS Account ID
// Replace "us-east-2" with your S3 bucket's region
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
type AWSConnectionRequest struct {
Name string `json:"name"`
Description string `json:"description"`
AWSAccountID string `json:"awsAccountId"`
AWSRegion string `json:"awsRegion"`
Enabled bool `json:"enabled"`
}
type AWSConnectionResponse struct {
ConnectionID string `json:"connectionId"`
Name string `json:"name"`
AWSAccountID string `json:"awsAccountId"`
AWSRegion string `json:"awsRegion"`
Enabled bool `json:"enabled"`
Version int `json:"version"`
}
func createAWSConnection(apiKey string) (*AWSConnectionResponse, error) {
url := "https://api.pictory.ai/pictoryapis/v1/awsconnections"
req := AWSConnectionRequest{
Name: "PictoryPrivateVideosConnection",
Description: "Pictory Private Videos Connection",
AWSAccountID: "123456789012", // ← Replace with your AWS Account ID
AWSRegion: "us-east-2", // ← Replace with your region
Enabled: true,
}
jsonData, err := json.Marshal(req)
if err != nil {
return nil, err
}
httpReq, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
return nil, err
}
httpReq.Header.Set("Authorization", apiKey)
httpReq.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(httpReq)
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
if resp.StatusCode != http.StatusCreated {
return nil, fmt.Errorf("request failed (status %d): %s", resp.StatusCode, string(body))
}
var result AWSConnectionResponse
if err := json.Unmarshal(body, &result); err != nil {
return nil, err
}
return &result, nil
}
// How to use it:
func main() {
connection, err := createAWSConnection("YOUR_API_KEY")
if err != nil {
panic(err)
}
fmt.Printf("Success! Connection ID: %s\n", connection.ConnectionID)
fmt.Println("Save this ID for making video requests!")
}
Using Your S3 Assets in Videos
Now that you have created the connection, you can use your private S3 files in Pictory videos by including theawsConnectionId and referencing files with the s3:// format.
Example Video Request
Here is a simple example of creating a video using your private S3 files:{
"awsConnectionId": "20241207042423053xmex5z9ag9ivmp21", ← Use your connectionId here
"videoName": "My Marketing Video",
"videoDescription": "Company intro video",
"language": "en",
"scenes": [
{
"text": "Welcome to our company!",
"backgroundUri": "s3://my-private-bucket/intro.mp4", ← Your private S3 file
"backgroundType": "video",
"minimumDuration": 5
},
{
"text": "We're excited to have you here!",
"backgroundUri": "s3://my-private-bucket/office.jpg", ← Private S3 image
"backgroundType": "image",
"minimumDuration": 5
}
]
}
How to Reference Your S3 Files
You can use either of these two formats to point to your S3 files:- S3 Protocol (Recommended)
- HTTPS URL
s3://your-bucket-name/path/to/file.mp4
s3://my-company-videos/marketing/intro.mp4
https://your-bucket-name.s3.region-name.amazonaws.com/path/to/file.mp4
https://my-company-videos.s3.us-east-2.amazonaws.com/marketing/intro.mp4
Remember to use
awsConnectionId in your video requests, not connectionId. The API response gives you connectionId, but you need to rename it to awsConnectionId when making video requests.Troubleshooting
Invalid AWS Account ID
Invalid AWS Account ID
Make sure your Account ID is exactly 12 digits (example:
123456789012) with no spaces or dashes.Where to find it: In AWS Console, click your account name in the top-right cornerUnauthorized Error
Unauthorized Error
Your API key may be invalid or expired. Get your API key from the API Access page in your Pictory dashboard.
Duplicate Connection Error
Duplicate Connection Error
You already have a connection with this name or AWS account/region. Try a different connection name.
Videos Can't Access S3 Files
Videos Can't Access S3 Files
Check these in order:
- Role name must be exactly:
PictoryCloudIntegrationRole - Bucket name in your S3 URIs must match your IAM policy
- Region must match where your S3 bucket is located
- Trust policy includes all three Pictory roles (from Step 5)
Get API Key
Access your API key from your Pictory dashboard
Video Storyboard API
Create videos using your private S3 assets
Get AWS Connections
Retrieve all your configured AWS connections
Update AWS Connection
Modify or disable an existing connection
Delete AWS Connection
Remove an AWS connection
AWS IAM Documentation
Official AWS IAM documentation
Was this page helpful?
