openapi: 3.0.0
info:
description: Descript API documentation.
version: '1.2'
title: Descript API Endpoints Export from Descript API
x-logo:
url: assets/descript-logo.svg
altText: Descript
license:
name: Proprietary
url: https://www.descript.com/terms
servers:
- url: https://descriptapi.com/v1
tags:
- name: Export from Descript
description: 'Users of Descript currently have three options to export their edited content. They can export files in various
formats, share a Descript link, or use our [one-click cloud export](https://help.descript.com/hc/en-us/articles/360043869551-Becoming-a-Supported-Content-Hosting-Partner)
to publish directly to a partner.
### Roundtrip Metadata
If Project data previously came from a partner via an Edit in Descript schema then any Descript Export pages
will include `` tags which contains the `partner_drive_id` and `source_id` provided when originally
importing into Descript. This allows partners to deduplicate data returning back to partner systems after
editing in Descript. Both partner and source properties are included on all public Descript Export pages.
```
```
'
paths:
/published_projects/{publishedProjectSlug}:
get:
tags:
- Export from Descript
summary: Get Published Project Metadata
description: '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.
'
operationId: getPublishedProjectMetadata
security:
- bearerAuth: []
parameters:
- in: path
name: publishedProjectSlug
description: The unique URL slug identifying the published project
required: true
schema:
type: string
responses:
'200':
description: Successfully retrieved published project metadata.
content:
application/json:
schema:
$ref: '#/components/schemas/PublishedProjectMetadata'
'401':
description: Unauthorized - invalid or missing authentication token.
content:
application/json:
schema:
$ref: '#/components/schemas/PublishedProjectPrivateError'
'403':
description: Forbidden - user does not have access to this published project.
content:
application/json:
schema:
$ref: '#/components/schemas/PublishedProjectForbiddenError'
'404':
description: Not found - published project does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/PublishedProjectError'
'409':
description: Conflict - published project is in an invalid state (processing or failed).
content:
application/json:
schema:
$ref: '#/components/schemas/PublishedProjectConflictError'
'429':
$ref: '#/components/responses/Error429Response'
components:
schemas:
PublishedProjectMetadata:
type: object
description: Metadata for a successfully published Descript project
properties:
download_url:
type: string
format: uri
description: A time-limited signed URL for downloading the original published media file. See download_url_expires_at for expiration date.
example: https://storage.googleapis.com/bucket/file.mp4?X-Goog-Signature=...
download_url_expires_at:
type: string
format: date-time
description: ISO 8601 timestamp indicating when the download_url expires. Present when download_url is present.
example: '2025-01-16T10:30:00.000Z'
project_id:
type: string
format: uuid
description: The unique identifier of the source Descript project
example: 12345678-1234-5678-1234-567812345678
publish_type:
type: string
enum:
- audio
- video
- audiogram
description: The type of published project
example: video
privacy:
type: string
enum:
- public
- unlisted
- private
- drive
- password
description: The access permission level for this published project
example: unlisted
metadata:
type: object
description: Detailed metadata about the published project
properties:
title:
type: string
description: The title of the published project
example: My Video Project
duration_seconds:
type: number
description: Duration of the published content in seconds (rounded to nearest millisecond)
example: 125.456
duration_formatted:
type: string
description: Human-readable duration in HH:MM:SS format
example: 00:02:05
published_at:
type: string
format: date-time
description: ISO 8601 timestamp of when the project was published
example: '2025-01-15T10:30:00.000Z'
published_by:
type: object
description: Information about the user who published the project
properties:
first_name:
type: string
description: First name of the publisher
example: Jane
last_name:
type: string
description: Last name of the publisher
example: Doe
subtitles:
type: string
description: Full VTT-formatted subtitle/caption content for the published project
example: WEBVTT\n\n00:00:00.000 --> 00:00:02.000\nWelcome to my video
required:
- project_id
- publish_type
- privacy
- metadata
- subtitles
PublishedProjectPrivateError:
type: object
description: Error response when published project is private to drive and user is unauthenticated
properties:
error:
type: string
enum:
- unauthorized
description: Error type identifier
example: unauthorized
message:
type: string
description: Human-readable error message
example: Private to drive, user must log in to account with access.
Error429:
description: 'Rate limit exceeded response. When this error is returned, the response includes headers
to help you implement proper retry logic:
- `Retry-After`: Number of seconds to wait before retrying
- `X-RateLimit-Remaining`: Requests remaining in current window
- `X-RateLimit-Consumed`: Requests consumed in current window
'
type: object
properties:
error:
type: string
description: Error code indicating rate limit was exceeded
example: rate_limit_exceeded
message:
type: string
description: Human-readable error message
example: Too many requests
required:
- error
- message
PublishedProjectConflictError:
type: object
description: Error response when published project is in an invalid state
properties:
error:
type: string
enum:
- conflict
description: Error type identifier
example: conflict
message:
type: string
description: Human-readable error message
example: Published in invalid state
state:
type: string
enum:
- processing
- failed
description: Current state of the published project
example: processing
required:
- error
- message
- state
PublishedProjectForbiddenError:
type: object
description: Error response when the user does not have access to the published project
properties:
error:
type: string
enum:
- forbidden
description: Error type identifier
example: forbidden
message:
type: string
description: Human-readable error message
example: User id 00000000-0000-0000-0000-000000000000 does not have access to this project
PublishedProjectError:
type: object
description: Error response for published project requests
properties:
error:
type: string
enum:
- not_found
- unauthorized
- forbidden
description: Error type identifier
example: not_found
message:
type: string
description: Human-readable error message
example: Published project not found
required:
- error
- message
responses:
Error429Response:
description: 'Too many requests - rate limit exceeded.
Use the `Retry-After` header to determine when to retry.
'
headers:
Retry-After:
description: Number of seconds to wait before retrying the request
schema:
type: integer
example: 30
X-RateLimit-Remaining:
description: Number of requests remaining in the current rate limit window
schema:
type: integer
example: 0
X-RateLimit-Consumed:
description: Number of requests consumed in the current rate limit window
schema:
type: integer
example: 100
content:
application/json:
schema:
$ref: '#/components/schemas/Error429'
examples:
rate_limit:
summary: Rate limit exceeded
value:
error: rate_limit_exceeded
message: Too many requests. Please try again later.
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: Personal API token created in Descript Settings → API Tokens. See the Authentication section for details.
x-tagGroups:
- name: Early Access Public API
tags:
- Getting started
- Using the CLI
- API Endpoints
- Direct file upload
- Authentication
- Rate Limiting
- name: Partner APIs
tags:
- Edit in Descript
- Export from Descript