curl --request GET \
--url https://descriptapi.com/v1/published_projects/{publishedProjectSlug} \
--header 'Authorization: Bearer <token>'import requests
url = "https://descriptapi.com/v1/published_projects/{publishedProjectSlug}"
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/published_projects/{publishedProjectSlug}', 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/published_projects/{publishedProjectSlug}",
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/published_projects/{publishedProjectSlug}"
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/published_projects/{publishedProjectSlug}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://descriptapi.com/v1/published_projects/{publishedProjectSlug}")
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{
"project_id": "12345678-1234-5678-1234-567812345678",
"publish_type": "video",
"privacy": "unlisted",
"metadata": {
"title": "My Video Project",
"duration_seconds": 125.456,
"duration_formatted": "00:02:05",
"published_at": "2025-01-15T10:30:00.000Z",
"published_by": {
"first_name": "Jane",
"last_name": "Doe"
}
},
"subtitles": "WEBVTT\\n\\n00:00:00.000 --> 00:00:02.000\\nWelcome to my video",
"download_url": "https://storage.googleapis.com/bucket/file.mp4?X-Goog-Signature=...",
"download_url_expires_at": "2025-01-16T10:30:00.000Z"
}{
"error": "unauthorized",
"message": "Private to drive, user must log in to account with access."
}{
"error": "forbidden",
"message": "User id 00000000-0000-0000-0000-000000000000 does not have access to this project"
}{
"error": "not_found",
"message": "Published project not found"
}{
"error": "conflict",
"message": "Published in invalid state",
"state": "processing"
}{
"error": "rate_limit_exceeded",
"message": "Too many requests. Please try again later."
}Get Published Project Metadata
Retrieve metadata for a published Descript project by its URL slug. This endpoint provides information about the published project including title, duration, publisher details, privacy settings, and subtitles.
This endpoint requires authentication using a personal token and is subject to rate limiting of 1000 requests per hour per user.
curl --request GET \
--url https://descriptapi.com/v1/published_projects/{publishedProjectSlug} \
--header 'Authorization: Bearer <token>'import requests
url = "https://descriptapi.com/v1/published_projects/{publishedProjectSlug}"
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/published_projects/{publishedProjectSlug}', 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/published_projects/{publishedProjectSlug}",
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/published_projects/{publishedProjectSlug}"
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/published_projects/{publishedProjectSlug}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://descriptapi.com/v1/published_projects/{publishedProjectSlug}")
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{
"project_id": "12345678-1234-5678-1234-567812345678",
"publish_type": "video",
"privacy": "unlisted",
"metadata": {
"title": "My Video Project",
"duration_seconds": 125.456,
"duration_formatted": "00:02:05",
"published_at": "2025-01-15T10:30:00.000Z",
"published_by": {
"first_name": "Jane",
"last_name": "Doe"
}
},
"subtitles": "WEBVTT\\n\\n00:00:00.000 --> 00:00:02.000\\nWelcome to my video",
"download_url": "https://storage.googleapis.com/bucket/file.mp4?X-Goog-Signature=...",
"download_url_expires_at": "2025-01-16T10:30:00.000Z"
}{
"error": "unauthorized",
"message": "Private to drive, user must log in to account with access."
}{
"error": "forbidden",
"message": "User id 00000000-0000-0000-0000-000000000000 does not have access to this project"
}{
"error": "not_found",
"message": "Published project not found"
}{
"error": "conflict",
"message": "Published in invalid state",
"state": "processing"
}{
"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 unique URL slug identifying the published project
Response
Successfully retrieved published project metadata.
Metadata for a successfully published Descript project
The unique identifier of the source Descript project
"12345678-1234-5678-1234-567812345678"
The type of published project
audio, video, audiogram "video"
The access permission level for this published project
public, unlisted, private, drive, password "unlisted"
Detailed metadata about the published project
Show child attributes
Show child attributes
Full VTT-formatted subtitle/caption content for the published project
"WEBVTT\\n\\n00:00:00.000 --> 00:00:02.000\\nWelcome to my video"
A time-limited signed URL for downloading the original published media file. See download_url_expires_at for expiration date.
"https://storage.googleapis.com/bucket/file.mp4?X-Goog-Signature=..."
ISO 8601 timestamp indicating when the download_url expires. Present when download_url is present.
"2025-01-16T10:30:00.000Z"

