The Descript Zapier integration ships with built-in actions for Import Media and Edit with AI. To use any other Descript API endpoint from a Zap you'll need to send a direct request with Zapier's API Request action.Β
While this guide is specific to Zapier, this method of configuring direct api calls will also work if integrating Descript API into other automation tools for which no Descript integration exists (like n8n or Make).
This article covers:
- How to set up the connection
- How to find the endpoint you need
- How to configure the API Request action
- Response formats: sync vs. async
- Available endpoints and examples
These steps involve third-party tools
We make an honest effort to provide workflows for using the Descript API with these external tools, and your mileage may vary. If you run into issues using the Descript API with tools like Zapier and n8n, please contact the relevant support team for assistance.
Before getting started
You'll need three things:
- A Descript API token (create one here)
- A Zapier account
- The Descript API documentation open for reference
Step 1: Set up the connection
- In your Zap, add a new action step.
- Search for API by Zapier and select it. Note: this is a premium feature, and may not be available on all Zapier plans.
- Choose API Request as the action event.
- Click Connect a new account. A configuration window opens.
- Fill in the fields in the table below.
-
Click Yes, Continue to API by Zapier.
Field Value Authentication Type None Connection Name Descript API (or whatever you prefer) Domain Filter descriptapi.comHeaders (under Static Headers) Authorization: Bearer YOUR_API_TOKENon the first line,Content-Type: application/jsonon the second lineQuery Parameter Leave empty OAuth2 Leave empty
Use your own API token
As with the built-in integration, each team member should use their own token. We recommend against sharing the connection with your Zapier organization.
Step 2: Find the endpoint you need
Open the API documentation and find the endpoint you want to use. Each endpoint page lists the three things you'll enter in Zapier:
- The HTTP method β POST, GET, or DELETE. Look for the label next to the endpoint name (for example, "post Export project transcript").
-
The URL β shown in each endpoint section, for example
https://descriptapi.com/v1/export/transcript. - The request body β the JSON payload the endpoint expects. The docs list every field, whether it's required or optional, and what values it accepts.
Step 3: Configure the API Request action
Depending on the endpoint you're calling, you will need to specify a given set of inputs and values. Β Back in Zapier, fill in the action fields:
- Set the HTTP Method to match the docs (usually POST).
- Paste the full URL from the docs.
- In the Body field, enter your JSON payload. Reference data from earlier Zap steps using Zapier's
{{field}}syntax β for example, passing a project ID from an earlier Import Media step.
You don't need to add authentication headers here. They're included automatically from the connection you set up earlier.
Example: Export a transcript
To export a transcript as a text file with speaker labels and paragraph timecodes:
HTTP Method: POST
URL: https://descriptapi.com/v1/export/transcript
Body:
{
"project_id": "{{project_id_from_previous_step}}",
"format": "txt",
"include_speaker_labels": "changes",
"include_markers": true,
"timecodes": {
"on_paragraphs": true
}
}
The format field accepts: txt, markdown, html, rtf, or docx.
Response formats: sync vs. async
The built-in Descript Zapier actions handle polling and response parsing for you. When calling API Request directly, two patterns matter:
Async endpoints (like Publish) return a job_id in JSON. You'll need a follow-up step to poll GET https://descriptapi.com/v1/jobs/{{job_id}} until the job completes, or pass a callback_url in your request body to have Descript notify a Zapier webhook when the job finishes.
Sync endpoints (like Transcript Export) return the file content directly β not JSON. Zapier's API Request action expects JSON responses, so these may not parse cleanly. If you run into issues, try using a text-based format (like txt or markdown for transcripts) instead of binary formats (like docx), or handle the request in a Code by Zapier step where you have more control over the response.
Available endpoints and examples
For the full list of endpoints, request schemas, and code samples, see the API documentation. Endpoints not covered by the built-in Zapier integration include:
- Export transcript β export a composition's transcript as text, Markdown, HTML, RTF, or DOCX
- List projects β search and filter projects in your drive
- Get project details β inspect a project's media files and compositions
Examples
One example per endpoint, showing all available parameters with realistic values. All examples use POST or GET/DELETE as appropriate.
Import media and sequences
Method: POST
URL: https://descriptapi.com/v1/jobs/import/project_media
Body:
{
"project_name": "Q3 Campaign Video",
"team_access": "comment",
"folder_name": "Clients/Videos",
"add_media": {
"Intro/opener.mp4": {
"url": "https://storage.example.com/opener.mp4",
"language": "en"
},
"Main/interview.mp4": {
"url": "https://storage.example.com/interview.mp4",
"language": "en"
},
"Main/broll.mp4": {
"url": "https://storage.example.com/broll.mp4"
},
"Multitrack/session": {
"tracks": [
{ "media": "Main/interview.mp4", "offset": 0 },
{ "media": "Main/broll.mp4", "offset": 12.5 }
]
}
},
"add_compositions": [
{
"name": "Rough Cut",
"fps": 30,
"width": 1920,
"height": 1080,
"clips": [
{ "media": "Intro/opener.mp4" },
{ "media": "Multitrack/session" }
]
}
],
"callback_url": "INSERT ZAPIER CALLBACK URL HERE"
}
Agent edit
Method: POST
URL: https://descriptapi.com/v1/jobs/agent
Body:
{
"project_id": "YOUR_PROJECT_ID",
"composition_id": "YOUR_COMPOSITION_ID",
"prompt": "Remove all filler words, apply Studio Sound to every clip, add captions, and create a 60-second highlight reel as a separate composition",
"team_access": "view",
"conversation_id": "d1e2f3a4-b5c6-7890-abcd-ef1234567890",
"callback_url": "INSERT ZAPIER CALLBACK URL HERE"
}
Note:
conversation_idcontinues a prior agent conversation. Omit it to start fresh.project_namecan be used instead ofproject_idto create a new project from scratch.
Publish project media
Method: POST
URL: https://descriptapi.com/v1/jobs/publish
Body:
{
"project_id": "YOUR_PROJECT_ID",
"composition_id": "YOUR_COMPOSITION_ID",
"media_type": "Video",
"resolution": "1080p",
"access_level": "unlisted",
"callback_url": "INSERT ZAPIER CALLBACK URL HERE"
}
access_leveloptions:public,unlisted,drive,private. Defaults to the drive setting.resolutiononly applies whenmedia_typeisVideo.
Export project transcript
Method: POST
URL: https://descriptapi.com/v1/export/transcript
Body:
{
"project_id": "YOUR_PROJECT_ID",
"composition_id": "YOUR_COMPOSITION_ID",
"format": "markdown",
"include_speaker_labels": "every_paragraph",
"include_markers": true,
"timecodes": {
"on_paragraphs": true
}
}
formatoptions:txt,markdown,html,rtf,docx.include_speaker_labelsoptions:off,changes,every_paragraph. Response is the raw file content, not JSON β see the note on sync endpoints above.
List jobs
Method: GET
URL: https://descriptapi.com/v1/jobs?
Query params:
project_id,type(import/project_mediaoragent),limit(1β100, default 20),created_after,created_before(ISO 8601). Usecursorfrompagination.next_cursorto paginate.
Get job status
Method: GET
URL: https://descriptapi.com/v1/jobs/6dc3f30a-58c2-4174-96a6-dc18cf3c7776
No body. Replace the job ID in the path with the
job_idfrom any async job response (import, agent, publish).
Cancel job
Method: DELETE
URL: https://descriptapi.com/v1/jobs/6dc3f30a-58c2-4174-96a6-dc18cf3c7776
No body. Returns 204 on success. Irreversible β confirm the job ID before calling.
List projects
Method: GET
URL: https://descriptapi.com/v1/projects?
All params are optional query strings.
created_byaccepts a user UUID orme.sortoptions:name,created_at,updated_at,last_viewed_at. Usecursorfrompagination.next_cursorto paginate.
Get project details
Method: GET
URL: https://descriptapi.com/v1/projects/YOUR_PROJECT_ID
No body. Returns project metadata, all media files with type and duration, and all compositions with ID, name, duration, and media type. Β Note: This will only work with projects within the drive your API token is associated with.
Check API status
Method: GET
URL: https://descriptapi.com/v1/status
No body. Returns
{ "status": "ok" }if the token is valid. Note: this endpoint is marked as work in progress in the current docs and may return an error.