NAV Navigation
Curl HTTP NodeJS jQuery PHP Ruby Python Java Go

Shotstack v1

Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

The Shotstack API is a video editing service that allows for the programatic creation of videos using JSON. You can configure an edit and POST it to the Shotstack API which will render your video and provide a file location when complete. For more details check https://shotstack.io

Base URLs:

Authentication

Endpoints

postRender

Code samples

# You can also use wget
curl -X POST https://api.shotstack.io/{version}/render \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

POST https://api.shotstack.io/{version}/render HTTP/1.1
Host: api.shotstack.io
Content-Type: application/json
Accept: application/json

const fetch = require('node-fetch');
const inputBody = '{
  "timeline": {
    "soundtrack": {
      "src": "string",
      "effect": "fadeIn"
    },
    "background": "string",
    "tracks": [
      {
        "clips": [
          {
            "asset": {
              "type": "title",
              "text": "string",
              "style": "minimal",
              "color": "white",
              "size": "medium",
              "background": "string",
              "position": "center",
              "offset": {
                "x": -1,
                "y": -1
              }
            },
            "start": 0,
            "length": 0,
            "fit": "crop",
            "scale": 0,
            "position": "center",
            "offset": {
              "x": -1,
              "y": -1
            },
            "transition": {
              "in": "fade",
              "out": "fade"
            },
            "effect": "zoomIn",
            "filter": "boost"
          }
        ]
      }
    ]
  },
  "output": {
    "format": "mp4",
    "resolution": "preview",
    "aspectRatio": "16:9"
  }
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

fetch('https://api.shotstack.io/{version}/render',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

var headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

$.ajax({
  url: 'https://api.shotstack.io/{version}/render',
  method: 'post',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

 'application/json',
    'Accept' => 'application/json',
    'x-api-key' => 'API_KEY',
    
    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('POST','https://api.shotstack.io/{version}/render', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'x-api-key' => 'API_KEY'
}

result = RestClient.post 'https://api.shotstack.io/{version}/render',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.post('https://api.shotstack.io/{version}/render', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.shotstack.io/{version}/render");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "x-api-key": []string{"API_KEY"},
        
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.shotstack.io/{version}/render", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /render

Render the contents of a timeline as a video file.

Body parameter

{
  "timeline": {
    "soundtrack": {
      "src": "string",
      "effect": "fadeIn"
    },
    "background": "string",
    "tracks": [
      {
        "clips": [
          {
            "asset": {
              "type": "title",
              "text": "string",
              "style": "minimal",
              "color": "white",
              "size": "medium",
              "background": "string",
              "position": "center",
              "offset": {
                "x": -1,
                "y": -1
              }
            },
            "start": 0,
            "length": 0,
            "fit": "crop",
            "scale": 0,
            "position": "center",
            "offset": {
              "x": -1,
              "y": -1
            },
            "transition": {
              "in": "fade",
              "out": "fade"
            },
            "effect": "zoomIn",
            "filter": "boost"
          }
        ]
      }
    ]
  },
  "output": {
    "format": "mp4",
    "resolution": "preview",
    "aspectRatio": "16:9"
  }
}

Parameters

Name In Type Required Description
body body Edit true none

Example responses

201 Response

{
  "success": true,
  "message": "Created",
  "response": {
    "message": "Render Successfuly Queued",
    "id": "2abd5c11-0f3d-4c6d-ba20-235fc9b8e8b7"
  }
}

Responses

Status Meaning Description Schema
201 Created none QueuedResponse

getRender

Code samples

# You can also use wget
curl -X GET https://api.shotstack.io/{version}/render/{id} \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

GET https://api.shotstack.io/{version}/render/{id} HTTP/1.1
Host: api.shotstack.io
Accept: application/json

const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

fetch('https://api.shotstack.io/{version}/render/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

var headers = {
  'Accept':'application/json',
  'x-api-key':'API_KEY'

};

$.ajax({
  url: 'https://api.shotstack.io/{version}/render/{id}',
  method: 'get',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

 'application/json',
    'x-api-key' => 'API_KEY',
    
    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('GET','https://api.shotstack.io/{version}/render/{id}', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'x-api-key' => 'API_KEY'
}

result = RestClient.get 'https://api.shotstack.io/{version}/render/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.get('https://api.shotstack.io/{version}/render/{id}', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.shotstack.io/{version}/render/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "x-api-key": []string{"API_KEY"},
        
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.shotstack.io/{version}/render/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /render/{id}

Get the rendering status, video url and details of a timeline by ID.

Parameters

Name In Type Required Description
id path string true The id of the timeline render task in UUID format

Example responses

200 Response

{
  "success": true,
  "message": "OK",
  "response": {
    "status": "rendering",
    "id": "2abd5c11-0f3d-4c6d-ba20-235fc9b8e8b7",
    "owner": "5ca6hu7s9k",
    "url": "https://shotstack-api-v1-output.s3-ap-southeast-2.amazonaws.com/5ca6hu7s9k/2abd5c11-0f3d-4c6d-ba20-235fc9b8e8b7.mp4",
    "data": {
      "timeline": {
        "soundtrack": {
          "src": "https://s3-ap-northeast-1.amazonaws.com/my-bucket/music.mp3",
          "effect": "fadeInFadeOut"
        },
        "background": "#000000",
        "tracks": [
          {
            "clips": [
              {
                "asset": {
                  "type": "title",
                  "text": "Hello World",
                  "style": "minimal"
                },
                "start": 0,
                "length": 4,
                "transition": {
                  "in": "fade",
                  "out": "fade"
                },
                "effect": "slideRight"
              },
              {
                "asset": {
                  "type": "image",
                  "src": "https://s3-ap-northeast-1.amazonaws.com/my-bucket/my-image.jpg"
                },
                "start": 3,
                "length": 4,
                "effect": "zoomIn",
                "filter": "greyscale"
              }
            ]
          },
          {
            "clips": [
              {
                "asset": {
                  "type": "video",
                  "src": "https://s3-ap-northeast-1.amazonaws.com/my-bucket/my-clip-1.mp4",
                  "trim": 10.5
                },
                "start": 7,
                "length": 4.5
              },
              {
                "asset": {
                  "type": "video",
                  "src": "https://s3-ap-northeast-1.amazonaws.com/my-bucket/my-clip-2.mp4",
                  "volume": 0.5
                },
                "start": 11.5,
                "length": 5,
                "transition": {
                  "out": "wipeLeft"
                }
              }
            ]
          }
        ]
      },
      "output": {
        "format": "mp4",
        "resolution": "sd"
      }
    },
    "created": "2018-05-06T03:33:25.425Z",
    "updated": "2018-05-06T03:33:48.521Z"
  }
}

Responses

Status Meaning Description Schema
200 OK none RenderResponse

Schemas

Edit

{
  "timeline": {
    "soundtrack": {
      "src": "string",
      "effect": "fadeIn"
    },
    "background": "string",
    "tracks": [
      {
        "clips": [
          {
            "asset": {
              "type": "title",
              "text": "string",
              "style": "minimal",
              "color": "white",
              "size": "medium",
              "background": "string",
              "position": "center",
              "offset": {
                "x": -1,
                "y": -1
              }
            },
            "start": 0,
            "length": 0,
            "fit": "crop",
            "scale": 0,
            "position": "center",
            "offset": {
              "x": -1,
              "y": -1
            },
            "transition": {
              "in": "fade",
              "out": "fade"
            },
            "effect": "zoomIn",
            "filter": "boost"
          }
        ]
      }
    ]
  },
  "output": {
    "format": "mp4",
    "resolution": "preview",
    "aspectRatio": "16:9"
  }
}

An edit defines the content of the video in a timeline and the output format.

Properties

Name Type Required Restrictions Description
timeline Timeline true none A timeline represents the contents of a video edit over time, in seconds. A timeline consists of layers called tracks. Tracks are composed of titles, images or video segments referred to as clips which are placed along the track at specific starting point and lasting for a specific amount of time.
output Output true none The video output format.

Timeline

{
  "soundtrack": {
    "src": "string",
    "effect": "fadeIn"
  },
  "background": "string",
  "tracks": [
    {
      "clips": [
        {
          "asset": {
            "type": "title",
            "text": "string",
            "style": "minimal",
            "color": "white",
            "size": "medium",
            "background": "string",
            "position": "center",
            "offset": {
              "x": -1,
              "y": -1
            }
          },
          "start": 0,
          "length": 0,
          "fit": "crop",
          "scale": 0,
          "position": "center",
          "offset": {
            "x": -1,
            "y": -1
          },
          "transition": {
            "in": "fade",
            "out": "fade"
          },
          "effect": "zoomIn",
          "filter": "boost"
        }
      ]
    }
  ]
}

A timeline represents the contents of a video edit over time, in seconds. A timeline consists of layers called tracks. Tracks are composed of titles, images or video segments referred to as clips which are placed along the track at specific starting point and lasting for a specific amount of time.

Properties

Name Type Required Restrictions Description
soundtrack Soundtrack false none A music or audio soundtrack file in mp3 format.
background string false none A hexidecimal value for the timeline background colour. Defaults to black (#000000).
tracks [Track] true none A timeline consists of an array of tracks, each track containing clips. Tracks are layered on top of each other in the same order they are added to the array with the top most track layered over the top of those below it. Ensure that a track containing titles is the top most track so that it is displayed above videos and images.

Soundtrack

{
  "src": "string",
  "effect": "fadeIn"
}

A music or audio file in mp3 format that plays for the duration of the rendered video or the length of the audio file, which ever is shortest.

Properties

Name Type Required Restrictions Description
src string true none The URL of the mp3 audio file. The URL must be publicly accessible or include credentials.
effect string false none The effect to apply to the audio file

Enumerated Values

Property Value
effect fadeIn
effect fadeOut
effect fadeInFadeOut

Track

{
  "clips": [
    {
      "asset": {
        "type": "title",
        "text": "string",
        "style": "minimal",
        "color": "white",
        "size": "medium",
        "background": "string",
        "position": "center",
        "offset": {
          "x": -1,
          "y": -1
        }
      },
      "start": 0,
      "length": 0,
      "fit": "crop",
      "scale": 0,
      "position": "center",
      "offset": {
        "x": -1,
        "y": -1
      },
      "transition": {
        "in": "fade",
        "out": "fade"
      },
      "effect": "zoomIn",
      "filter": "boost"
    }
  ]
}

A track contains an array of clips. Tracks are layered on top of each other in the order in the array. The top most track will render on top of those below it.

Properties

Name Type Required Restrictions Description
clips [Clip] true none An array of Clips comprising of TitleClip, ImageClip or VideoClip.

Clip

{
  "asset": {
    "type": "title",
    "text": "string",
    "style": "minimal",
    "color": "white",
    "size": "medium",
    "background": "string",
    "position": "center",
    "offset": {
      "x": -1,
      "y": -1
    }
  },
  "start": 0,
  "length": 0,
  "fit": "crop",
  "scale": 0,
  "position": "center",
  "offset": {
    "x": -1,
    "y": -1
  },
  "transition": {
    "in": "fade",
    "out": "fade"
  },
  "effect": "zoomIn",
  "filter": "boost"
}

A clip is a container for a specific type of asset, i.e. a title, photo or video. You use a Clip to define when an asset will display on the timeline, how long it will play for and transitions and effects to apply to it.

Properties

Name Type Required Restrictions Description
asset any true none The type of asset to display for the duration of this Clip. Value must be one of TitleAsset, ImageAsset or VideoAsset.

oneOf

Name Type Required Restrictions Description
» anonymous TitleAsset false none The TitleAsset clip type lets you create video titles from a text string and apply styling and positioning.

xor

Name Type Required Restrictions Description
» anonymous ImageAsset false none The ImageAsset is used to create video from images. The src must be a publicly accesible URL to an image resource such as a jpg or png file.

xor

Name Type Required Restrictions Description
» anonymous VideoAsset false none The VideoAsset is used to create video sequences from video files. The src must be a publicly accesible URL to a video resource such as an mp4 file. The in and out attributes of the parent Clip let you trim the video file by setting the start and end point to use.

xor

Name Type Required Restrictions Description
» anonymous HtmlAsset false none The HtmlAsset clip type lets you create text based layout and formatting using HTML and CSS. You can also set the height and width of a bounding box for the HTML content to sit within. Text and elements will wrap within the bounding box.

continued

Name Type Required Restrictions Description
start number true none The start position of the Clip on the timeline, in seconds.
length number true none The length, in seconds, the Clip should play for.
fit string false none Set how the asset should be scaled to fit the viewport using one of the following options:
  • cover - stretch the asset to fill the viewport without maintaining the aspect ratio.
  • contain - fit the entire asset within the viewport while maintaining the original aspect ratio.
  • crop - scale the asset to fill the viewport while maintaining the aspect ratio. The asset will be cropped if it exceeds the bounds of the viewport.
scale number false none Scale the asset to a fraction of the viewport size - i.e. setting the scale to 0.5 will scale asset to half the size of the viewport. This is useful for picture-in-picture video and scaling images such as logos and watermarks.
position string false none Place the asset in one of nine predefined positions of the viewport. This is most effective for when the asset is scaled and you want to position the element to a specific position.
offset Offset false none Offset the location of the asset relative to it's position on the viewport. The offset distance is relative to the width of the viewport - for example an x offset of 0.5 will move the asset half the viewport width to the right.
transition Transition false none In and out transitions for a clip - i.e. fade in and fade out
effect string false none A motion effect to apply to the Clip.
filter string false none A filter effect to apply to the Clip.

Enumerated Values

Property Value
fit cover
fit contain
fit crop
position top
position topRight
position right
position bottomRight
position bottom
position bottomLeft
position left
position topLeft
position center
effect zoomIn
effect zoomOut
effect slideLeft
effect slideRight
effect slideUp
effect slideDown
filter boost
filter contrast
filter darken
filter greyscale
filter lighten
filter muted
filter negative

TitleAsset

{
  "type": "title",
  "text": "string",
  "style": "minimal",
  "color": "white",
  "size": "medium",
  "background": "string",
  "position": "center",
  "offset": {
    "x": -1,
    "y": -1
  }
}

The TitleAsset clip type lets you create video titles from a text string and apply styling and positioning.

Properties

Name Type Required Restrictions Description
type string true none The type of asset - set to title for titles.
text string true none The title text string - i.e. "My Title".
style string false none Uses a preset to apply font properties and stylng to the title.
color string false none Set the text color using HTML color notation including hexidecimal, rgb, rgba and color name. Transparency is supported by setting the last two characters of a hex string, i.e. #ffffff33 or using rgba, i.e. rgba(255, 255, 255, 0.5).
size string false none Set the relative size of the text using predefined sizes from xx-small to xx-large.
background string false none Apply a background color behind the text using HTML color notation with support for transparency. Useful for subtitles.
position string false none Place the title in one of nine predefined positions of the viewport.
offset Offset false none Offset the location of the title relative to it's position on the screen.

Enumerated Values

Property Value
style minimal
style blockbuster
style vogue
style sketchy
style skinny
style chunk
style chunkLight
style marker
style future
style subtitle
size xx-small
size x-small
size small
size medium
size large
size x-large
size xx-large
position top
position topRight
position right
position bottomRight
position bottom
position bottomLeft
position left
position topLeft
position center

ImageAsset

{
  "type": "image",
  "src": "string"
}

The ImageAsset is used to create video from images. The src must be a publicly accesible URL to an image resource such as a jpg or png file.

Properties

Name Type Required Restrictions Description
type string true none The type of asset - set to image for images.
src string true none The image source URL. The URL must be publicly accessible or include credentials.

VideoAsset

{
  "type": "video",
  "src": "string",
  "trim": 0,
  "volume": 0
}

The VideoAsset is used to create video sequences from video files. The src must be a publicly accesible URL to a video resource such as an mp4 file. The in and out attributes of the parent Clip let you trim the video file by setting the start and end point to use.

Properties

Name Type Required Restrictions Description
type string true none The type of asset - set to video for videos.
src string true none The video source URL. The URL must be publicly accessible or include credentials.
trim number false none The start trim point of the clip, in seconds (defaults to 0). Videos will start from the in trim point. The video will play until the file ends or the Clip length is reached.
volume number false none Set the volume for the clip between 0 and 1 where 0 is muted and 1 is full volume (defaults to 0).

HtmlAsset

{
  "type": "html",
  "html": "<p>Hello <b>World</b></p>",
  "css": "p { color: #ffffff; } b { color: #ffff00; }",
  "width": 400,
  "height": 300,
  "background": "transparent",
  "position": "center"
}

The HtmlAsset clip type lets you create text based layout and formatting using HTML and CSS. You can also set the height and width of a bounding box for the HTML content to sit within. Text and elements will wrap within the bounding box.

Properties

Name Type Required Restrictions Description
type string true none The type of asset - set to html for HTML.
html string true none The HTML text string.
css string false none The CSS text string to apply styling to the HTML.
width number false none Set the width of the HTML asset bounding box. Text will wrap to fill the bounding box.
height number false none Set the width of the HTML asset bounding box. Text and elements will be masked if they exceed the height of the bounding box.
background string false none Apply a background color behind the HTML bounding box using HTML color notation with support for transparency.
position string false none Place the HTML in one of nine predefined positions within the HTML area.

Enumerated Values

Property Value
position top
position topRight
position right
position bottomRight
position bottom
position bottomLeft
position left
position topLeft
position center

Transition

{
  "in": "fade",
  "out": "fade"
}

In and out transitions for a clip - i.e. fade in and fade out

Properties

Name Type Required Restrictions Description
in string false none The transition in
out string false none The transition out

Enumerated Values

Property Value
in fade
in reveal
in wipeLeft
in wipeRight
out fade
out reveal
out wipeLeft
out wipeRight

Offset

{
  "x": -1,
  "y": -1
}

Offsets the position of an asset horizontally or vertically by a relative distance.

Properties

Name Type Required Restrictions Description
x number(float) false none Offset an asset on the horizontal axis (left or right), range varies from -1 to 1. Positive numbers move the asset right, negative left. For all assets except titles the distance moved is relative to the width of the viewport - i.e. an X offset of 0.5 will move the asset half the screen width to the right.
y number(float) false none Offset an asset on the vertical axis (up or down), range varies from -1 to 1. Positive numbers move the asset up, negative down. For all assets except titles the distance moved is relative to the height of the viewport - i.e. an Y offset of 0.5 will move the asset up half the screen height.

Output

{
  "format": "mp4",
  "resolution": "preview",
  "aspectRatio": "16:9"
}

The video output format.

Properties

Name Type Required Restrictions Description
format string true none mp4 video or animated gif
resolution string true none The output resoltion of the video.
aspectRatio string false none The aspect ratio (shape) of the video. Useful for social media sites. Options are:
  • 16:9 - regular landscape/horizontal aspect ratio (default)
  • 9:16 - vertical/portrait aspect ratio.
  • 1:1 - square aspect ratio.

Enumerated Values

Property Value
format mp4
format gif
resolution preview
resolution mobile
resolution sd
resolution hd
resolution 1080
aspectRatio 16:9
aspectRatio 9:16
aspectRatio 1:1

QueuedResponse

{
  "success": true,
  "message": "string",
  "response": {
    "message": "string",
    "id": "string"
  }
}

Properties

Name Type Required Restrictions Description
success boolean true none none
message string true none none
response QueuedResponseData true none none

QueuedResponseData

{
  "message": "string",
  "id": "string"
}

Properties

Name Type Required Restrictions Description
message string true none Success response message
id string true none The id of the render task in UUID format

RenderResponse

{
  "success": true,
  "message": "string",
  "response": {
    "status": "queued",
    "id": "string",
    "owner": "string",
    "url": "string",
    "data": {
      "timeline": {
        "soundtrack": {
          "src": "string",
          "effect": "fadeIn"
        },
        "background": "string",
        "tracks": [
          {
            "clips": [
              {
                "asset": {
                  "type": "title",
                  "text": "string",
                  "style": "minimal",
                  "color": "white",
                  "size": "medium",
                  "background": "string",
                  "position": "center",
                  "offset": {
                    "x": -1,
                    "y": -1
                  }
                },
                "start": 0,
                "length": 0,
                "fit": "crop",
                "scale": 0,
                "position": "center",
                "offset": {
                  "x": -1,
                  "y": -1
                },
                "transition": {
                  "in": "fade",
                  "out": "fade"
                },
                "effect": "zoomIn",
                "filter": "boost"
              }
            ]
          }
        ]
      },
      "output": {
        "format": "mp4",
        "resolution": "preview",
        "aspectRatio": "16:9"
      }
    },
    "created": "string",
    "updated": "string"
  }
}

Properties

Name Type Required Restrictions Description
success boolean true none none
message string true none none
response RenderResponseData true none none

RenderResponseData

{
  "status": "queued",
  "id": "string",
  "owner": "string",
  "url": "string",
  "data": {
    "timeline": {
      "soundtrack": {
        "src": "string",
        "effect": "fadeIn"
      },
      "background": "string",
      "tracks": [
        {
          "clips": [
            {
              "asset": {
                "type": "title",
                "text": "string",
                "style": "minimal",
                "color": "white",
                "size": "medium",
                "background": "string",
                "position": "center",
                "offset": {
                  "x": -1,
                  "y": -1
                }
              },
              "start": 0,
              "length": 0,
              "fit": "crop",
              "scale": 0,
              "position": "center",
              "offset": {
                "x": -1,
                "y": -1
              },
              "transition": {
                "in": "fade",
                "out": "fade"
              },
              "effect": "zoomIn",
              "filter": "boost"
            }
          ]
        }
      ]
    },
    "output": {
      "format": "mp4",
      "resolution": "preview",
      "aspectRatio": "16:9"
    }
  },
  "created": "string",
  "updated": "string"
}

Properties

Name Type Required Restrictions Description
status string true none The status of the render task
id string true none The id of the render task in UUID format
owner string true none The owner id of the render task
url string false none The URL of the final video. This will only be available if status is done.
data Edit true none The timeline and output data to be rendered
created string true none The time the render task was initially queued
updated string true none The time the render status was last updated

Enumerated Values

Property Value
status queued
status fetching
status rendering
status saving
status done
status failed