{ "job_id": "6dc3f30a-58c2-4174-96a6-dc18cf3c7776", "drive_id": "c9c5c47e-158a-49f7-846b-4f6ee2a229a2", "project_id": "9f36ee32-5a2c-47e7-b1a3-94991d3e3ddb", "project_url": "https://web.descript.com/9f36ee32-5a2c-47e7-b1a3-94991d3e3ddb", "drive_name": "My Team Workspace", "upload_urls": {}}
Import media and sequences
Import media files into a new or existing project and create compositions.
This endpoint can:
Create a new project if project_id is not provided
Import media files from URLs
Create multitrack sequences
Create compositions (timelines) from existing or new media in the project
Trigger transcription and other background processing tasks
Media URL requirements
URLs must be accessible by Descript servers
URLs must support HTTP Range requests
Recommended to sign URLs for 12-48 hours to reduce chance of failure
Supported file types: the API accepts more containers and codecs than the app, including MXF, MPEG-TS, and AVI
Direct file upload
Instead of providing a URL, you can upload files directly by specifying content_type and file_size for a media item. The response will include a signed upload_url for each direct upload item. PUT the file bytes to that URL, and the import job will process it automatically. See the Direct file upload guide for a full walkthrough.
Async Operations
Imports run in the background and return a job_id. Monitor progress via the GET /jobs/ endpoint.
Dynamic webhook
If callback_url is provided, Descript will POST the job status to that URL when the job finishes (successfully or not).
The payload will match the format returned by GET /jobs/.
Existing project ID to import media into. If not provided, a new project will be created.
When importing into an existing project, media filenames must not conflict with existing files.
Folder path to place the new project in (e.g. "Clients/Acme/Videos").
Supports nested paths using "/" as separator. Only applicable when creating a new project
(when project_id is not provided). Existing folders along the path are reused; missing
segments are created automatically.
Existing workspace to create the new project in, matched by name (case-insensitive).
Only applicable when creating a new project (when project_id is not provided).
Reserved names: Personal (your private space) and General (the shared drive workspace).
Any other value is looked up as a custom workspace name; unknown names return 404.
When omitted, team_access is passed through unchanged.
When set to Personal, team_access must be none or omitted.
When set to General or a custom workspace name, team_access must be
edit, comment, or view; omitting it defaults to view, and none is rejected.
For custom workspaces, the caller must be a member of that workspace.
Map of media reference IDs (display names with optional folder paths) to media import items.
Keys are the display names that will appear in the project (e.g., "Misc/intro.mp4" or "demo.mp4").
Values define how to import each media item (URL import or multitrack sequence).
Signed upload URLs for each direct upload media item. Only present when the request
includes direct upload references. PUT the file contents to the upload_url with
Content-Type: application/octet-stream. The import job will automatically detect
the upload and process the file.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Descript Help Center","description":"User guides and documentation for Descript, a text-based video and audio editor.","colors":{"primary":"#651A39","light":"#CDCDFE","dark":"#F73B3B"},"logo":{"light":"https://mintcdn.com/descript-5bf56f3f/cSbTRRN32pg3UC1d/images/01a_Logo_2_color_Dark.png?fit=max\u0026auto=format\u0026n=cSbTRRN32pg3UC1d\u0026q=85\u0026s=5d5e4bea817ea025e6f7daf713a7fcfe","dark":"https://mintcdn.com/descript-5bf56f3f/cSbTRRN32pg3UC1d/images/01b_Logo_2_color_Light.png?fit=max\u0026auto=format\u0026n=cSbTRRN32pg3UC1d\u0026q=85\u0026s=90296d892f5b71071480e08d18b959b8"},"favicon":"https://mintcdn.com/descript-5bf56f3f/cSbTRRN32pg3UC1d/images/02a_Monogram_Primary.png?fit=max\u0026auto=format\u0026n=cSbTRRN32pg3UC1d\u0026q=85\u0026s=0dcc0c665590f0d18907633e2c109a25","api":{"openapi":"developers/openapi.json"},"appearance":{"default":"system"},"background":{"color":{"light":"#fdfcfc","dark":"#110A0D"}},"navbar":{"links":[]},"footer":{"socials":{"x":"https://x.com/descript","website":"https://www.descript.com","discord":"https://discord.com/channels/764925197379174411/960303941789294602","reddit":"https://www.reddit.com/r/Descript","facebook":"https://www.facebook.com/descriptapp"}},"fonts":{"heading":{"family":"Booton SemiBold","weight":500},"body":{"family":"Booton Regular","weight":500}},"styling":{"eyebrows":"breadcrumbs","latex":false},"integrations":{"ga4":{"measurementId":"G-5C5EVM1H51"},"posthog":{"apiKey":"phc_w3ZqFHxxJraLWo3LU7wfDkCEhJZLo0X22W9e0VFu2Vu","sessionRecording":true}},"contextual":{"options":["copy","view","assistant","chatgpt","claude","perplexity","grok","aistudio","mcp","cursor","vscode","download-spec","download-pdf"],"display":"header"},"interaction":{"drilldown":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"descript-5bf56f3f","hasAudioNarration":false,"actualSubdomain":"descript-5bf56f3f","customDomains":["help.descript.com","docs.descriptapi.com"],"gitSource":{"type":"github","owner":"descriptinc","repo":"descript","deployBranch":"main","contentDirectory":"help-center","isPrivate":true,"mountPath":"","label":"","isBase":true},"chroma":{"liveDeploymentHistoryId":"6aea4ba3686df1f3186fbd49","collectionId":"79ffc07a-e967-425d-9d18-798a9401dd6a","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aea4ba3686df1f3186fbd49"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aea5bdc7e77426133be5c41","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"Help Center","count":334},{"language":"default","tag":"SquadCast","count":67},{"language":"default","tag":"Script editing","count":34},{"language":"default","tag":"Export \u0026 share","count":33},{"language":"default","tag":"Record","count":28},{"language":"default","tag":"Visuals","count":28},{"language":"default","tag":"Add \u0026 manage media","count":25},{"language":"default","tag":"Effects, animations, transitions","count":23},{"language":"default","tag":"Troubleshooting","count":20},{"language":"default","tag":"Billing, payments, plans","count":19}],"searchSettings":{"isFiltersEnabled":false,"showContentSnippets":true,"maxResults":12}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"type":"link","url":"http://descript.zendesk.com/hc/en-us/requests/new"}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instinct-self-updating-docs","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".effect-anchor{scroll-margin-top:6rem}tr:has(.effect-anchor:target){background-color:rgba(101,26,57,.07)}.dark tr:has(.effect-anchor:target){background-color:rgba(205,205,254,.1)}tr:has(.effect-anchor) td ul{margin:0}.custom-card{backdrop-filter:brightness(1.06);-webkit-backdrop-filter:brightness(1.06);border:1.5px solid rgba(0,0,0,.12);border-radius:1rem;transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease}.custom-card:hover{transform:translateY(-2px);box-shadow:0 4px 8px rgba(0,0,0,.08)}.dark .custom-card{border-color:rgba(255,255,255,.14)}.dark .custom-card:hover{border-color:rgba(255,255,255,.22)}"}],"page":{"pagePath":"developers/api-reference/import/import-project-media","slug":"/developers/api-reference/import/import-project-media","pageMetadata":{"title":"Import media and sequences","openapi":"POST /jobs/import/project_media","noindex":true,"description":"Import media files into a new or existing project and create compositions.\n\nThis endpoint can:\n- Create a new project if `project_id` is not provided\n- Import media files from URLs\n- Create multitrack sequences\n- Create compositions (timelines) from existing or new media in the project\n- Trigger transcription and other background processing tasks\n\n### Media URL requirements\n- URLs must be accessible by Descript servers\n- URLs must support HTTP Range requests\n- Recommended to sign URLs for 12-48 hours to reduce chance of failure\n- [Supported file types](https://help.descript.com/add-and-manage-media/supported-file-types#importing-with-the-api): the API accepts more containers and codecs than the app, including MXF, MPEG-TS, and AVI\n\n### Direct file upload\n\nInstead of providing a URL, you can upload files directly by specifying `content_type` and `file_size` for a media item. The response will include a signed `upload_url` for each direct upload item. PUT the file bytes to that URL, and the import job will process it automatically. See the [Direct file upload](#tag/Direct-file-upload) guide for a full walkthrough.\n\n### Async Operations\n\nImports run in the background and return a `job_id`. Monitor progress via the [GET /jobs/{job_id}](#operation/getJob) endpoint.\n\n### Dynamic webhook\n\nIf `callback_url` is provided, Descript will POST the job status to that URL when the job finishes (successfully or not).\n\nThe payload will match the format returned by [GET /jobs/{job_id}](#operation/getJob).\n","href":"/developers/api-reference/import/import-project-media"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n h3: \"h3\",\n li: \"li\",\n p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Import media files into a new or existing project and create compositions.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"This endpoint can:\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"Create a new project if \", _jsx(_components.code, {\n children: \"project_id\"\n }), \" is not provided\"]\n }), \"\\n\", _jsx(_components.li, {\n children: \"Import media files from URLs\"\n }), \"\\n\", _jsx(_components.li, {\n children: \"Create multitrack sequences\"\n }), \"\\n\", _jsx(_components.li, {\n children: \"Create compositions (timelines) from existing or new media in the project\"\n }), \"\\n\", _jsx(_components.li, {\n children: \"Trigger transcription and other background processing tasks\"\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.h3, {\n children: \"Media URL requirements\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsx(_components.li, {\n children: \"URLs must be accessible by Descript servers\"\n }), \"\\n\", _jsx(_components.li, {\n children: \"URLs must support HTTP Range requests\"\n }), \"\\n\", _jsx(_components.li, {\n children: \"Recommended to sign URLs for 12-48 hours to reduce chance of failure\"\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.a, {\n href: \"https://help.descript.com/add-and-manage-media/supported-file-types#importing-with-the-api\",\n children: \"Supported file types\"\n }), \": the API accepts more containers and codecs than the app, including MXF, MPEG-TS, and AVI\"]\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.h3, {\n children: \"Direct file upload\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Instead of providing a URL, you can upload files directly by specifying \", _jsx(_components.code, {\n children: \"content_type\"\n }), \" and \", _jsx(_components.code, {\n children: \"file_size\"\n }), \" for a media item. The response will include a signed \", _jsx(_components.code, {\n children: \"upload_url\"\n }), \" for each direct upload item. PUT the file bytes to that URL, and the import job will process it automatically. See the \", _jsx(_components.a, {\n href: \"#tag/Direct-file-upload\",\n children: \"Direct file upload\"\n }), \" guide for a full walkthrough.\"]\n }), \"\\n\", _jsx(_components.h3, {\n children: \"Async Operations\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Imports run in the background and return a \", _jsx(_components.code, {\n children: \"job_id\"\n }), \". Monitor progress via the \", _jsx(_components.a, {\n href: \"#operation/getJob\",\n children: \"GET /jobs/\"\n }), \" endpoint.\"]\n }), \"\\n\", _jsx(_components.h3, {\n children: \"Dynamic webhook\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"If \", _jsx(_components.code, {\n children: \"callback_url\"\n }), \" is provided, Descript will POST the job status to that URL when the job finishes (successfully or not).\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The payload will match the format returned by \", _jsx(_components.a, {\n href: \"#operation/getJob\",\n children: \"GET /jobs/\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Import media and sequences","openapi":"POST /jobs/import/project_media","noindex":true,"description":"Import media files into a new or existing project and create compositions.\n\nThis endpoint can:\n- Create a new project if `project_id` is not provided\n- Import media files from URLs\n- Create multitrack sequences\n- Create compositions (timelines) from existing or new media in the project\n- Trigger transcription and other background processing tasks\n\n### Media URL requirements\n- URLs must be accessible by Descript servers\n- URLs must support HTTP Range requests\n- Recommended to sign URLs for 12-48 hours to reduce chance of failure\n- [Supported file types](https://help.descript.com/add-and-manage-media/supported-file-types#importing-with-the-api): the API accepts more containers and codecs than the app, including MXF, MPEG-TS, and AVI\n\n### Direct file upload\n\nInstead of providing a URL, you can upload files directly by specifying `content_type` and `file_size` for a media item. The response will include a signed `upload_url` for each direct upload item. PUT the file bytes to that URL, and the import job will process it automatically. See the [Direct file upload](#tag/Direct-file-upload) guide for a full walkthrough.\n\n### Async Operations\n\nImports run in the background and return a `job_id`. Monitor progress via the [GET /jobs/{job_id}](#operation/getJob) endpoint.\n\n### Dynamic webhook\n\nIf `callback_url` is provided, Descript will POST the job status to that URL when the job finishes (successfully or not).\n\nThe payload will match the format returned by [GET /jobs/{job_id}](#operation/getJob).\n","href":"/developers/api-reference/import/import-project-media"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/descript-5bf56f3f/2dc3a904ed64e2d6/analytics.js","/_mintlify/custom/descript-5bf56f3f/0f2d12095d1f7fa5/legacy-hash-redirect.js"],"openApiReferenceData":{"operation":{"tags":["API Endpoints"],"summary":"Import media and sequences","security":["b048e2b5-6d1d-4d05-bf65-e67f8dbb3bbb"],"description":"Import media files into a new or existing project and create compositions.\n\nThis endpoint can:\n- Create a new project if `project_id` is not provided\n- Import media files from URLs\n- Create multitrack sequences\n- Create compositions (timelines) from existing or new media in the project\n- Trigger transcription and other background processing tasks\n\n### Media URL requirements\n- URLs must be accessible by Descript servers\n- URLs must support HTTP Range requests\n- Recommended to sign URLs for 12-48 hours to reduce chance of failure\n- [Supported file types](https://help.descript.com/add-and-manage-media/supported-file-types#importing-with-the-api): the API accepts more containers and codecs than the app, including MXF, MPEG-TS, and AVI\n\n### Direct file upload\n\nInstead of providing a URL, you can upload files directly by specifying `content_type` and `file_size` for a media item. The response will include a signed `upload_url` for each direct upload item. PUT the file bytes to that URL, and the import job will process it automatically. See the [Direct file upload](#tag/Direct-file-upload) guide for a full walkthrough.\n\n### Async Operations\n\nImports run in the background and return a `job_id`. Monitor progress via the [GET /jobs/{job_id}](#operation/getJob) endpoint.\n\n### Dynamic webhook\n\nIf `callback_url` is provided, Descript will POST the job status to that URL when the job finishes (successfully or not).\n\nThe payload will match the format returned by [GET /jobs/{job_id}](#operation/getJob).\n","operationId":"importProjectMedia","requestBody":"9c5a1238-caab-4ffc-b99b-b4be24d7aa97","responses":{"201":"ee78b0f4-d149-4423-845e-9bb5ddd7b995","400":"5987f419-fd45-49a6-8ecb-dda32a04021b","401":"4bcbf61b-200d-4021-b998-382c97386292","402":"9749251d-f5fe-470c-89f8-9d0392a292b7","403":"4dd71166-3faf-45ab-9981-8c18aba53541","404":"02a6a39e-89cc-4716-b127-06dbe2952e06","429":"24229e60-d4dc-4e77-a07a-8495566dd281"},"method":"post","type":"path","servers":["a768f050-c5b4-4ea7-8d39-6bdbe0c0c89a"],"path":"/jobs/import/project_media","baseUrlOptions":["https://descriptapi.com/v1"],"title":"Import media and sequences","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"type":"object","description":"Request to import media into a project and optionally create compositions.\nThis operation will:\n- Create a new project if project_id is not provided (using the drive associated with the personal token)\n- Import media files from URLs or create multitrack sequences\n- Optionally create one or more compositions\n- Trigger transcription and other background processing\n","properties":{"project_id":{"type":"string","format":"uuid","description":"Existing project ID to import media into. If not provided, a new project will be created.\nWhen importing into an existing project, media filenames must not conflict with existing files.\n","example":"9f36ee32-5a2c-47e7-b1a3-94991d3e3ddb","uniqueKey":"project_id","typeLabel":"string\u003cuuid>"},"project_name":{"type":"string","description":"Name for the new project. Only used when project_id is not provided.","example":"Marketing Video","uniqueKey":"project_name","typeLabel":"string"},"team_access":{"type":"string","description":"Access level for drive members. Only applicable when creating a new project\n(when project_id is not provided). Defaults to `none` if not specified.\n- edit: Users can edit the project\n- comment: Users can view and comment but not edit\n- view: Users can view but not comment or edit\n- none: No shared access (private to owner)\n","enum":["edit","comment","view","none"],"default":"none","example":"edit","uniqueKey":"team_access","typeLabel":"enum\u003cstring>"},"folder_name":{"type":"string","description":"Folder path to place the new project in (e.g. \"Clients/Acme/Videos\").\nSupports nested paths using \"/\" as separator. Only applicable when creating a new project\n(when project_id is not provided). Existing folders along the path are reused; missing\nsegments are created automatically.\n","example":"Clients/Acme","uniqueKey":"folder_name","typeLabel":"string"},"workspace_name":{"type":"string","description":"Existing workspace to create the new project in, matched by name (case-insensitive).\nOnly applicable when creating a new project (when project_id is not provided).\n\nReserved names: `Personal` (your private space) and `General` (the shared drive workspace).\nAny other value is looked up as a custom workspace name; unknown names return 404.\n\nWhen omitted, `team_access` is passed through unchanged.\nWhen set to `Personal`, `team_access` must be `none` or omitted.\nWhen set to `General` or a custom workspace name, `team_access` must be\n`edit`, `comment`, or `view`; omitting it defaults to `view`, and `none` is rejected.\n\nFor custom workspaces, the caller must be a member of that workspace.\n","example":"Marketing","uniqueKey":"workspace_name","typeLabel":"string"},"add_media":{"type":"object","description":"Map of media reference IDs (display names with optional folder paths) to media import items.\nKeys are the display names that will appear in the project (e.g., \"Misc/intro.mp4\" or \"demo.mp4\").\nValues define how to import each media item (URL import or multitrack sequence).\n","additionalProperties":{"oneOf":[{"type":"object","title":"URL Import","description":"Import media from a URL","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"URL to import media from. Must be accessible by Descript servers and support Range requests.\nRecommended to sign URLs for 12-48 hours to reduce chance of failure.\n","example":"https://example.com/intro.mp4","isRequired":true,"uniqueKey":"add_media.additionalProperties.oneOf.0.url","typeLabel":"string\u003curi>"},"language":{"type":"string","description":"ISO 639-1 language code for transcription (e.g., \"en\", \"es\", \"fr\").\nIf not specified, language is auto-detected from the audio.\n","example":"en","uniqueKey":"add_media.additionalProperties.oneOf.0.language","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"add_media.additionalProperties.oneOf.0","typeLabel":"URL Import · object"},{"type":"object","title":"Direct Upload","description":"Upload a file directly to Descript. The API returns a signed upload URL\nin the response. PUT your file to that URL, then the import job will\nprocess it automatically.\n","required":["content_type","file_size"],"properties":{"content_type":{"type":"string","description":"MIME type of the file (e.g., \"video/mp4\", \"audio/wav\")","example":"video/mp4","isRequired":true,"uniqueKey":"add_media.additionalProperties.oneOf.1.content_type","typeLabel":"string"},"file_size":{"type":"integer","description":"File size in bytes","example":52428800,"isRequired":true,"uniqueKey":"add_media.additionalProperties.oneOf.1.file_size","typeLabel":"integer"},"language":{"type":"string","description":"ISO 639-1 language code for transcription (e.g., \"en\", \"es\", \"fr\").\nIf not specified, language is auto-detected from the audio.\n","example":"en","uniqueKey":"add_media.additionalProperties.oneOf.1.language","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"add_media.additionalProperties.oneOf.1","typeLabel":"Direct Upload · object"},{"type":"object","title":"Multitrack Sequence","description":"Create a multitrack sequence from multiple media files","required":["tracks"],"properties":{"tracks":{"type":"array","description":"Array of tracks to combine into a multitrack sequence","minItems":1,"items":{"type":"object","required":["media"],"properties":{"media":{"type":"string","description":"Media reference ID (display name) of the media to include in this track","example":"Recordings/camera1.mp4","isRequired":true,"uniqueKey":"add_media.additionalProperties.oneOf.2.tracks.items.[INDEX].media","typeLabel":"string"},"offset":{"type":"number","format":"float","description":"Optional time offset in seconds for syncing this track","example":50,"default":0,"uniqueKey":"add_media.additionalProperties.oneOf.2.tracks.items.[INDEX].offset","typeLabel":"number\u003cfloat>"}},"additionalProperties":false,"uniqueKey":"add_media.additionalProperties.oneOf.2.tracks.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"add_media.additionalProperties.oneOf.2.tracks","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"add_media.additionalProperties.oneOf.2","typeLabel":"Multitrack Sequence · object"}],"uniqueKey":"add_media.additionalProperties","typeLabel":"URL Import · object | Direct Upload · object | Multitrack Sequence · object"},"example":{"Misc/intro.mp4":{"url":"https://example.com/intro.mp4"},"demo.mp4":{"url":"https://example.com/demo.mp4"},"Multicam_Track":{"tracks":[{"media":"Recordings/camera1.mp4","offset":0},{"media":"Recordings/camera2.mp4","offset":50}]}},"uniqueKey":"add_media","typeLabel":"object"},"add_compositions":{"type":"array","description":"Optional list of compositions to create in the project","items":{"type":"object","description":"Defines a composition to create in the project","properties":{"clips":{"type":"array","description":"Ordered list of clips to include in the composition","items":{"type":"object","required":["media"],"properties":{"media":{"type":"string","description":"Media reference ID (display name) of the media to add as a clip","example":"Misc/intro.mp4","isRequired":true,"uniqueKey":"add_compositions.items.[INDEX].clips.items.[INDEX].media","typeLabel":"string"},"mute":{"type":"boolean","description":"Mute the track this clip plays on. For a sequence clip, mutes the sequence's own tracks.\nFor any other clip, mutes the composition's script layer, which silences every\nclip on it — including clips already in the composition. Defaults to false.\n","default":false,"example":true,"uniqueKey":"add_compositions.items.[INDEX].clips.items.[INDEX].mute","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"add_compositions.items.[INDEX].clips.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"add_compositions.items.[INDEX].clips","typeLabel":"object[]"},"name":{"type":"string","description":"Name of the composition. If not provided, uses default naming.","example":"Rough Cut","uniqueKey":"add_compositions.items.[INDEX].name","typeLabel":"string"},"width":{"type":"integer","description":"Width of the composition in pixels","example":1920,"default":1920,"uniqueKey":"add_compositions.items.[INDEX].width","typeLabel":"integer"},"height":{"type":"integer","description":"Height of the composition in pixels","example":1080,"default":1080,"uniqueKey":"add_compositions.items.[INDEX].height","typeLabel":"integer"},"fps":{"type":"number","description":"**[Work in progress]** This property is not yet supported and will be ignored if provided.\n\nFrame rate for the composition in frames per second.\nCommon values: 24, 25, 29.97, 30, 60.\n","default":30,"example":30,"uniqueKey":"add_compositions.items.[INDEX].fps","typeLabel":"number"}},"required":["clips"],"additionalProperties":false,"uniqueKey":"add_compositions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"add_compositions","typeLabel":"object[]"},"callback_url":{"type":"string","format":"uri","description":"Optional webhook URL to call when the job completes or fails.\nDescript will POST the job status (same format as [GET /jobs/{job_id}](#operation/getJob)) to this URL.\n","example":"https://example.com/webhooks/descript/job_callback","uniqueKey":"callback_url","typeLabel":"string\u003curi>"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"create_with_composition":{"title":"create_with_composition","description":"Most common use case for seeding a project with a simple composition","value":{"project_name":"Marketing Video","add_media":{"Misc/intro.mp4":{"url":"https://example.com/intro.mp4"},"demo.mp4":{"url":"https://example.com/demo.mp4"},"Misc/outro.mp4":{"url":"https://example.com/outro.mp4"}},"add_compositions":[{"name":"Rough Cut","clips":[{"media":"Misc/intro.mp4"},{"media":"demo.mp4"},{"media":"Misc/outro.mp4"}]}]}},"import_only":{"title":"import_only","description":"Import files for later composition creation","value":{"project_name":"Video Project","add_media":{"Assets/intro.mp4":{"url":"https://example.com/intro.mp4"},"Assets/logo.png":{"url":"https://example.com/logo.png"}}}},"direct_upload":{"title":"direct_upload","description":"Upload a local file directly instead of providing a URL","value":{"project_name":"Upload Project","add_media":{"recording.mp4":{"content_type":"video/mp4","file_size":52428800}},"add_compositions":[{"name":"Main","clips":[{"media":"recording.mp4"}]}]}},"multitrack_sequence":{"title":"multitrack_sequence","description":"Combine multiple tracks with time offsets","value":{"project_name":"Interview Edit","add_media":{"Misc/intro.mp4":{"url":"https://example.com/intro.mp4"},"Recordings/camera1.mp4":{"url":"https://example.com/camera1.mp4"},"Recordings/camera2.mp4":{"url":"https://example.com/camera2.mp4"},"Multicam_Track":{"tracks":[{"media":"Recordings/camera1.mp4","offset":0},{"media":"Recordings/camera2.mp4","offset":50}]}},"add_compositions":[{"name":"Rough Cut","width":1920,"height":1080,"clips":[{"media":"Misc/intro.mp4"},{"media":"Multicam_Track"}]}]}}},"exampleType":"examples"}},"description":"Media import and project creation request","required":true,"exampleType":"examples"},"responses":{"ee78b0f4-d149-4423-845e-9bb5ddd7b995":{"description":"Import job created successfully","content":{"application/json":{"schema":{"type":"object","description":"Response returned when creating an import job","properties":{"job_id":{"type":"string","format":"uuid","description":"Unique identifier for the job","example":"6dc3f30a-58c2-4174-96a6-dc18cf3c7776","isRequired":true,"uniqueKey":"job_id","typeLabel":"string\u003cuuid>"},"drive_id":{"type":"string","format":"uuid","description":"Drive ID where the project is located","example":"c9c5c47e-158a-49f7-846b-4f6ee2a229a2","isRequired":true,"uniqueKey":"drive_id","typeLabel":"string\u003cuuid>"},"project_id":{"type":"string","format":"uuid","description":"Project ID (newly created or existing)","example":"9f36ee32-5a2c-47e7-b1a3-94991d3e3ddb","isRequired":true,"uniqueKey":"project_id","typeLabel":"string\u003cuuid>"},"project_url":{"type":"string","format":"uri","description":"URL to access the project in Descript web app","example":"https://web.descript.com/9f36ee32-5a2c-47e7-b1a3-94991d3e3ddb","isRequired":true,"uniqueKey":"project_url","typeLabel":"string\u003curi>"},"drive_name":{"oneOf":[{"type":"string","description":"Human-readable name of the connected drive (workspace)","example":"My Team Workspace","uniqueKey":"drive_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"Human-readable name of the connected drive (workspace)","example":"My Team Workspace","uniqueKey":"drive_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"drive_name","typeLabel":"string | null"},"upload_urls":{"type":"object","description":"Signed upload URLs for each direct upload media item. Only present when the request\nincludes direct upload references. PUT the file contents to the `upload_url` with\n`Content-Type: application/octet-stream`. The import job will automatically detect\nthe upload and process the file.\n","additionalProperties":{"type":"object","properties":{"upload_url":{"type":"string","format":"uri","description":"Signed URL to PUT the file to. Expires after 3 hours.","isRequired":true,"uniqueKey":"upload_urls.additionalProperties.upload_url","typeLabel":"string\u003curi>"},"asset_id":{"type":"string","format":"uuid","description":"GAT asset ID for the uploaded file","isRequired":true,"uniqueKey":"upload_urls.additionalProperties.asset_id","typeLabel":"string\u003cuuid>"},"artifact_id":{"type":"string","format":"uuid","description":"GAT artifact ID for the uploaded file","isRequired":true,"uniqueKey":"upload_urls.additionalProperties.artifact_id","typeLabel":"string\u003cuuid>"}},"required":["upload_url","asset_id","artifact_id"],"uniqueKey":"upload_urls.additionalProperties","typeLabel":"object"},"uniqueKey":"upload_urls","typeLabel":"object"}},"required":["job_id","drive_id","project_id","project_url"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"job_id":"6dc3f30a-58c2-4174-96a6-dc18cf3c7776","drive_id":"c9c5c47e-158a-49f7-846b-4f6ee2a229a2","project_id":"9f36ee32-5a2c-47e7-b1a3-94991d3e3ddb","project_url":"https://web.descript.com/9f36ee32-5a2c-47e7-b1a3-94991d3e3ddb","drive_name":"My Team Workspace","upload_urls":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"5987f419-fd45-49a6-8ecb-dda32a04021b":{"description":"Invalid input:\n- Malformed request body\n- Invalid media URLs\n- URLs not accessible or don't support Range requests\n- Media filename conflicts with existing files (when importing to existing project)\n","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"invalid_input","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","example":"Invalid request body","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["error","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"invalid_url":{"title":"invalid_url","value":{"error":"invalid_input","message":"Invalid media URL format"}},"url_not_accessible":{"title":"url_not_accessible","value":{"error":"invalid_input","message":"Media URL is not accessible or does not support Range requests"}},"filename_conflict":{"title":"filename_conflict","value":{"error":"invalid_input","message":"Media filename conflicts with existing files in the project"}}},"exampleType":"examples"}},"exampleType":"examples"},"4bcbf61b-200d-4021-b998-382c97386292":{"description":"Unauthorized - missing or invalid authentication token","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"unauthorized","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","example":"Missing or invalid authentication token","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["error","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"unauthorized":{"title":"unauthorized","value":{"error":"unauthorized","message":"Missing or invalid authentication token"}}},"exampleType":"examples"}},"exampleType":"examples"},"9749251d-f5fe-470c-89f8-9d0392a292b7":{"description":"Payment Required - insufficient media minutes to start the job","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"payment_required","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","example":"Insufficient media minutes to start the job","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["error","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"insufficient_minutes":{"title":"insufficient_minutes","value":{"error":"payment_required","message":"Insufficient media minutes to start the job (300 minutes required, 50 available)"}}},"exampleType":"examples"}},"exampleType":"examples"},"4dd71166-3faf-45ab-9981-8c18aba53541":{"description":"Forbidden - user does not have access to this resource","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"forbidden","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","example":"User does not have access to this resource","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["error","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"forbidden":{"title":"forbidden","value":{"error":"forbidden","message":"User does not have access to this drive or project"}}},"exampleType":"examples"}},"exampleType":"examples"},"02a6a39e-89cc-4716-b127-06dbe2952e06":{"description":"Not found:\n- Drive doesn't exist\n- Project doesn't exist (when project_id is provided)\n","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"not_found","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","example":"Resource not found","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["error","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"project_not_found":{"title":"project_not_found","value":{"error":"not_found","message":"Project not found"}},"drive_not_found":{"title":"drive_not_found","value":{"error":"not_found","message":"Drive not found"}}},"exampleType":"examples"}},"exampleType":"examples"},"24229e60-d4dc-4e77-a07a-8495566dd281":{"description":"Too many requests - rate limit exceeded.\nUse the `Retry-After` header to determine when to retry.\n","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":{"description":"Rate limit exceeded response. When this error is returned, the response includes headers\nto help you implement proper retry logic:\n- `Retry-After`: Number of seconds to wait before retrying\n- `X-RateLimit-Remaining`: Requests remaining in current window\n- `X-RateLimit-Consumed`: Requests consumed in current window\n","type":"object","properties":{"error":{"type":"string","description":"Error code indicating rate limit was exceeded","example":"rate_limit_exceeded","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message","example":"Too many requests","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["error","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"rate_limit":{"title":"rate_limit","value":{"error":"rate_limit_exceeded","message":"Too many requests. Please try again later."}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"b048e2b5-6d1d-4d05-bf65-e67f8dbb3bbb":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Personal API token created in Descript Settings → API Tokens. See the Authentication section for details.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"a768f050-c5b4-4ea7-8d39-6bdbe0c0c89a":{"url":"https://descriptapi.com/v1"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Personal API token created in Descript Settings → API Tokens. See the Authentication section for details.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Personal API token created in Descript Settings → API Tokens. See the Authentication section for details.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"developers/openapi.json"},"subdomain":"descript-5bf56f3f","siteName":"Descript Help Center","title":"Import media and sequences - Descript Help Center","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-27T15:23:23.629Z","originalFileLocation":"developers/api-reference/import/import-project-media.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Import media files into a new or existing project and create compositions. This endpoint can: - Create a new project if project_id is not provided - Import media files from URLs - Create multitrack sequences - Create compositions (timelines) from existing or new media in the project - Trigger transcription and other background processing tasks ### Media URL requirements - URLs must be accessible by Descript servers - URLs must support HTTP Range requests - Recommended to sign URLs for 12-48 hours to reduce chance of failure - Supported file types: the API accepts more containers and codecs than the app, including MXF, MPEG-TS, and AVI ### Direct file upload Instead of providing a URL, you can upload files directly by specifying content_type and file_size for a media item. The response will include a signed upload_url for each direct upload item. PUT the file bytes to that URL, and the import job will process it automatically. See the Direct file upload guide for a full walkthrough. ### Async Operations Imports run in the background and return a job_id. Monitor progress via the GET /jobs/{job_id} endpoint. ### Dynamic webhook If callback_url is provided, Descript will POST the job status to that URL when the job finishes (successfully or not). The payload will match the format returned by GET /jobs/{job_id}.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Descript Help Center\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"noindex\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/descript-5bf56f3f/kFeqHqu-v8e5VpSc/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/descript-5bf56f3f/kFeqHqu-v8e5VpSc/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/descript-5bf56f3f/kFeqHqu-v8e5VpSc/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/descript-5bf56f3f/kFeqHqu-v8e5VpSc/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/descript-5bf56f3f/kFeqHqu-v8e5VpSc/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/descript-5bf56f3f/kFeqHqu-v8e5VpSc/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/descript-5bf56f3f/kFeqHqu-v8e5VpSc/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/descript-5bf56f3f/kFeqHqu-v8e5VpSc/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/descript-5bf56f3f/kFeqHqu-v8e5VpSc/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Import media and sequences - Descript Help Center\">\u003cmeta data-mint-head property=\"og:description\" content=\"Import media files into a new or existing project and create compositions. This endpoint can: - Create a new project if project_id is not provided - Import media files from URLs - Create multitrack sequences - Create compositions (timelines) from existing or new media in the project - Trigger transcription and other background processing tasks ### Media URL requirements - URLs must be accessible by Descript servers - URLs must support HTTP Range requests - Recommended to sign URLs for 12-48 hours to reduce chance of failure - Supported file types: the API accepts more containers and codecs than the app, including MXF, MPEG-TS, and AVI ### Direct file upload Instead of providing a URL, you can upload files directly by specifying content_type and file_size for a media item. The response will include a signed upload_url for each direct upload item. PUT the file bytes to that URL, and the import job will process it automatically. See the Direct file upload guide for a full walkthrough. ### Async Operations Imports run in the background and return a job_id. Monitor progress via the GET /jobs/{job_id} endpoint. ### Dynamic webhook If callback_url is provided, Descript will POST the job status to that URL when the job finishes (successfully or not). The payload will match the format returned by GET /jobs/{job_id}.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Descript Help Center\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://help.descript.com/developers/api-reference/import/import-project-media\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://descript-5bf56f3f.mintlify.app/_mintlify/api/og/v2?division=Import\u0026amp;title=Import+media+and+sequences\u0026amp;description=Import+media+files+into+a+new+or+existing+project+and+create+compositions.%0A%0AThis+endpoint+can%3A%0A-+Create+a+new+project+if+%60project_id%60+is+not+provided%0A-+Import+m\u0026amp;theme=f81376d507a7ea740b835510\u0026amp;signature=f51634b933cb6fb44642a60ec2e5ffe9511371ea76540e7fa1e90ffd413a14db\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Import media and sequences - Descript Help Center\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Import media files into a new or existing project and create compositions. This endpoint can: - Create a new project if project_id is not provided - Import media files from URLs - Create multitrack sequences - Create compositions (timelines) from existing or new media in the project - Trigger transcription and other background processing tasks ### Media URL requirements - URLs must be accessible by Descript servers - URLs must support HTTP Range requests - Recommended to sign URLs for 12-48 hours to reduce chance of failure - Supported file types: the API accepts more containers and codecs than the app, including MXF, MPEG-TS, and AVI ### Direct file upload Instead of providing a URL, you can upload files directly by specifying content_type and file_size for a media item. The response will include a signed upload_url for each direct upload item. PUT the file bytes to that URL, and the import job will process it automatically. See the Direct file upload guide for a full walkthrough. ### Async Operations Imports run in the background and return a job_id. Monitor progress via the GET /jobs/{job_id} endpoint. ### Dynamic webhook If callback_url is provided, Descript will POST the job status to that URL when the job finishes (successfully or not). The payload will match the format returned by GET /jobs/{job_id}.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://descript-5bf56f3f.mintlify.app/_mintlify/api/og/v2?division=Import\u0026amp;title=Import+media+and+sequences\u0026amp;description=Import+media+files+into+a+new+or+existing+project+and+create+compositions.%0A%0AThis+endpoint+can%3A%0A-+Create+a+new+project+if+%60project_id%60+is+not+provided%0A-+Import+m\u0026amp;theme=f81376d507a7ea740b835510\u0026amp;signature=f51634b933cb6fb44642a60ec2e5ffe9511371ea76540e7fa1e90ffd413a14db\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/descript-5bf56f3f/kFeqHqu-v8e5VpSc/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Descript Help Center\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#651A39\">\u003clink data-mint-head rel=\"canonical\" href=\"https://help.descript.com/developers/api-reference/import/import-project-media\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/developers/api-reference/import/import-project-media.md\">","siteName":"Descript Help Center","nav":{"global":null,"tabs":[{"tab":"Help Center","pages":[{"title":"Help Center","href":""}]},{"tab":"SquadCast","pages":[{"title":"SquadCast","href":"/squadcast/quickstart"}]},{"tab":"Developers","icon":"square-terminal","groups":[{"group":"Get started","pages":[{"title":"Descript API","href":"/developers"},{"title":"Quickstart","href":"/developers/get-started/quickstart"},{"title":"Authentication","href":"/developers/get-started/authentication"}]},{"group":"Guides","pages":[{"title":"Using the CLI","href":"/developers/guides/cli"},{"title":"Direct file upload","href":"/developers/guides/direct-upload"},{"title":"Rate limiting","href":"/developers/guides/rate-limiting"}]},{"group":"MCP","pages":[{"title":"Descript MCP","href":"/developers/mcp/overview"}]},{"group":"Partner integrations","pages":[{"title":"Edit in Descript","href":"/developers/partners/edit-in-descript"},{"title":"Export from Descript","href":"/developers/partners/export-from-descript"}]},{"group":"API endpoints","pages":[{"title":"API endpoints","sidebarTitle":"Overview","description":"Browse every endpoint in the Descript API.","href":"/developers/api-reference/overview"},{"group":"Import","pages":[{"title":"Import media and sequences","openapi":"POST /jobs/import/project_media","href":"/developers/api-reference/import/import-project-media"},{"title":"Import media to drive library","openapi":"POST /jobs/import/drive_media","description":"Import media files into the drive media library (shared workspace-level media collection).\n\nUnlike project media import, this endpoint adds files to the drive's shared media library\nrather than to a specific project. Files can optionally be placed in a folder.\n\n### Media URL requirements\n- URLs must be accessible by Descript servers\n- URLs must support HTTP Range requests\n- Recommended to sign URLs for 12-48 hours to reduce chance of failure\n- [Supported file types](https://help.descript.com/add-and-manage-media/supported-file-types#importing-with-the-api): the API accepts more containers and codecs than the app, including MXF, MPEG-TS, and AVI\n\n### Direct file upload\n\nInstead of providing a URL, you can upload files directly by specifying `content_type` and `file_size` for a media item. The response will include a signed `upload_url` for each direct upload item. PUT the file bytes to that URL, and the import job will process it automatically. See the [Direct file upload](#tag/Direct-file-upload) guide for a full walkthrough.\n\n### Async Operations\n\nImports run in the background and return a `job_id`. Monitor progress via the [GET /jobs/{job_id}](#operation/getJob) endpoint.\n\n### Dynamic webhook\n\nIf `callback_url` is provided, Descript will POST the job status to that URL when the job finishes (successfully or not).\n","href":"/developers/api-reference/import/import-drive-media"}]},{"group":"Agent","pages":[{"title":"Agent edit","openapi":"POST /jobs/agent","href":"/developers/api-reference/agent/create-agent-edit"},{"title":"List agent models","openapi":"GET /agent/models","href":"/developers/api-reference/agent/list-agent-models"}]},{"group":"Jobs","pages":[{"title":"Get job status","openapi":"GET /jobs/{job_id}","href":"/developers/api-reference/jobs/get-job"},{"title":"List jobs","openapi":"GET /jobs","href":"/developers/api-reference/jobs/list-jobs"},{"title":"Cancel job","openapi":"DELETE /jobs/{job_id}","href":"/developers/api-reference/jobs/cancel-job"},{"title":"Publish project media","openapi":"POST /jobs/publish","href":"/developers/api-reference/jobs/publish-project"}]},{"group":"Projects","pages":[{"title":"List projects","openapi":"GET /projects","href":"/developers/api-reference/projects/list-projects"},{"title":"Get project details","openapi":"GET /projects/{project_id}","href":"/developers/api-reference/projects/get-project"},{"title":"Search a drive","openapi":"GET /search","href":"/developers/api-reference/projects/search"}]},{"group":"Export","pages":[{"title":"Export project transcript","openapi":"POST /export/transcript","href":"/developers/api-reference/export/export-transcript"}]},{"group":"Status","pages":[{"title":"Check API status","openapi":"GET /status","href":"/developers/api-reference/status/get-status"}]},{"group":"Partner endpoints","pages":[{"title":"Create Import URL","openapi":"POST /edit_in_descript/schema","href":"/developers/api-reference/partners/edit-in-descript-schema"},{"title":"Get Published Project Metadata","openapi":"GET /published_projects/{publishedProjectSlug}","href":"/developers/api-reference/partners/published-project-metadata"}]}]}]}]},"basePath":"","title":"Import media and sequences - Descript Help Center","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C8RPHPxo.js","utils-0BK-9q6z.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DfjzsUJT.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B4v9psJ4.js","snippetPresets-CpTQv-Ez.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-BNP-Fvr0.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BSgu6h1D.js","shallow-Biv1i9Gs.js","getApiPlaygroundDisplay-BoGOXhtF.js","CodeSnippet-DvQoT18_.js","CodeSnippets-Dnpa15xT.js","Page-Buji1S4J.js","getPastedJson-xAIyhUFE.js","icon-S6FBih11.js","MethodPill-SaYeUZyk.js","DuplicateIcon-Cs-p3v2Q.js","createIcon-DjCFEoHq.js","DynamicMarkdown-BcnBltEQ.js","SectionHeading-BUBl0eEF.js","axios-vUo_bRtp.js","Markdown-h4cOoD8d.js","clsx-B2v50t8t.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DJnKvr0g.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BHrrjR1K.js"]}