Overview
Retrieve comprehensive details about a specific project using its unique identifier. This endpoint returns the complete project configuration, including storyboard data, video URLs, audio settings, script information, and rendering details.
You need a valid API key to use this endpoint. Get your API key from the API Access page in your Pictory dashboard.
API Endpoint
GET https://api.pictory.ai/pictoryapis/v2/projects/{projectid}
Request Parameters
Path Parameters
The unique identifier of the project to retrieve. Can be either a string (for v3 schema projects) or an integer (for v2 schema and earlier projects). Example: 20251222191648030d7df02f5b4054d4ca8831f1369459e25
API key for authentication (starts with pictai_) Authorization: YOUR_API_KEY
Response
The response contains detailed project information including configuration, media URLs, and metadata.
Source type of the project (e.g., script, transcribe, url)
Current step/stage of the project workflow (e.g., STORYBOARD, EDIT, RENDER)
Project schema version (e.g., v2, v3)
Video aspect ratio layout (e.g., 16:9, 9:16, 1:1)
URL to the project thumbnail image
URL to the rendered video file (if available)
Shareable URL for viewing the video
URL to the generated audio file
Duration of the video in seconds
ISO 8601 timestamp of when the project was last saved
ISO 8601 timestamp of when the video was generated
URL to the SRT subtitle file
URL to the VTT subtitle file
URL to the text transcript file
Language code of the script (e.g., en for English)
Identifier for the voice-over used in the project
Audio playback speed percentage (100 = normal speed)
Background video volume level (0-100)
Identifier for the brand template applied to the project
Identifier for the smart template used
Indicates whether the project is currently being processed
Configuration settings for scene generation from script Automatically highlight keywords in scenes
Maximum number of text lines per scene
Automatically select visuals for scenes
Filters applied for visual selection Selected visual categories
Response Examples
200 - Success
401 - Unauthorized
404 - Not Found
{
"projectName" : "Hello World Template" ,
"source" : "script" ,
"step" : "STORYBOARD" ,
"schemaVersion" : "v3" ,
"layout" : "16:9" ,
"thumbnail" : "https://d3uryq9bhgb5qr.cloudfront.net/TeamsAnnual/aa46778d-7965-46e0-967d-b48ee5d6ead9/f1c3b5a7-65f9-4386-a3ef-5ac378c12fa2/image/f1c3b5a7-65f9-4386-a3ef-5ac378c12fa2.jpg" ,
"videoURL" : "https://d3uryq9bhgb5qr.cloudfront.net/TeamsAnnual/aa46778d-7965-46e0-967d-b48ee5d6ead9/f1c3b5a7-65f9-4386-a3ef-5ac378c12fa2/video/f1c3b5a7-65f9-4386-a3ef-5ac378c12fa2/Hello_World_Template.mp4" ,
"shareVideoURL" : "https://video.pictory.ai/20251222191648030d7df02f5b4054d4ca8831f1369459e25/202512222223581518MQ0e1s90cquQkN" ,
"audioURL" : "https://d3uryq9bhgb5qr.cloudfront.net/TeamsAnnual/aa46778d-7965-46e0-967d-b48ee5d6ead9/f1c3b5a7-65f9-4386-a3ef-5ac378c12fa2/audio/f1c3b5a7-65f9-4386-a3ef-5ac378c12fa2/Hello_World_Template.mp3" ,
"videoDuration" : 1.99 ,
"saveDate" : "2025-12-23T01:54:26.658Z" ,
"generatedDate" : "2025-12-22T22:23:57.210Z" ,
"srtFile" : "https://d3uryq9bhgb5qr.cloudfront.net/TeamsAnnual/aa46778d-7965-46e0-967d-b48ee5d6ead9/f1c3b5a7-65f9-4386-a3ef-5ac378c12fa2/text/subtitles/154cc5e8-a124-46f5-971f-b2ba4ae1579c.srt" ,
"vttFile" : "https://d3uryq9bhgb5qr.cloudfront.net/TeamsAnnual/aa46778d-7965-46e0-967d-b48ee5d6ead9/f1c3b5a7-65f9-4386-a3ef-5ac378c12fa2/text/subtitles/72c97243-d206-4b6c-ad87-95606ce2e779.vtt" ,
"txtFile" : "https://d3uryq9bhgb5qr.cloudfront.net/TeamsAnnual/aa46778d-7965-46e0-967d-b48ee5d6ead9/f1c3b5a7-65f9-4386-a3ef-5ac378c12fa2/text/subtitles/8794b1d5-bf40-494e-9deb-724cb6f77310.txt" ,
"scriptLanguage" : "en" ,
"voiceOverId" : "20251222191850400c093ac81afb245cf922e440e89d24acd" ,
"audioSpeed" : 100 ,
"videoVolume" : 50 ,
"brandId" : "eb67b4ba-0eef-41fa-a772-d9675cc3645c" ,
"smartTemplateId" : "202507141030549677ylq8k8gu44vy1y" ,
"inProgress" : false ,
"scriptTxtSceneSettings" : {
"autoHighlightKeywords" : true ,
"maxLines" : 2 ,
"autoVisualSelection" : true
},
"visualFilter" : {
"libraries" : [],
"styles" : [],
"categories" : []
}
}
Code Examples
Replace YOUR_API_KEY with your actual API key that starts with pictai_
curl --request GET \
--url 'https://api.pictory.ai/pictoryapis/v2/projects/YOUR_PROJECT_ID' \
--header 'Authorization: YOUR_API_KEY' \
--header 'accept: application/json' | python -m json.tool
Usage Notes
Use this endpoint to retrieve the complete project configuration, including all media URLs, subtitle files, and rendering settings. This is useful for checking project status, downloading rendered assets, or retrieving project metadata.
Project Status : Check the step field to determine the current workflow stage. Common values include STORYBOARD (editing), RENDER (rendering in progress), and COMPLETE (fully rendered).
Media URLs : All media URLs (video, audio, subtitles) point to CloudFront CDN for fast, reliable access. These URLs remain accessible as long as the project exists in your account.
Common Use Cases
1. Check Project Render Status
Monitor whether a project has finished rendering:
import requests
import time
def wait_for_render ( project_id , api_key , timeout = 300 ):
"""
Poll project status until rendering is complete
"""
url = f "https://api.pictory.ai/pictoryapis/v2/projects/ { project_id } "
headers = { "Authorization" : api_key}
start_time = time.time()
while time.time() - start_time < timeout:
response = requests.get(url, headers = headers)
project = response.json()
if project.get( 'step' ) == 'COMPLETE' or not project.get( 'inProgress' ):
print ( f "Project rendering complete!" )
print ( f "Video URL: { project.get( 'videoURL' ) } " )
return project
print ( f "Status: { project.get( 'step' ) } , In Progress: { project.get( 'inProgress' ) } " )
time.sleep( 10 ) # Check every 10 seconds
raise TimeoutError ( "Project rendering timeout" )
# Example usage
project = wait_for_render( "YOUR_PROJECT_ID" , "YOUR_API_KEY" )
2. Download Project Assets
Download all media files associated with a project:
import requests
import os
def download_project_assets ( project_id , api_key , output_dir = "./downloads" ):
"""
Download video, audio, and subtitle files from a project
"""
# Get project details
url = f "https://api.pictory.ai/pictoryapis/v2/projects/ { project_id } "
headers = { "Authorization" : api_key}
response = requests.get(url, headers = headers)
project = response.json()
# Create output directory
os.makedirs(output_dir, exist_ok = True )
# Download files
assets = {
'video' : project.get( 'videoURL' ),
'audio' : project.get( 'audioURL' ),
'srt' : project.get( 'srtFile' ),
'vtt' : project.get( 'vttFile' ),
'txt' : project.get( 'txtFile' )
}
for asset_type, url in assets.items():
if url:
filename = f " { project[ 'projectName' ] } _ { asset_type } . { asset_type } "
filepath = os.path.join(output_dir, filename)
# Download file
file_response = requests.get(url)
with open (filepath, 'wb' ) as f:
f.write(file_response.content)
print ( f "Downloaded { asset_type } : { filepath } " )
print ( f "All assets downloaded to { output_dir } " )
# Example usage
download_project_assets( "YOUR_PROJECT_ID" , "YOUR_API_KEY" )
Extract and analyze project configuration and settings:
async function analyzeProject ( projectId , apiKey ) {
const response = await fetch (
`https://api.pictory.ai/pictoryapis/v2/projects/ ${ projectId } ` ,
{ headers: { 'Authorization' : ` ${ apiKey } ` } }
);
const project = await response . json ();
const metadata = {
name: project . projectName ,
source: project . source ,
schema: project . schemaVersion ,
aspectRatio: project . layout ,
duration: project . videoDuration ,
language: project . scriptLanguage ,
created: project . generatedDate ,
lastSaved: project . saveDate ,
voiceOver: project . voiceOverId ,
brand: project . brandId ,
template: project . smartTemplateId ,
sceneSettings: {
maxLines: project . scriptTxtSceneSettings ?. maxLines ,
autoHighlight: project . scriptTxtSceneSettings ?. autoHighlightKeywords ,
autoVisuals: project . scriptTxtSceneSettings ?. autoVisualSelection
},
assets: {
video: project . videoURL ,
audio: project . audioURL ,
shareLink: project . shareVideoURL ,
subtitles: {
srt: project . srtFile ,
vtt: project . vttFile ,
txt: project . txtFile
}
}
};
console . log ( 'Project Analysis:' , metadata );
return metadata ;
}
// Example usage
const analysis = await analyzeProject ( 'YOUR_PROJECT_ID' , 'YOUR_API_KEY' );
4. Compare Project Settings
Compare settings between multiple projects:
def compare_projects ( project_ids , api_key ):
"""
Compare configuration settings across multiple projects
"""
url_template = "https://api.pictory.ai/pictoryapis/v2/projects/ {} "
headers = { "Authorization" : api_key}
projects = []
for pid in project_ids:
response = requests.get(url_template.format(pid), headers = headers)
projects.append(response.json())
# Compare key settings
comparison = {
'names' : [p.get( 'projectName' ) for p in projects],
'layouts' : [p.get( 'layout' ) for p in projects],
'schemas' : [p.get( 'schemaVersion' ) for p in projects],
'durations' : [p.get( 'videoDuration' ) for p in projects],
'audioSpeeds' : [p.get( 'audioSpeed' ) for p in projects],
'videoVolumes' : [p.get( 'videoVolume' ) for p in projects],
'maxLines' : [p.get( 'scriptTxtSceneSettings' , {}).get( 'maxLines' ) for p in projects]
}
print ( "Project Comparison:" )
for key, values in comparison.items():
print ( f " { key } : { values } " )
return comparison
# Example usage
comparison = compare_projects(
[ "project_id_1" , "project_id_2" , "project_id_3" ],
"YOUR_API_KEY"
)
5. Get Shareable Video Link
Retrieve the shareable video link for distribution:
async function getShareableLink ( projectId , apiKey ) {
const response = await fetch (
`https://api.pictory.ai/pictoryapis/v2/projects/ ${ projectId } ` ,
{ headers: { 'Authorization' : ` ${ apiKey } ` } }
);
const project = await response . json ();
if ( project . shareVideoURL ) {
console . log ( `Shareable link: ${ project . shareVideoURL } ` );
console . log ( `Project name: ${ project . projectName } ` );
console . log ( `Duration: ${ project . videoDuration } seconds` );
return project . shareVideoURL ;
} else {
console . log ( 'Shareable link not yet available' );
return null ;
}
}
// Example usage
const shareLink = await getShareableLink ( 'YOUR_PROJECT_ID' , 'YOUR_API_KEY' );
6. Export Project Report
Generate a comprehensive report of project details:
import json
from datetime import datetime
def export_project_report ( project_id , api_key , output_file = "project_report.json" ):
"""
Export a detailed project report to JSON
"""
url = f "https://api.pictory.ai/pictoryapis/v2/projects/ { project_id } "
headers = { "Authorization" : api_key}
response = requests.get(url, headers = headers)
project = response.json()
# Create structured report
report = {
"reportGenerated" : datetime.now().isoformat(),
"projectId" : project_id,
"basicInfo" : {
"name" : project.get( 'projectName' ),
"source" : project.get( 'source' ),
"status" : project.get( 'step' ),
"inProgress" : project.get( 'inProgress' ),
"schemaVersion" : project.get( 'schemaVersion' )
},
"videoSettings" : {
"layout" : project.get( 'layout' ),
"duration" : project.get( 'videoDuration' ),
"volume" : project.get( 'videoVolume' )
},
"audioSettings" : {
"language" : project.get( 'scriptLanguage' ),
"voiceOverId" : project.get( 'voiceOverId' ),
"speed" : project.get( 'audioSpeed' )
},
"timestamps" : {
"created" : project.get( 'generatedDate' ),
"lastSaved" : project.get( 'saveDate' )
},
"assets" : {
"video" : project.get( 'videoURL' ),
"audio" : project.get( 'audioURL' ),
"thumbnail" : project.get( 'thumbnail' ),
"shareLink" : project.get( 'shareVideoURL' ),
"subtitles" : {
"srt" : project.get( 'srtFile' ),
"vtt" : project.get( 'vttFile' ),
"txt" : project.get( 'txtFile' )
}
},
"branding" : {
"brandId" : project.get( 'brandId' ),
"templateId" : project.get( 'smartTemplateId' )
}
}
# Export to JSON
with open (output_file, 'w' ) as f:
json.dump(report, f, indent = 2 )
print ( f "Project report exported to { output_file } " )
return report
# Example usage
report = export_project_report( "YOUR_PROJECT_ID" , "YOUR_API_KEY" )