curl --request GET \
--url https://descriptapi.com/v1/projects/{project_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://descriptapi.com/v1/projects/{project_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://descriptapi.com/v1/projects/{project_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://descriptapi.com/v1/projects/{project_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://descriptapi.com/v1/projects/{project_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://descriptapi.com/v1/projects/{project_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://descriptapi.com/v1/projects/{project_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{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"drive_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"media_files": {},
"compositions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"duration": 123,
"media_type": "<string>"
}
],
"publishes": [
{
"share_url": "https://share.descript.com/view/abc123",
"composition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"access_level": "public",
"media_type": "video",
"published_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"name": "<string>"
}
],
"folder_path": "Clients/Acme/Videos"
}{
"error": "invalid_input",
"message": "Invalid request body"
}{
"error": "unauthorized",
"message": "Missing or invalid authentication token"
}{
"error": "forbidden",
"message": "User does not have access to this resource"
}{
"error": "not_found",
"message": "Resource not found"
}{
"error": "rate_limit_exceeded",
"message": "Too many requests. Please try again later."
}Get project details
Get a detailed project summary including all media files, compositions, and existing publishes.
Returns the project’s id, name, drive_id, a map of media files (keyed by display path) with type and duration, a list of compositions with id, name, duration, and media type, and a list of successfully published share pages with their URLs, access levels, and publish times.
Use this to inspect a project’s contents before editing or importing media, or to retrieve existing share URLs without triggering a republish.
curl --request GET \
--url https://descriptapi.com/v1/projects/{project_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://descriptapi.com/v1/projects/{project_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://descriptapi.com/v1/projects/{project_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://descriptapi.com/v1/projects/{project_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://descriptapi.com/v1/projects/{project_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://descriptapi.com/v1/projects/{project_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://descriptapi.com/v1/projects/{project_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{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"drive_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"media_files": {},
"compositions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"duration": 123,
"media_type": "<string>"
}
],
"publishes": [
{
"share_url": "https://share.descript.com/view/abc123",
"composition_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"access_level": "public",
"media_type": "video",
"published_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"name": "<string>"
}
],
"folder_path": "Clients/Acme/Videos"
}{
"error": "invalid_input",
"message": "Invalid request body"
}{
"error": "unauthorized",
"message": "Missing or invalid authentication token"
}{
"error": "forbidden",
"message": "User does not have access to this resource"
}{
"error": "not_found",
"message": "Resource not found"
}{
"error": "rate_limit_exceeded",
"message": "Too many requests. Please try again later."
}Authorizations
Personal API token created in Descript Settings → API Tokens. See the Authentication section for details.
Path Parameters
The project UUID
Response
Project details retrieved successfully
Project ID
Project name
Drive ID the project belongs to
When the project was created (ISO 8601)
When the project was last updated (ISO 8601)
Map of display path to media file info
Show child attributes
Show child attributes
Compositions in the project
Show child attributes
Show child attributes
Successfully published share pages for this project. Each entry represents a composition that has been published and is accessible via its share_url.
Show child attributes
Show child attributes
Full folder path for the project (e.g. "Clients/Acme/Videos"). Absent when the project is at the drive root.
"Clients/Acme/Videos"

