import { OctosparkClient } from '@octospark/sdk'
const client = new OctosparkClient({
token: process.env.OCTOSPARK_TOKEN
})
const response = await client.slideshows.getContentRenderJob({
teamId: process.env.OCTOSPARK_TEAM_ID ?? "teamId",
renderJobId: process.env.OCTOSPARK_RENDER_JOB_ID ?? "renderJobId",
})import os
from octospark_sdk import OctosparkClient
client = OctosparkClient(token=os.environ["OCTOSPARK_TOKEN"])
response = client.slideshows.get_content_render_job(
teamId=os.environ.get("OCTOSPARK_TEAM_ID", "teamId"),
renderJobId=os.environ.get("OCTOSPARK_RENDER_JOB_ID", "renderJobId")
)octospark slideshows get-content-render-job \
--request '{"path":{"teamId":"teamId","renderJobId":"renderJobId"}}'use reqwest::Client;
use std::env;
#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
let client = Client::new();
let base_url = env::var("OCTOSPARK_API_URL").unwrap_or_else(|_| "https://api.octospark.ai".to_string());
let team_id = env::var("OCTOSPARK_TEAM_ID").unwrap_or_else(|_| "teamId".to_string());
let render_job_id = env::var("OCTOSPARK_RENDER_JOB_ID").unwrap_or_else(|_| "renderJobId".to_string());
let url = format!("{}/v1/teams/{}/content/render-jobs/{}", base_url.trim_end_matches('/'), team_id, render_job_id);
let token = env::var("OCTOSPARK_TOKEN").expect("OCTOSPARK_TOKEN");
let mut request = client.get(url).bearer_auth(token);
let response = request.send().await?;
println!("{}", response.text().await?);
Ok(())
}import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
Future<void> main() async {
final baseUrl = Platform.environment['OCTOSPARK_API_URL'] ?? 'https://api.octospark.ai';
final token = Platform.environment['OCTOSPARK_TOKEN'];
final teamId = Platform.environment['OCTOSPARK_TEAM_ID'] ?? 'teamId';
final renderJobId = Platform.environment['OCTOSPARK_RENDER_JOB_ID'] ?? 'renderJobId';
final url = '${baseUrl.replaceFirst(RegExp(r'/$'), '')}/v1/teams/$teamId/content/render-jobs/$renderJobId';
final uri = Uri.parse(url);
final headers = {
'Authorization': 'Bearer $token',
};
final response = await http.get(
uri,
headers: headers,
);
print(response.body);
}curl --request GET \
--url https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId} \
--header 'Authorization: Bearer <token>'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body$headers=@{}
$headers.Add("Authorization", "Bearer <token>")
$response = Invoke-WebRequest -Uri 'https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}' -Method GET -Headers $headersimport Foundation
let url = URL(string: "https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.timeoutInterval = 10
request.allHTTPHeaderFields = ["Authorization": "Bearer <token>"]
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))using RestSharp;
var options = new RestClientOptions("https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
using RestSharp;
var options = new RestClientOptions("https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);val client = OkHttpClient()
val request = Request.Builder()
.url("https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}")
.get()
.addHeader("Authorization", "Bearer <token>")
.build()
val response = client.newCall(request).execute(){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contentItemId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"artifactRunId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"payloadId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"payloadRevision": 123,
"creativeHash": "<string>",
"rendererVersion": "<string>",
"status": "<string>",
"workflowId": "<string>",
"outputWidth": 123,
"outputHeight": 123,
"slideCount": 123,
"pixelCount": 123,
"outputManifest": {},
"durationMs": 123,
"hostId": "<string>",
"errorClass": "<string>",
"errorCode": "<string>",
"diagnostics": "<string>",
"retryable": true,
"createdAt": "<string>",
"startedAt": "<string>",
"completedAt": "<string>",
"updatedAt": "<string>",
"projectSnapshot": {
"schemaVersion": 1,
"artifactKind": "slideshow",
"runtime": {
"rendererVersion": "<string>",
"remotionVersion": "<string>",
"reactVersion": "<string>",
"platform": "linux-arm64",
"entryPoint": "<string>",
"dependencyAllowlistVersion": "<string>"
},
"sourceFiles": [
{
"path": "<string>",
"contents": "<string>",
"sha256": "<string>"
}
],
"output": {
"aspectRatio": "4:5",
"width": 123,
"height": 123,
"fps": 30
},
"slides": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"durationFrames": 9000,
"posterFrame": 1,
"assetBindingIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"textElements": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"role": "hook",
"text": "<string>",
"position": {
"x": 0,
"y": 0,
"width": 50000.5,
"height": 50000.5,
"rotation": 0
},
"styleId": "<string>",
"overrides": {
"fontFamily": "TikTok Display",
"fontWeight": 500,
"fontSize": 259,
"lineHeight": 2.25,
"letterSpacing": 32,
"fill": "<string>",
"strokeColor": "<string>",
"strokeWidth": 16,
"shadowColor": "<string>",
"shadowBlur": 64,
"shadowOffsetX": 0,
"shadowOffsetY": 0,
"panelColor": "<string>",
"panelOpacity": 0.5,
"padding": 128,
"borderRadius": 128,
"textAlign": "left",
"verticalAlign": "top",
"italic": true,
"opacity": 0.5,
"maxWidth": 2048.5
}
}
],
"backgroundBindingId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"backgroundPresentation": {
"fit": "cover",
"focalPoint": {
"x": 0.5,
"y": 0.5
},
"overlay": {
"color": "<string>",
"opacity": 0.5
}
},
"embeddedText": [
{
"role": "hook",
"text": "<string>"
}
]
}
],
"styles": {},
"assetBindings": {},
"styleContext": {
"renderTokens": {},
"references": [
{
"source": "team_asset",
"sourceId": "<string>",
"label": "<string>",
"sha256": "<string>"
}
]
}
}
}{
"issues": [
{
"_tag": "Pointer",
"path": [
"<string>"
],
"message": "<string>"
}
],
"message": "<string>",
"_tag": "HttpApiDecodeError"
}{
"message": "<string>",
"_tag": "Unauthorized"
}{
"message": "<string>",
"_tag": "PaymentRequired"
}{
"message": "<string>",
"_tag": "Forbidden"
}{
"message": "<string>",
"_tag": "NotFound"
}{
"message": "<string>",
"_tag": "Conflict",
"code": "<string>",
"currentRevision": 123
}{
"message": "<string>",
"code": "<string>",
"_tag": "UnprocessableEntity"
}{
"message": "<string>",
"_tag": "TooManyRequests",
"code": "<string>",
"retryAfterSeconds": 123
}{
"message": "<string>",
"_tag": "InternalError"
}Content render job
Get one content render job, including its frozen project snapshot, creative hash, renderer version, progress state, output manifest, timing, and any failure diagnostics. Use the events endpoint when a caller needs incremental progress instead of polling this snapshot.
import { OctosparkClient } from '@octospark/sdk'
const client = new OctosparkClient({
token: process.env.OCTOSPARK_TOKEN
})
const response = await client.slideshows.getContentRenderJob({
teamId: process.env.OCTOSPARK_TEAM_ID ?? "teamId",
renderJobId: process.env.OCTOSPARK_RENDER_JOB_ID ?? "renderJobId",
})import os
from octospark_sdk import OctosparkClient
client = OctosparkClient(token=os.environ["OCTOSPARK_TOKEN"])
response = client.slideshows.get_content_render_job(
teamId=os.environ.get("OCTOSPARK_TEAM_ID", "teamId"),
renderJobId=os.environ.get("OCTOSPARK_RENDER_JOB_ID", "renderJobId")
)octospark slideshows get-content-render-job \
--request '{"path":{"teamId":"teamId","renderJobId":"renderJobId"}}'use reqwest::Client;
use std::env;
#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
let client = Client::new();
let base_url = env::var("OCTOSPARK_API_URL").unwrap_or_else(|_| "https://api.octospark.ai".to_string());
let team_id = env::var("OCTOSPARK_TEAM_ID").unwrap_or_else(|_| "teamId".to_string());
let render_job_id = env::var("OCTOSPARK_RENDER_JOB_ID").unwrap_or_else(|_| "renderJobId".to_string());
let url = format!("{}/v1/teams/{}/content/render-jobs/{}", base_url.trim_end_matches('/'), team_id, render_job_id);
let token = env::var("OCTOSPARK_TOKEN").expect("OCTOSPARK_TOKEN");
let mut request = client.get(url).bearer_auth(token);
let response = request.send().await?;
println!("{}", response.text().await?);
Ok(())
}import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
Future<void> main() async {
final baseUrl = Platform.environment['OCTOSPARK_API_URL'] ?? 'https://api.octospark.ai';
final token = Platform.environment['OCTOSPARK_TOKEN'];
final teamId = Platform.environment['OCTOSPARK_TEAM_ID'] ?? 'teamId';
final renderJobId = Platform.environment['OCTOSPARK_RENDER_JOB_ID'] ?? 'renderJobId';
final url = '${baseUrl.replaceFirst(RegExp(r'/$'), '')}/v1/teams/$teamId/content/render-jobs/$renderJobId';
final uri = Uri.parse(url);
final headers = {
'Authorization': 'Bearer $token',
};
final response = await http.get(
uri,
headers: headers,
);
print(response.body);
}curl --request GET \
--url https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId} \
--header 'Authorization: Bearer <token>'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body$headers=@{}
$headers.Add("Authorization", "Bearer <token>")
$response = Invoke-WebRequest -Uri 'https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}' -Method GET -Headers $headersimport Foundation
let url = URL(string: "https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.timeoutInterval = 10
request.allHTTPHeaderFields = ["Authorization": "Bearer <token>"]
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))using RestSharp;
var options = new RestClientOptions("https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
using RestSharp;
var options = new RestClientOptions("https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);val client = OkHttpClient()
val request = Request.Builder()
.url("https://api-staging.octospark.ai/v1/teams/{teamId}/content/render-jobs/{renderJobId}")
.get()
.addHeader("Authorization", "Bearer <token>")
.build()
val response = client.newCall(request).execute(){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contentItemId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"artifactRunId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"payloadId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"payloadRevision": 123,
"creativeHash": "<string>",
"rendererVersion": "<string>",
"status": "<string>",
"workflowId": "<string>",
"outputWidth": 123,
"outputHeight": 123,
"slideCount": 123,
"pixelCount": 123,
"outputManifest": {},
"durationMs": 123,
"hostId": "<string>",
"errorClass": "<string>",
"errorCode": "<string>",
"diagnostics": "<string>",
"retryable": true,
"createdAt": "<string>",
"startedAt": "<string>",
"completedAt": "<string>",
"updatedAt": "<string>",
"projectSnapshot": {
"schemaVersion": 1,
"artifactKind": "slideshow",
"runtime": {
"rendererVersion": "<string>",
"remotionVersion": "<string>",
"reactVersion": "<string>",
"platform": "linux-arm64",
"entryPoint": "<string>",
"dependencyAllowlistVersion": "<string>"
},
"sourceFiles": [
{
"path": "<string>",
"contents": "<string>",
"sha256": "<string>"
}
],
"output": {
"aspectRatio": "4:5",
"width": 123,
"height": 123,
"fps": 30
},
"slides": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"durationFrames": 9000,
"posterFrame": 1,
"assetBindingIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"textElements": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"role": "hook",
"text": "<string>",
"position": {
"x": 0,
"y": 0,
"width": 50000.5,
"height": 50000.5,
"rotation": 0
},
"styleId": "<string>",
"overrides": {
"fontFamily": "TikTok Display",
"fontWeight": 500,
"fontSize": 259,
"lineHeight": 2.25,
"letterSpacing": 32,
"fill": "<string>",
"strokeColor": "<string>",
"strokeWidth": 16,
"shadowColor": "<string>",
"shadowBlur": 64,
"shadowOffsetX": 0,
"shadowOffsetY": 0,
"panelColor": "<string>",
"panelOpacity": 0.5,
"padding": 128,
"borderRadius": 128,
"textAlign": "left",
"verticalAlign": "top",
"italic": true,
"opacity": 0.5,
"maxWidth": 2048.5
}
}
],
"backgroundBindingId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"backgroundPresentation": {
"fit": "cover",
"focalPoint": {
"x": 0.5,
"y": 0.5
},
"overlay": {
"color": "<string>",
"opacity": 0.5
}
},
"embeddedText": [
{
"role": "hook",
"text": "<string>"
}
]
}
],
"styles": {},
"assetBindings": {},
"styleContext": {
"renderTokens": {},
"references": [
{
"source": "team_asset",
"sourceId": "<string>",
"label": "<string>",
"sha256": "<string>"
}
]
}
}
}{
"issues": [
{
"_tag": "Pointer",
"path": [
"<string>"
],
"message": "<string>"
}
],
"message": "<string>",
"_tag": "HttpApiDecodeError"
}{
"message": "<string>",
"_tag": "Unauthorized"
}{
"message": "<string>",
"_tag": "PaymentRequired"
}{
"message": "<string>",
"_tag": "Forbidden"
}{
"message": "<string>",
"_tag": "NotFound"
}{
"message": "<string>",
"_tag": "Conflict",
"code": "<string>",
"currentRevision": 123
}{
"message": "<string>",
"code": "<string>",
"_tag": "UnprocessableEntity"
}{
"message": "<string>",
"_tag": "TooManyRequests",
"code": "<string>",
"retryAfterSeconds": 123
}{
"message": "<string>",
"_tag": "InternalError"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Team (workspace) id (UUID). Discover ids via the list teams endpoint or the agent context.
Render job id (UUID), as returned by createContentRenderJob or an artifact run.
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$Response
ContentRenderJobDetailResponse
a Universally Unique Identifier
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$a Universally Unique Identifier
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$a Universally Unique Identifier
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$a Universally Unique Identifier
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$an integer
an integer
an integer
an integer
an integer
Show child attributes
Show child attributes
an integer
Complete deterministic slideshow project, including slides, styles, asset bindings, output settings, and the pinned renderer runtime.
Show child attributes
Show child attributes