curl --request POST \
--url https://api.parallellabs.app/api/v0/content/canvases/{canvas_id}/render-video \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.parallellabs.app/api/v0/content/canvases/{canvas_id}/render-video"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.parallellabs.app/api/v0/content/canvases/{canvas_id}/render-video', 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.parallellabs.app/api/v0/content/canvases/{canvas_id}/render-video",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.parallellabs.app/api/v0/content/canvases/{canvas_id}/render-video"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.parallellabs.app/api/v0/content/canvases/{canvas_id}/render-video")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/content/canvases/{canvas_id}/render-video")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"companyId": "<string>",
"name": "<string>",
"width": 123,
"height": 123,
"format": "<string>",
"htmlContent": "<string>",
"animated": true,
"videoDuration": 123,
"imageId": "<string>",
"imageUrl": "<string>",
"videoId": "<string>",
"videoUrl": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Record the canvas's saved HTML to a permanent public looping MP4 (charged at DATA_CREDIT_COST_CANVAS_VIDEO).
Seeks the design’s CSS animation timeline frame by frame, so the canvas HTML must animate with CSS keyframes for the video to show any motion.
curl --request POST \
--url https://api.parallellabs.app/api/v0/content/canvases/{canvas_id}/render-video \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.parallellabs.app/api/v0/content/canvases/{canvas_id}/render-video"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.parallellabs.app/api/v0/content/canvases/{canvas_id}/render-video', 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.parallellabs.app/api/v0/content/canvases/{canvas_id}/render-video",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.parallellabs.app/api/v0/content/canvases/{canvas_id}/render-video"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.parallellabs.app/api/v0/content/canvases/{canvas_id}/render-video")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/content/canvases/{canvas_id}/render-video")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"companyId": "<string>",
"name": "<string>",
"width": 123,
"height": 123,
"format": "<string>",
"htmlContent": "<string>",
"animated": true,
"videoDuration": 123,
"imageId": "<string>",
"imageUrl": "<string>",
"videoId": "<string>",
"videoUrl": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Company API key - scoped to a specific company. Generate from the Integrations page in your dashboard.
Path Parameters
Response
Canvas with its recorded MP4 url
Canvas design
Canvas ID
Company ID
Canvas name
Canvas width in pixels
Canvas height in pixels
Named canvas format id, when the size came from one
The standalone HTML document for the canvas
Whether the canvas is animated (exports a looping MP4 instead of a PNG)
Loop length in seconds for animated canvases
Images table id of the last render
Public PNG URL of the last render
Videos table id of the last recording (animated canvases)
Public MP4 URL of the last recording (animated canvases)

