curl --request GET \
--url https://api.motion.so/api/motion/sessions/{job_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.motion.so/api/motion/sessions/{job_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.motion.so/api/motion/sessions/{job_id}', 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.motion.so/api/motion/sessions/{job_id}",
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.motion.so/api/motion/sessions/{job_id}"
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.motion.so/api/motion/sessions/{job_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.motion.so/api/motion/sessions/{job_id}")
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{
"job_id": "<string>",
"status": "queued",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"error": "<string>",
"pending_user_input": true,
"output": {
"status": "pending",
"download_url": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"error": "<string>"
},
"chat_url": "<string>",
"sources": [
{
"id": "<string>",
"source_kind": "licensed_library",
"provider": "<string>",
"provider_asset_id": "<string>",
"source_url": "<string>",
"display_url": "<string>",
"source_domain": "<string>",
"media_type": "image",
"title": "<string>",
"credit": "<string>",
"rights_status": "licensed",
"usages": [
{
"start_seconds": 123,
"end_seconds": 123,
"duration_seconds": 123,
"scene_id": "<string>",
"scene_index": 123,
"slot_key": "<string>",
"element_tag": "<string>",
"composition_file": "<string>",
"composition_id": "<string>",
"track_index": 123
}
],
"source_metadata": {},
"rights_metadata": {}
}
],
"engine": "<string>",
"effort": "standard",
"template": "<string>"
}{
"error": "<string>",
"details": [
{}
]
}{
"error": "<string>",
"details": [
{}
]
}Get video job status
curl --request GET \
--url https://api.motion.so/api/motion/sessions/{job_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.motion.so/api/motion/sessions/{job_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.motion.so/api/motion/sessions/{job_id}', 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.motion.so/api/motion/sessions/{job_id}",
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.motion.so/api/motion/sessions/{job_id}"
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.motion.so/api/motion/sessions/{job_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.motion.so/api/motion/sessions/{job_id}")
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{
"job_id": "<string>",
"status": "queued",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"error": "<string>",
"pending_user_input": true,
"output": {
"status": "pending",
"download_url": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"error": "<string>"
},
"chat_url": "<string>",
"sources": [
{
"id": "<string>",
"source_kind": "licensed_library",
"provider": "<string>",
"provider_asset_id": "<string>",
"source_url": "<string>",
"display_url": "<string>",
"source_domain": "<string>",
"media_type": "image",
"title": "<string>",
"credit": "<string>",
"rights_status": "licensed",
"usages": [
{
"start_seconds": 123,
"end_seconds": 123,
"duration_seconds": 123,
"scene_id": "<string>",
"scene_index": 123,
"slot_key": "<string>",
"element_tag": "<string>",
"composition_file": "<string>",
"composition_id": "<string>",
"track_index": 123
}
],
"source_metadata": {},
"rights_metadata": {}
}
],
"engine": "<string>",
"effort": "standard",
"template": "<string>"
}{
"error": "<string>",
"details": [
{}
]
}{
"error": "<string>",
"details": [
{}
]
}Authorizations
Motion API key (motion_ prefix), authenticated as its owner. Account and engine permissions still apply.
Path Parameters
Job ID returned by POST /sessions.
Response
Job status
queued, created, running, awaiting_user_input, completed, failed Download readiness state. There is no separate public output/download endpoint; poll this status response until output.status is completed and output.download_url is non-null.
Show child attributes
Show child attributes
Motion app chat URL for a human to open, inspect, or continue the run. Null for legacy jobs without a Motion agent chat.
Additive source-asset audit list for media currently used in the composition. Empty when no source assets are recorded yet. Internal storage paths, filenames, and GCS URIs are not exposed.
Show child attributes
Show child attributes
Null when engine details are unavailable to this account.
Null when engine details are unavailable to this account.
standard, extended, light, medium, high, null Was this page helpful?