curl --request GET \
--url https://descriptapi.com/v1/search \
--header 'Authorization: Bearer <token>'import requests
url = "https://descriptapi.com/v1/search"
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/search', 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/search",
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/search"
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/search")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://descriptapi.com/v1/search")
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{
"results": [
{
"type": "project",
"project_id": "9f36ee32-5a2c-47e7-b1a3-94991d3e3ddb",
"name": "Quarterly update",
"owner": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "Ada Lovelace"
},
"updated_at": "2026-08-15T14:00:00.000Z"
},
{
"type": "video",
"asset_id": "6dc3f30a-58c2-4174-96a6-dc18cf3c7776",
"name": "standup.mp4",
"location": "media_library",
"owner": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "Ada Lovelace"
},
"updated_at": "2026-08-12T09:30:00.000Z",
"duration": 184.5
}
]
}Search a drive
Search the drive tied to the personal API token. Matches project names, folder names, layout pack names, media file names, composition text, and transcripts across projects, the drive media library, and Brand Studio. Returns up to 100 results ranked by relevance.
curl --request GET \
--url https://descriptapi.com/v1/search \
--header 'Authorization: Bearer <token>'import requests
url = "https://descriptapi.com/v1/search"
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/search', 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/search",
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/search"
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/search")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://descriptapi.com/v1/search")
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{
"results": [
{
"type": "project",
"project_id": "9f36ee32-5a2c-47e7-b1a3-94991d3e3ddb",
"name": "Quarterly update",
"owner": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "Ada Lovelace"
},
"updated_at": "2026-08-15T14:00:00.000Z"
},
{
"type": "video",
"asset_id": "6dc3f30a-58c2-4174-96a6-dc18cf3c7776",
"name": "standup.mp4",
"location": "media_library",
"owner": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "Ada Lovelace"
},
"updated_at": "2026-08-12T09:30:00.000Z",
"duration": 184.5
}
]
}Authorizations
Personal API token created in Descript Settings → API Tokens. See the Authentication section for details.
Query Parameters
Search term. Matched against names and contents. Must be non-empty.
1Return results updated at or after this time. Accepts an ISO 8601
date (2026-08-01, interpreted as the start of that UTC day) or
timestamp (2026-08-01T09:30:00Z). Values without a timezone
offset are read as UTC.
Return results updated at or before this time. Accepts an ISO 8601
date (2026-08-01, interpreted as the end of that UTC day) or
timestamp (2026-08-01T23:59:59Z). Values without a timezone
offset are read as UTC.
Return items owned by these user UUIDs. Repeat this parameter to include more than one owner. If omitted, results from all owners are returned.
Result types to search. Repeat this parameter to search more than one type. If omitted, all result types are returned.
project: Projectslayout_pack: Layout packsproject_folder: Folders that hold projectsmedia_library_folder: Folders in the drive media libraryvideo,image,audio: Files of that media type in the drive media library, Brand Studio, and inside projects
project, video, image, audio, project_folder, media_library_folder, layout_pack How the query may match. Repeat this parameter to allow more than
one kind. name matches project, file, folder, and layout pack
names. content matches transcripts and composition text. If
omitted, names and contents both contribute.
name, content How to sort results:
relevance: closest matches first. This is the default.newest: most recently modified first.oldest: least recently modified first.
relevance, newest, oldest Maximum number of results to return. Defaults to 30. Maximum is 100.
1 <= x <= 100Response
Search completed successfully.
Ranked search results.
Search results ranked by relevance, best match first.
A project matched.
- Project search result
- Media search result
- Layout pack search result
- Project folder search result
- Media library folder search result
Show child attributes
Show child attributes

