Generate Asset Upload Urls API Reference - Magic Hour Docs
Generates a list of pre-signed upload URLs for the assets required. This API is only necessary if you want to upload to Magic Hour’s storage. Refer to the Input Files Guide for more details.
The response array will match the order of items in the request body.
Bearer authentication header of the form Bearer <api_key>, where <api_key> is your API key. To get your API key, go to Developer Hub and click "Create new API Key".
The list of upload URLs and file paths for the assets. The response array will match the order of items in the request body. Refer to the Input Files Guide for more details.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Magic Hour API Docs","description":"Easily generate videos, images, and audio using Magic Hour's API. Follow our documentation to seamlessly integrate AI content creation into your applications.","colors":{"primary":"#3b82f6","light":"#0564ff","dark":"#3b82f6"},"logo":{"light":"https://mintcdn.com/magichour/5sgGJpuuipkw5s5v/icons/logo-light.svg?fit=max\u0026auto=format\u0026n=5sgGJpuuipkw5s5v\u0026q=85\u0026s=1f167e30baf11927bc2e0932411e455b","dark":"https://mintcdn.com/magichour/5sgGJpuuipkw5s5v/icons/logo-dark.svg?fit=max\u0026auto=format\u0026n=5sgGJpuuipkw5s5v\u0026q=85\u0026s=15c8bda28931ac4e1e2fab2c0ba6f0d5"},"favicon":"https://mintcdn.com/magichour/kbUwXh9ksnVyRSci/icons/favicon.png?fit=max\u0026auto=format\u0026n=kbUwXh9ksnVyRSci\u0026q=85\u0026s=c4fda903b24dd7067dadd1bb75508987","appearance":{"default":"dark","strict":false},"background":{"decoration":"gradient"},"navbar":{"links":[{"href":"mailto:support@magichour.ai","label":"Support"}],"primary":{"type":"button","label":"Get API key","href":"https://magichour.ai/developer?tab=api-keys\u0026ref=docs-navbar\u0026utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=navbar"}},"footer":{"socials":{"website":"https://magichour.ai/?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=footer","x":"https://x.com/magichourai","github":"https://github.com/magichourhq","linkedin":"https://linkedin.com/company/magichour","instagram":"https://instagram.com/magichourai","youtube":"https://youtube.com/@magichourai"}},"seo":{"metatags":{"og:image":"https://d28dkohlqf5vwj.cloudfront.net/open-graph/logo-social-noisy-spectrum.jpg","twitter:image":"https://d28dkohlqf5vwj.cloudfront.net/open-graph/logo-social-noisy-spectrum.jpg"}},"integrations":{"ga4":{"measurementId":"G-CZ9Q9NBZB3"},"posthog":{"apiKey":"phc_EmzSy2RU0TOPhpouazMzxFedNdMyhze8HakyjffW2Wr","apiHost":"https://us.i.posthog.com"}},"contextual":{"options":["chatgpt","claude","perplexity","mcp","cursor","vscode","copy","view"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"API quickstart","icon":"forward-fast","href":"/get-started/quick-start"},{"anchor":"API pricing","icon":"credit-card","href":"/billing/overview"},{"anchor":"Community","icon":"discord","href":"https://discord.com/invite/JX5rgsZaJp"},{"anchor":"Status","icon":"wave-pulse","href":"https://status.magichour.ai"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"magichour","hasAudioNarration":false,"actualSubdomain":"magichour","customDomains":["docs.magichour.ai"],"gitSource":{"type":"github","owner":"magichourhq","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":true,"issues":true,"edits":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af3374b2f20aabdfd47fbf0","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"Documentation","count":97},{"language":"default","tag":"Integration","count":56},{"language":"default","tag":"API Reference","count":46},{"language":"default","tag":"Tools","count":30},{"language":"default","tag":"Image Projects","count":16},{"language":"default","tag":"Video Projects","count":16},{"language":"default","tag":"Images","count":15},{"language":"default","tag":"Video","count":12},{"language":"default","tag":"Webhook Reference","count":10},{"language":"default","tag":"Get Started","count":7}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"rbac-expansion","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":"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":"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":"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":"editor-metadata","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},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#sidebar,#table-of-contents-content{scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-gutter:none;scrollbar-color:gray transparent}"}],"page":{"pagePath":"api-reference/files/generate-asset-upload-urls","slug":"/api-reference/files/generate-asset-upload-urls","pageMetadata":{"openapi":"post /v1/files/upload-urls","title":"Generate Asset Upload Urls API Reference - Magic Hour Docs","sidebarTitle":"Generate Asset Upload Urls","description":"Generates a list of pre-signed upload URLs for the assets required. This API is only necessary if you want to upload to Magic Hour's storage. Refer to the [Input Files Guide](https://docs.magichour.ai/integration/inputs-and-outputs) for more details.\n\nThe response array will match the order of items in the request body.\n\n**Valid file extensions per asset type**:\n- video: mp4, m4v, mov, webm\n- audio: mp3, wav, aac, flac, webm, weba, m4a, opus, ogg, oga, aiff, amr\n- image: png, jpg, jpeg, jpe, jfif, heic, heif, webp, avif, jp2, tiff, tif, bmp\n- gif: gif, webp, webm\n\n> Note: `gif` is only supported for face swap API `video_file_path` field.\n\nOnce you receive an upload URL, send a `PUT` request to upload the file directly.\n\nExample:\n\n```\ncurl -X PUT --data '@/path/to/file/video.mp4' \\\n https://videos.magichour.ai/api-assets/id/video.mp4?\u003cauth params from the API response>\n```\n","href":"/api-reference/files/generate-asset-upload-urls"},"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 blockquote: \"blockquote\",\n code: \"code\",\n li: \"li\",\n p: \"p\",\n pre: \"pre\",\n span: \"span\",\n strong: \"strong\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n }, {CodeBlock} = _components;\n if (!CodeBlock) _missingMdxReference(\"CodeBlock\", true);\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Generates a list of pre-signed upload URLs for the assets required. This API is only necessary if you want to upload to Magic Hour’s storage. Refer to the \", _jsx(_components.a, {\n href: \"https://docs.magichour.ai/integration/inputs-and-outputs\",\n children: \"Input Files Guide\"\n }), \" for more details.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"The response array will match the order of items in the request body.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Valid file extensions per asset type\"\n }), \":\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsx(_components.li, {\n children: \"video: mp4, m4v, mov, webm\"\n }), \"\\n\", _jsx(_components.li, {\n children: \"audio: mp3, wav, aac, flac, webm, weba, m4a, opus, ogg, oga, aiff, amr\"\n }), \"\\n\", _jsx(_components.li, {\n children: \"image: png, jpg, jpeg, jpe, jfif, heic, heif, webp, avif, jp2, tiff, tif, bmp\"\n }), \"\\n\", _jsx(_components.li, {\n children: \"gif: gif, webp, webm\"\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.blockquote, {\n children: [\"\\n\", _jsxs(_components.p, {\n children: [\"Note: \", _jsx(_components.code, {\n children: \"gif\"\n }), \" is only supported for face swap API \", _jsx(_components.code, {\n children: \"video_file_path\"\n }), \" field.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Once you receive an upload URL, send a \", _jsx(_components.code, {\n children: \"PUT\"\n }), \" request to upload the file directly.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Example:\"\n }), \"\\n\", _jsx(CodeBlock, {\n numberOfLines: \"3\",\n language: \"text\",\n children: _jsx(_components.pre, {\n className: \"shiki shiki-themes github-light-default dark-plus\",\n style: {\n backgroundColor: \"#ffffff\",\n \"--shiki-dark-bg\": \"#0B0C0E\",\n color: \"#1f2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n language: \"text\",\n children: _jsxs(_components.code, {\n language: \"text\",\n numberOfLines: \"3\",\n children: [_jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n children: \"curl -X PUT --data '@/path/to/file/video.mp4' \\\\\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n children: \" https://videos.magichour.ai/api-assets/id/video.mp4?\u003cauth params from the API response>\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {})\n })]\n })\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};\nfunction _missingMdxReference(id, component) {\n throw new Error(\"Expected \" + (component ? \"component\" : \"object\") + \" `\" + id + \"` to be defined: you likely forgot to import, pass, or provide it.\");\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":{"openapi":"post /v1/files/upload-urls","title":"Generate Asset Upload Urls API Reference - Magic Hour Docs","sidebarTitle":"Generate Asset Upload Urls","description":"Generates a list of pre-signed upload URLs for the assets required. This API is only necessary if you want to upload to Magic Hour's storage. Refer to the [Input Files Guide](https://docs.magichour.ai/integration/inputs-and-outputs) for more details.\n\nThe response array will match the order of items in the request body.\n\n**Valid file extensions per asset type**:\n- video: mp4, m4v, mov, webm\n- audio: mp3, wav, aac, flac, webm, weba, m4a, opus, ogg, oga, aiff, amr\n- image: png, jpg, jpeg, jpe, jfif, heic, heif, webp, avif, jp2, tiff, tif, bmp\n- gif: gif, webp, webm\n\n> Note: `gif` is only supported for face swap API `video_file_path` field.\n\nOnce you receive an upload URL, send a `PUT` request to upload the file directly.\n\nExample:\n\n```\ncurl -X PUT --data '@/path/to/file/video.mp4' \\\n https://videos.magichour.ai/api-assets/id/video.mp4?\u003cauth params from the API response>\n```\n","href":"/api-reference/files/generate-asset-upload-urls"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Generates a list of pre-signed upload URLs for the assets required. This API is only necessary if you want to upload to Magic Hour's storage. Refer to the [Input Files Guide](https://docs.magichour.ai/integration/inputs-and-outputs) for more details.\n\nThe response array will match the order of items in the request body.\n\n**Valid file extensions per asset type**:\n- video: mp4, m4v, mov, webm\n- audio: mp3, wav, aac, flac, webm, weba, m4a, opus, ogg, oga, aiff, amr\n- image: png, jpg, jpeg, jpe, jfif, heic, heif, webp, avif, jp2, tiff, tif, bmp\n- gif: gif, webp, webm\n\n> Note: `gif` is only supported for face swap API `video_file_path` field.\n\nOnce you receive an upload URL, send a `PUT` request to upload the file directly.\n\nExample:\n\n```\ncurl -X PUT --data '@/path/to/file/video.mp4' \\\n https://videos.magichour.ai/api-assets/id/video.mp4?\u003cauth params from the API response>\n```\n","summary":"Generate asset upload urls","tags":["Files"],"parameters":[],"operationId":"videoAssets.generatePresignedUrl","requestBody":"c3244998-e13c-4111-867b-9503738cc34e","responses":{"200":"a220ea91-5667-45c9-baf4-5d22c1550122","400":"a8cec48c-6cee-4e2d-9543-0ccd0879da2e","401":"de9e6a35-3665-4775-b342-b4e4c20e2c87","402":"8617456b-3db1-4ea6-bb30-3b2de6048192","404":"94d58e7a-b688-45a3-8b96-b8670c7955f3","422":"be45a782-826e-47a9-ae6f-e9dc339d85ab","500":"69174a6f-a6a8-4f4a-9993-83b9fa676149"},"security":["af81eb07-7b6e-4791-a2e4-4278a2ac7ada"],"x-codeSamples":[{"lang":"python","source":"from magic_hour import Client\nfrom os import getenv\n\nclient = Client(token=getenv(\"MAGIC_HOUR_API_KEY\"))\nres = client.v1.files.upload_urls.create(\n items=[\n {\"extension\": \"mp4\", \"type_\": \"video\"},\n {\"extension\": \"mp3\", \"type_\": \"audio\"},\n ]\n)"},{"lang":"javascript","source":"import { Client } from \"magic-hour\";\n\nconst client = new Client({ token: process.env[\"MAGIC_HOUR_API_KEY\"] });\nconst res = await client.v1.files.uploadUrls.create({\n items: [\n { extension: \"mp4\", type: \"video\" },\n { extension: \"mp3\", type: \"audio\" },\n ],\n});"},{"lang":"go","source":"package main\n\nimport (\n\tos \"os\"\n\n\tsdk \"github.com/magichourhq/magic-hour-go/client\"\n\tupload_urls \"github.com/magichourhq/magic-hour-go/resources/v1/files/upload_urls\"\n\ttypes \"github.com/magichourhq/magic-hour-go/types\"\n)\n\nfunc main() {\n\tclient := sdk.NewClient(\n\t\tsdk.WithBearerAuth(os.Getenv(\"MAGIC_HOUR_API_KEY\")),\n\t)\n\tres, err := client.V1.Files.UploadUrls.Create(upload_urls.CreateRequest{\n\t\tItems: []types.V1FilesUploadUrlsCreateBodyItemsItem{\n\t\t\ttypes.V1FilesUploadUrlsCreateBodyItemsItem{\n\t\t\t\tExtension: \"mp4\",\n\t\t\t\tType: types.V1FilesUploadUrlsCreateBodyItemsItemTypeEnumVideo,\n\t\t\t},\n\t\t\ttypes.V1FilesUploadUrlsCreateBodyItemsItem{\n\t\t\t\tExtension: \"mp3\",\n\t\t\t\tType: types.V1FilesUploadUrlsCreateBodyItemsItemTypeEnumAudio,\n\t\t\t},\n\t\t},\n\t})\n}"},{"lang":"rust","source":"let client = magic_hour::Client::default()\n .with_bearer_auth(\u0026std::env::var(\"MAGIC_HOUR_API_KEY\").unwrap());\nlet res = client\n .v1()\n .files()\n .upload_urls()\n .create(magic_hour::resources::v1::files::upload_urls::CreateRequest {\n items: vec![\n magic_hour::models::V1FilesUploadUrlsCreateBodyItemsItem { extension :\n \"mp4\".to_string(), type_ :\n magic_hour::models::V1FilesUploadUrlsCreateBodyItemsItemTypeEnum::Video\n }, magic_hour::models::V1FilesUploadUrlsCreateBodyItemsItem { extension :\n \"mp3\".to_string(), type_ :\n magic_hour::models::V1FilesUploadUrlsCreateBodyItemsItemTypeEnum::Audio }\n ],\n })\n .await;"},{"lang":"curl","source":"curl --request POST \\\n --url https://api.magichour.ai/v1/files/upload-urls \\\n --header 'accept: application/json' \\\n --header \"authorization: Bearer $MAGIC_HOUR_API_KEY\" \\\n --header 'content-type: application/json' \\\n --data '\n{\n \"items\": [\n {\n \"type\": \"video\",\n \"extension\": \"mp4\"\n },\n {\n \"type\": \"audio\",\n \"extension\": \"mp3\"\n }\n ]\n}\n'"},{"lang":"php","source":"\u003c?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n CURLOPT_URL => \"https://api.magichour.ai/v1/files/upload-urls\",\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_ENCODING => \"\",\n CURLOPT_MAXREDIRS => 10,\n CURLOPT_TIMEOUT => 30,\n CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n CURLOPT_CUSTOMREQUEST => \"POST\",\n CURLOPT_POSTFIELDS => json_encode([\n 'items' => [\n [\n 'type' => 'video',\n 'extension' => 'mp4'\n ],\n [\n 'type' => 'audio',\n 'extension' => 'mp3'\n ]\n ]\n ]),\n CURLOPT_HTTPHEADER => [\n \"accept: application/json\",\n \"authorization: Bearer \u003ctoken>\",\n \"content-type: application/json\"\n ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n echo \"cURL Error #:\" . $err;\n} else {\n echo $response;\n}"},{"lang":"java","source":"HttpResponse\u003cString> response = Unirest.post(\"https://api.magichour.ai/v1/files/upload-urls\")\n .header(\"accept\", \"application/json\")\n .header(\"content-type\", \"application/json\")\n .header(\"authorization\", \"Bearer \u003ctoken>\")\n .body(\"{\\\"items\\\":[{\\\"type\\\":\\\"video\\\",\\\"extension\\\":\\\"mp4\\\"},{\\\"type\\\":\\\"audio\\\",\\\"extension\\\":\\\"mp3\\\"}]}\")\n .asString();"}],"method":"post","type":"path","servers":["999ba4e9-425a-451a-b7b7-cdef4eb6182c"],"path":"/v1/files/upload-urls","baseUrlOptions":["https://api.magichour.ai"],"title":"Generate asset upload urls","codeSamples":[{"lang":"python","source":"from magic_hour import Client\nfrom os import getenv\n\nclient = Client(token=getenv(\"MAGIC_HOUR_API_KEY\"))\nres = client.v1.files.upload_urls.create(\n items=[\n {\"extension\": \"mp4\", \"type_\": \"video\"},\n {\"extension\": \"mp3\", \"type_\": \"audio\"},\n ]\n)"},{"lang":"javascript","source":"import { Client } from \"magic-hour\";\n\nconst client = new Client({ token: process.env[\"MAGIC_HOUR_API_KEY\"] });\nconst res = await client.v1.files.uploadUrls.create({\n items: [\n { extension: \"mp4\", type: \"video\" },\n { extension: \"mp3\", type: \"audio\" },\n ],\n});"},{"lang":"go","source":"package main\n\nimport (\n\tos \"os\"\n\n\tsdk \"github.com/magichourhq/magic-hour-go/client\"\n\tupload_urls \"github.com/magichourhq/magic-hour-go/resources/v1/files/upload_urls\"\n\ttypes \"github.com/magichourhq/magic-hour-go/types\"\n)\n\nfunc main() {\n\tclient := sdk.NewClient(\n\t\tsdk.WithBearerAuth(os.Getenv(\"MAGIC_HOUR_API_KEY\")),\n\t)\n\tres, err := client.V1.Files.UploadUrls.Create(upload_urls.CreateRequest{\n\t\tItems: []types.V1FilesUploadUrlsCreateBodyItemsItem{\n\t\t\ttypes.V1FilesUploadUrlsCreateBodyItemsItem{\n\t\t\t\tExtension: \"mp4\",\n\t\t\t\tType: types.V1FilesUploadUrlsCreateBodyItemsItemTypeEnumVideo,\n\t\t\t},\n\t\t\ttypes.V1FilesUploadUrlsCreateBodyItemsItem{\n\t\t\t\tExtension: \"mp3\",\n\t\t\t\tType: types.V1FilesUploadUrlsCreateBodyItemsItemTypeEnumAudio,\n\t\t\t},\n\t\t},\n\t})\n}"},{"lang":"rust","source":"let client = magic_hour::Client::default()\n .with_bearer_auth(\u0026std::env::var(\"MAGIC_HOUR_API_KEY\").unwrap());\nlet res = client\n .v1()\n .files()\n .upload_urls()\n .create(magic_hour::resources::v1::files::upload_urls::CreateRequest {\n items: vec![\n magic_hour::models::V1FilesUploadUrlsCreateBodyItemsItem { extension :\n \"mp4\".to_string(), type_ :\n magic_hour::models::V1FilesUploadUrlsCreateBodyItemsItemTypeEnum::Video\n }, magic_hour::models::V1FilesUploadUrlsCreateBodyItemsItem { extension :\n \"mp3\".to_string(), type_ :\n magic_hour::models::V1FilesUploadUrlsCreateBodyItemsItemTypeEnum::Audio }\n ],\n })\n .await;"},{"lang":"curl","source":"curl --request POST \\\n --url https://api.magichour.ai/v1/files/upload-urls \\\n --header 'accept: application/json' \\\n --header \"authorization: Bearer $MAGIC_HOUR_API_KEY\" \\\n --header 'content-type: application/json' \\\n --data '\n{\n \"items\": [\n {\n \"type\": \"video\",\n \"extension\": \"mp4\"\n },\n {\n \"type\": \"audio\",\n \"extension\": \"mp3\"\n }\n ]\n}\n'"},{"lang":"php","source":"\u003c?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n CURLOPT_URL => \"https://api.magichour.ai/v1/files/upload-urls\",\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_ENCODING => \"\",\n CURLOPT_MAXREDIRS => 10,\n CURLOPT_TIMEOUT => 30,\n CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n CURLOPT_CUSTOMREQUEST => \"POST\",\n CURLOPT_POSTFIELDS => json_encode([\n 'items' => [\n [\n 'type' => 'video',\n 'extension' => 'mp4'\n ],\n [\n 'type' => 'audio',\n 'extension' => 'mp3'\n ]\n ]\n ]),\n CURLOPT_HTTPHEADER => [\n \"accept: application/json\",\n \"authorization: Bearer \u003ctoken>\",\n \"content-type: application/json\"\n ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n echo \"cURL Error #:\" . $err;\n} else {\n echo $response;\n}"},{"lang":"java","source":"HttpResponse\u003cString> response = Unirest.post(\"https://api.magichour.ai/v1/files/upload-urls\")\n .header(\"accept\", \"application/json\")\n .header(\"content-type\", \"application/json\")\n .header(\"authorization\", \"Bearer \u003ctoken>\")\n .body(\"{\\\"items\\\":[{\\\"type\\\":\\\"video\\\",\\\"extension\\\":\\\"mp4\\\"},{\\\"type\\\":\\\"audio\\\",\\\"extension\\\":\\\"mp3\\\"}]}\")\n .asString();"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"description":"Body","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["video","audio","image"],"description":"The type of asset to upload. Possible types are video, audio, image","example":"video","isRequired":true,"uniqueKey":"\\items.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"extension":{"type":"string","pattern":"^[a-z0-9]+$","description":"The extension of the file to upload. Do not include the dot (.) before the extension. Possible extensions are mp4,m4v,mov,webm,mp3,wav,aac,flac,webm,weba,m4a,opus,ogg,oga,aiff,amr,png,jpg,jpeg,jpe,jfif,heic,heif,webp,avif,jp2,tiff,tif,bmp,gif,webp,webm","example":"mp4","isRequired":true,"uniqueKey":"\\items.items.[INDEX].extension","typeLabel":"string"}},"required":["type","extension"],"uniqueKey":"\\items.items.[INDEX]","typeLabel":"object"},"minItems":1,"description":"The list of assets to upload. The response array will match the order of items in the request body.","example":[{"type":"video","extension":"mp4"},{"type":"audio","extension":"mp3"}],"isRequired":true,"uniqueKey":"\\items","typeLabel":"object[]"}},"required":["items"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"items":[{"type":"video","extension":"mp4"},{"type":"audio","extension":"mp3"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"a220ea91-5667-45c9-baf4-5d22c1550122":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"upload_url":{"type":"string","format":"uri","description":"Used to upload the file to storage, send a PUT request with the file as data to upload.","example":"https://videos.magichour.ai/id/video.mp4?auth-value=1234567890","isRequired":true,"uniqueKey":"\\items.items.[INDEX].upload_url","typeLabel":"string\u003curi>"},"expires_at":{"type":"string","format":"date-time","description":"when the upload url expires, and will need to request a new one.","example":"2024-07-21T17:32:28Z","isRequired":true,"uniqueKey":"\\items.items.[INDEX].expires_at","typeLabel":"string\u003cdate-time>"},"file_path":{"type":"string","description":"this value is used in APIs that needs assets, such as image_file_path, video_file_path, and audio_file_path","example":"video/id/1234.mp4","isRequired":true,"uniqueKey":"\\items.items.[INDEX].file_path","typeLabel":"string"}},"required":["upload_url","expires_at","file_path"],"uniqueKey":"\\items.items.[INDEX]","typeLabel":"object"},"description":"The list of upload URLs and file paths for the assets. The response array will match the order of items in the request body. Refer to the [Input Files Guide](https://docs.magichour.ai/integration/inputs-and-outputs) for more details.","example":[{"upload_url":"https://videos.magichour.ai/api-assets/id/video.mp4?auth-value=1234567890","expires_at":"2024-07-25T16:56:21.932Z","file_path":"api-assets/id/video.mp4"},{"upload_url":"https://videos.magichour.ai/api-assets/id/audio.mp3?auth-value=1234567890","expires_at":"2024-07-25T16:56:21.932Z","file_path":"api-assets/id/audio.mp3"}],"isRequired":true,"uniqueKey":"\\items","typeLabel":"object[]"}},"required":["items"],"description":"Success","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"items":[{"upload_url":"https://videos.magichour.ai/api-assets/id/video.mp4?auth-value=1234567890","expires_at":"2024-07-25T16:56:21.932Z","file_path":"api-assets/id/video.mp4"},{"upload_url":"https://videos.magichour.ai/api-assets/id/audio.mp3?auth-value=1234567890","expires_at":"2024-07-25T16:56:21.932Z","file_path":"api-assets/id/audio.mp3"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"a8cec48c-6cee-4e2d-9543-0ccd0879da2e":{"description":"Invalid Request","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["invalid_request"],"description":"Machine-readable error code.\n\n- `invalid_request`: Fix request syntax or validation errors before retrying.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"invalid_request","message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"de9e6a35-3665-4775-b342-b4e4c20e2c87":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unauthorized"],"description":"Machine-readable error code.\n\n- `unauthorized`: Provide a valid API key before retrying.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"unauthorized","message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"8617456b-3db1-4ea6-bb30-3b2de6048192":{"description":"Payment Required","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["insufficient_credits","subscription_required","plan_upgrade_required"],"description":"Machine-readable error code.\n\n- `insufficient_credits`: Purchase credits before retrying.\n\n- `subscription_required`: Start a subscription before retrying.\n\n- `plan_upgrade_required`: Upgrade the subscription plan before retrying.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"insufficient_credits","message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"94d58e7a-b688-45a3-8b96-b8670c7955f3":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["not_found"],"description":"Machine-readable error code.\n\n- `not_found`: Check the route or resource identifier.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"be45a782-826e-47a9-ae6f-e9dc339d85ab":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unprocessable_entity"],"description":"Machine-readable error code.\n\n- `unprocessable_entity`: Change the request values before retrying.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"unprocessable_entity","message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"69174a6f-a6a8-4f4a-9993-83b9fa676149":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["internal_server_error"],"description":"Machine-readable error code.\n\n- `internal_server_error`: Retry later or contact support if the error continues.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"internal_server_error","message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"af81eb07-7b6e-4791-a2e4-4278a2ac7ada":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Bearer authentication header of the form `Bearer \u003capi_key>`, where `\u003capi_key>` is your API key. To get your API key, go to [Developer Hub](https://magichour.ai/developer?tab=api-keys\u0026utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=api-reference) and click \"Create new API Key\".","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"999ba4e9-425a-451a-b7b7-cdef4eb6182c":{"url":"https://api.magichour.ai"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Bearer authentication header of the form `Bearer \u003capi_key>`, where `\u003capi_key>` is your API key. To get your API key, go to [Developer Hub](https://magichour.ai/developer?tab=api-keys\u0026utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=api-reference) and click \"Create new API Key\".","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003capi_key>`, where `\u003capi_key>` is your API key. To get your API key, go to [Developer Hub](https://magichour.ai/developer?tab=api-keys\u0026utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=api-reference) and click \"Create new API Key\".","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"magichour","siteName":"Magic Hour API Docs","title":"Generate Asset Upload Urls API Reference - Magic Hour Docs - Magic Hour API Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-10T15:25:20.527Z","originalFileLocation":"api-reference/files/generate-asset-upload-urls.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=\"dark\"}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=\"Generates a list of pre-signed upload URLs for the assets required. This API is only necessary if you want to upload to Magic Hour\u0026#x27;s storage. Refer to the Input Files Guide for more details. The response array will match the order of items in the request body. Valid file extensions per asset type: - video: mp4, m4v, mov, webm - audio: mp3, wav, aac, flac, webm, weba, m4a, opus, ogg, oga, aiff, amr - image: png, jpg, jpeg, jpe, jfif, heic, heif, webp, avif, jp2, tiff, tif, bmp - gif: gif, webp, webm \u0026gt; Note: gif is only supported for face swap API video_file_path field. Once you receive an upload URL, send a PUT request to upload the file directly. Example: curl -X PUT --data \u0026#x27;@/path/to/file/video.mp4\u0026#x27; \\ https://videos.magichour.ai/api-assets/id/video.mp4?\">\u003cmeta data-mint-head name=\"application-name\" content=\"Magic Hour API Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/magichour/pV2W72GIHTaiOFzk/_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/magichour/pV2W72GIHTaiOFzk/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/magichour/pV2W72GIHTaiOFzk/_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/magichour/pV2W72GIHTaiOFzk/_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/magichour/pV2W72GIHTaiOFzk/_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/magichour/pV2W72GIHTaiOFzk/_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/magichour/pV2W72GIHTaiOFzk/_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/magichour/pV2W72GIHTaiOFzk/_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/magichour/pV2W72GIHTaiOFzk/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Generate Asset Upload Urls API Reference - Magic Hour Docs - Magic Hour API Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Generates a list of pre-signed upload URLs for the assets required. This API is only necessary if you want to upload to Magic Hour\u0026#x27;s storage. Refer to the Input Files Guide for more details. The response array will match the order of items in the request body. Valid file extensions per asset type: - video: mp4, m4v, mov, webm - audio: mp3, wav, aac, flac, webm, weba, m4a, opus, ogg, oga, aiff, amr - image: png, jpg, jpeg, jpe, jfif, heic, heif, webp, avif, jp2, tiff, tif, bmp - gif: gif, webp, webm \u0026gt; Note: gif is only supported for face swap API video_file_path field. Once you receive an upload URL, send a PUT request to upload the file directly. Example: curl -X PUT --data \u0026#x27;@/path/to/file/video.mp4\u0026#x27; \\ https://videos.magichour.ai/api-assets/id/video.mp4?\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Magic Hour API Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://d28dkohlqf5vwj.cloudfront.net/open-graph/logo-social-noisy-spectrum.jpg\">\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=\"Generate Asset Upload Urls API Reference - Magic Hour Docs - Magic Hour API Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Generates a list of pre-signed upload URLs for the assets required. This API is only necessary if you want to upload to Magic Hour\u0026#x27;s storage. Refer to the Input Files Guide for more details. The response array will match the order of items in the request body. Valid file extensions per asset type: - video: mp4, m4v, mov, webm - audio: mp3, wav, aac, flac, webm, weba, m4a, opus, ogg, oga, aiff, amr - image: png, jpg, jpeg, jpe, jfif, heic, heif, webp, avif, jp2, tiff, tif, bmp - gif: gif, webp, webm \u0026gt; Note: gif is only supported for face swap API video_file_path field. Once you receive an upload URL, send a PUT request to upload the file directly. Example: curl -X PUT --data \u0026#x27;@/path/to/file/video.mp4\u0026#x27; \\ https://videos.magichour.ai/api-assets/id/video.mp4?\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://d28dkohlqf5vwj.cloudfront.net/open-graph/logo-social-noisy-spectrum.jpg\">\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/magichour/pV2W72GIHTaiOFzk/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Magic Hour API Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3b82f6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/files/generate-asset-upload-urls.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.magichour.ai/#organization\",\"name\":\"Magic Hour API Docs\",\"url\":\"https://docs.magichour.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/magichour/5sgGJpuuipkw5s5v/icons/logo-light.svg?fit=max\u0026auto=format\u0026n=5sgGJpuuipkw5s5v\u0026q=85\u0026s=1f167e30baf11927bc2e0932411e455b\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.magichour.ai#website\",\"name\":\"Magic Hour API Docs\",\"url\":\"https://docs.magichour.ai\",\"publisher\":{\"@id\":\"https://docs.magichour.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#webpage\",\"url\":\"https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls\",\"name\":\"Generate Asset Upload Urls API Reference - Magic Hour Docs\",\"description\":\"Generates a list of pre-signed upload URLs for the assets required. This API is only necessary if you want to upload to Magic Hour's storage. Refer to the Input Files Guide for more details. The response array will match the order of items in the request body. Valid file extensions per asset type: - video: mp4, m4v, mov, webm - audio: mp3, wav, aac, flac, webm, weba, m4a, opus, ogg, oga, aiff, amr - image: png, jpg, jpeg, jpe, jfif, heic, heif, webp, avif, jp2, tiff, tif, bmp - gif: gif, webp, webm > Note: gif is only supported for face swap API video_file_path field. Once you receive an upload URL, send a PUT request to upload the file directly. Example: curl -X PUT --data '@/path/to/file/video.mp4' \\\\ https://videos.magichour.ai/api-assets/id/video.mp4?\",\"dateModified\":\"2026-11-10T15:25:20.527Z\",\"isPartOf\":{\"@id\":\"https://docs.magichour.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Files\",\"item\":\"https://docs.magichour.ai/api-reference/files/list-saved-items\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Generate Asset Upload Urls API Reference - Magic Hour Docs\",\"item\":\"https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#apireference\",\"headline\":\"Generate Asset Upload Urls API Reference - Magic Hour Docs\",\"name\":\"Generate Asset Upload Urls API Reference - Magic Hour Docs\",\"description\":\"Generates a list of pre-signed upload URLs for the assets required. This API is only necessary if you want to upload to Magic Hour's storage. Refer to the Input Files Guide for more details. The response array will match the order of items in the request body. Valid file extensions per asset type: - video: mp4, m4v, mov, webm - audio: mp3, wav, aac, flac, webm, weba, m4a, opus, ogg, oga, aiff, amr - image: png, jpg, jpeg, jpe, jfif, heic, heif, webp, avif, jp2, tiff, tif, bmp - gif: gif, webp, webm > Note: gif is only supported for face swap API video_file_path field. Once you receive an upload URL, send a PUT request to upload the file directly. Example: curl -X PUT --data '@/path/to/file/video.mp4' \\\\ https://videos.magichour.ai/api-assets/id/video.mp4?\",\"url\":\"https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls\",\"mainEntityOfPage\":{\"@id\":\"https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#webpage\"},\"image\":\"https://d28dkohlqf5vwj.cloudfront.net/open-graph/logo-social-noisy-spectrum.jpg\",\"dateModified\":\"2026-11-10T15:25:20.527Z\",\"publisher\":{\"@id\":\"https://docs.magichour.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.magichour.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Magic Hour API Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Magic Hour API Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/files/generate-asset-upload-urls.md","siteName":"Magic Hour API Docs","nav":{"global":{"anchors":[{"anchor":"API quickstart","icon":"forward-fast","href":"/get-started/quick-start"},{"anchor":"API pricing","icon":"credit-card","href":"/billing/overview"},{"anchor":"Community","icon":"discord","href":"https://discord.com/invite/JX5rgsZaJp"},{"anchor":"Status","icon":"wave-pulse","href":"https://status.magichour.ai"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/overview"},{"title":"Models and Credit Costs","sidebarTitle":"Models","href":"/api-reference/models"},{"title":"Historical API Processing Times","sidebarTitle":"Processing Times","href":"/api-reference/processing-times"},{"group":"Account","pages":[{"openapi":"get /v1/account","title":"Get account details","href":"/api-reference/account/get-account-details"}]},{"group":"Files","pages":[{"openapi":"get /v1/saved-items","title":"List saved items","description":"Returns active saved items owned by the authenticated account, newest first. Each item includes every saved asset with a durable file_path for reuse in compatible generation APIs and a temporary signed URL for previewing or downloading. Filter by type to find characters, references, voices, moodboards, or brand kits. To fetch the next page, pass the response's next_cursor as cursor.","href":"/api-reference/files/list-saved-items"},{"openapi":"post /v1/files/upload-urls","title":"Generate Asset Upload Urls API Reference - Magic Hour Docs","sidebarTitle":"Generate Asset Upload Urls","href":"/api-reference/files/generate-asset-upload-urls"},{"openapi":"get /v1/face-detection/{id}","title":"Get Face Detection Details API Reference - Magic Hour Docs","sidebarTitle":"Get Face Detection Details","description":"Get the details of a face detection task. \n\nUse this API to get the list of faces detected in the image or video to use in the [face swap photo](https://docs.magichour.ai/api-reference/image-projects/face-swap-photo) or [face swap video](https://docs.magichour.ai/api-reference/video-projects/face-swap-video) API calls for multi-face swaps.\n\nWhen `status` is `error`, the `error` field explains why (for example `nsfw` when the content-safety filter blocked the file). It is `null` otherwise.","href":"/api-reference/files/get-face-detection-details"},{"openapi":"post /v1/face-detection","title":"Face Detection API Reference - Magic Hour Docs","sidebarTitle":"Face Detection","href":"/api-reference/files/face-detection"}]},{"group":"Video Projects","pages":[{"openapi":"get /v1/video-projects/{id}","title":"Get Video Details API Reference - Magic Hour Docs","sidebarTitle":"Get Video Details","href":"/api-reference/video-projects/get-video-details"},{"openapi":"delete /v1/video-projects/{id}","title":"Delete Video API Reference - Magic Hour Docs","sidebarTitle":"Delete Video","href":"/api-reference/video-projects/delete-video"},{"openapi":"post /v1/ai-talking-photo","title":"AI Talking Photo API Reference - Magic Hour Docs","sidebarTitle":"AI Talking Photo","href":"/api-reference/video-projects/ai-talking-photo"},{"openapi":"post /v1/ai-ugc-ad","title":"AI UGC Ad Generator","href":"/api-reference/video-projects/ai-ugc-ad-generator"},{"openapi":"post /v1/ai-video-editor","title":"AI Video Editor","href":"/api-reference/video-projects/ai-video-editor"},{"openapi":"post /v1/ai-video-translator","title":"AI Video Translator","href":"/api-reference/video-projects/ai-video-translator"},{"openapi":"post /v1/ai-video-upscaler","title":"AI Video Upscaler","href":"/api-reference/video-projects/ai-video-upscaler"},{"openapi":"post /v1/animation","title":"Animation API Reference - Magic Hour Docs","sidebarTitle":"Animation","href":"/api-reference/video-projects/animation"},{"openapi":"post /v1/audio-to-video","title":"Audio-to-Video","href":"/api-reference/video-projects/audio-to-video"},{"openapi":"post /v1/auto-subtitle-generator","title":"Auto Subtitle Generator API Reference - Magic Hour Docs","sidebarTitle":"Auto Subtitle Generator","href":"/api-reference/video-projects/auto-subtitle-generator"},{"openapi":"post /v1/character-replace","title":"Character Replace API Reference - Magic Hour Docs","sidebarTitle":"Character Replace","href":"/api-reference/video-projects/character-replace"},{"openapi":"post /v1/face-swap","title":"Face Swap Video API Reference - Magic Hour Docs","sidebarTitle":"Face Swap Video","href":"/api-reference/video-projects/face-swap-video"},{"openapi":"post /v1/image-to-video","title":"Image-to-Video API Reference - Magic Hour Docs","sidebarTitle":"Image-to-Video","href":"/api-reference/video-projects/image-to-video"},{"openapi":"post /v1/lip-sync","title":"Lip Sync API Reference - Magic Hour Docs","sidebarTitle":"Lip Sync","href":"/api-reference/video-projects/lip-sync"},{"openapi":"post /v1/text-to-video","title":"Text-to-Video API Reference - Magic Hour Docs","sidebarTitle":"Text-to-Video","href":"/api-reference/video-projects/text-to-video"},{"openapi":"post /v1/video-to-video","title":"Video-to-Video API Reference - Magic Hour Docs","sidebarTitle":"Video-to-Video","href":"/api-reference/video-projects/video-to-video"}]},{"group":"Image Projects","pages":[{"openapi":"get /v1/image-projects/{id}","title":"Get Image Details API Reference - Magic Hour Docs","sidebarTitle":"Get Image Details","href":"/api-reference/image-projects/get-image-details"},{"openapi":"delete /v1/image-projects/{id}","title":"Delete Image API Reference - Magic Hour Docs","sidebarTitle":"Delete Image","href":"/api-reference/image-projects/delete-image"},{"openapi":"post /v1/ai-clothes-changer","title":"AI Clothes Changer API Reference - Magic Hour Docs","sidebarTitle":"AI Clothes Changer","href":"/api-reference/image-projects/ai-clothes-changer"},{"openapi":"post /v1/ai-face-editor","title":"AI Face Editor API Reference - Magic Hour Docs","sidebarTitle":"AI Face Editor","href":"/api-reference/image-projects/ai-face-editor"},{"openapi":"post /v1/ai-gif-generator","title":"AI GIF Generator API Reference - Magic Hour Docs","sidebarTitle":"AI GIF Generator","href":"/api-reference/image-projects/ai-gif-generator"},{"openapi":"post /v1/ai-image-editor","title":"AI Image Editor API Reference - Magic Hour Docs","sidebarTitle":"AI Image Editor","href":"/api-reference/image-projects/ai-image-editor"},{"openapi":"post /v1/ai-headshot-generator","title":"AI Headshot Generator API Reference - Magic Hour Docs","sidebarTitle":"AI Headshot Generator","href":"/api-reference/image-projects/ai-headshot-generator"},{"openapi":"post /v1/ai-image-generator","title":"AI Image Generator API Reference - Magic Hour Docs","sidebarTitle":"AI Image Generator","href":"/api-reference/image-projects/ai-image-generator"},{"openapi":"post /v1/ai-image-upscaler","title":"AI Image Upscaler API Reference - Magic Hour Docs","sidebarTitle":"AI Image Upscaler","href":"/api-reference/image-projects/ai-image-upscaler"},{"openapi":"post /v1/ai-meme-generator","title":"AI Meme Generator API Reference - Magic Hour Docs","sidebarTitle":"AI Meme Generator","href":"/api-reference/image-projects/ai-meme-generator"},{"openapi":"post /v1/ai-qr-code-generator","title":"AI QR Code Generator API Reference - Magic Hour Docs","sidebarTitle":"AI QR Code Generator","href":"/api-reference/image-projects/ai-qr-code-generator"},{"openapi":"post /v1/body-swap","title":"Body Swap","href":"/api-reference/image-projects/body-swap"},{"openapi":"post /v1/face-swap-photo","title":"Face Swap Photo API Reference - Magic Hour Docs","sidebarTitle":"Face Swap Photo","href":"/api-reference/image-projects/face-swap-photo"},{"openapi":"post /v1/head-swap","title":"Head Swap API Reference - Magic Hour Docs","sidebarTitle":"Head Swap","href":"/api-reference/image-projects/head-swap"},{"openapi":"post /v1/image-background-remover","title":"Image Background Remover API Reference - Magic Hour Docs","sidebarTitle":"Image Background Remover","href":"/api-reference/image-projects/image-background-remover"},{"openapi":"post /v1/photo-colorizer","title":"Photo Colorizer API Reference - Magic Hour Docs","sidebarTitle":"Photo Colorizer","href":"/api-reference/image-projects/photo-colorizer"}]},{"group":"Audio Projects","pages":[{"openapi":"get /v1/voices","title":"List voices","href":"/api-reference/audio-projects/list-voices"},{"openapi":"get /v1/audio-projects/{id}","title":"Get Audio Details API Reference - Magic Hour Docs","sidebarTitle":"Get Audio Details","href":"/api-reference/audio-projects/get-audio-details"},{"openapi":"delete /v1/audio-projects/{id}","title":"Delete Audio API Reference - Magic Hour Docs","sidebarTitle":"Delete Audio","href":"/api-reference/audio-projects/delete-audio"},{"openapi":"post /v1/ai-music-generator","title":"AI Music Generator","href":"/api-reference/audio-projects/ai-music-generator"},{"openapi":"post /v1/ai-voice-generator","title":"AI Voice Generator API Reference - Magic Hour Docs","sidebarTitle":"AI Voice Generator","href":"/api-reference/audio-projects/ai-voice-generator"},{"openapi":"post /v1/ai-voice-cloner","title":"AI Voice Cloner API Reference - Magic Hour Docs","sidebarTitle":"AI Voice Cloner","href":"/api-reference/audio-projects/ai-voice-cloner"}]}],"groups":[{"group":"Account","pages":[{"openapi":"get /v1/account","title":"Get account details","href":"/api-reference/account/get-account-details"}]},{"group":"Files","pages":[{"openapi":"get /v1/saved-items","title":"List saved items","description":"Returns active saved items owned by the authenticated account, newest first. Each item includes every saved asset with a durable file_path for reuse in compatible generation APIs and a temporary signed URL for previewing or downloading. Filter by type to find characters, references, voices, moodboards, or brand kits. To fetch the next page, pass the response's next_cursor as cursor.","href":"/api-reference/files/list-saved-items"},{"openapi":"post /v1/files/upload-urls","title":"Generate Asset Upload Urls API Reference - Magic Hour Docs","sidebarTitle":"Generate Asset Upload Urls","href":"/api-reference/files/generate-asset-upload-urls"},{"openapi":"get /v1/face-detection/{id}","title":"Get Face Detection Details API Reference - Magic Hour Docs","sidebarTitle":"Get Face Detection Details","description":"Get the details of a face detection task. \n\nUse this API to get the list of faces detected in the image or video to use in the [face swap photo](https://docs.magichour.ai/api-reference/image-projects/face-swap-photo) or [face swap video](https://docs.magichour.ai/api-reference/video-projects/face-swap-video) API calls for multi-face swaps.\n\nWhen `status` is `error`, the `error` field explains why (for example `nsfw` when the content-safety filter blocked the file). It is `null` otherwise.","href":"/api-reference/files/get-face-detection-details"},{"openapi":"post /v1/face-detection","title":"Face Detection API Reference - Magic Hour Docs","sidebarTitle":"Face Detection","href":"/api-reference/files/face-detection"}]},{"group":"Audio Projects","pages":[{"openapi":"get /v1/voices","title":"List voices","href":"/api-reference/audio-projects/list-voices"},{"openapi":"get /v1/audio-projects/{id}","title":"Get Audio Details API Reference - Magic Hour Docs","sidebarTitle":"Get Audio Details","href":"/api-reference/audio-projects/get-audio-details"},{"openapi":"delete /v1/audio-projects/{id}","title":"Delete Audio API Reference - Magic Hour Docs","sidebarTitle":"Delete Audio","href":"/api-reference/audio-projects/delete-audio"},{"openapi":"post /v1/ai-music-generator","title":"AI Music Generator","href":"/api-reference/audio-projects/ai-music-generator"},{"openapi":"post /v1/ai-voice-cloner","title":"AI Voice Cloner API Reference - Magic Hour Docs","sidebarTitle":"AI Voice Cloner","href":"/api-reference/audio-projects/ai-voice-cloner"},{"openapi":"post /v1/ai-voice-generator","title":"AI Voice Generator API Reference - Magic Hour Docs","sidebarTitle":"AI Voice Generator","href":"/api-reference/audio-projects/ai-voice-generator"}]},{"group":"Video Projects","pages":[{"openapi":"get /v1/video-projects/{id}","title":"Get Video Details API Reference - Magic Hour Docs","sidebarTitle":"Get Video Details","href":"/api-reference/video-projects/get-video-details"},{"openapi":"delete /v1/video-projects/{id}","title":"Delete Video API Reference - Magic Hour Docs","sidebarTitle":"Delete Video","href":"/api-reference/video-projects/delete-video"},{"openapi":"post /v1/ai-talking-photo","title":"AI Talking Photo API Reference - Magic Hour Docs","sidebarTitle":"AI Talking Photo","href":"/api-reference/video-projects/ai-talking-photo"},{"openapi":"post /v1/ai-ugc-ad","title":"AI UGC Ad Generator","href":"/api-reference/video-projects/ai-ugc-ad-generator"},{"openapi":"post /v1/ai-video-editor","title":"AI Video Editor","href":"/api-reference/video-projects/ai-video-editor"},{"openapi":"post /v1/ai-video-translator","title":"AI Video Translator","href":"/api-reference/video-projects/ai-video-translator"},{"openapi":"post /v1/ai-video-upscaler","title":"AI Video Upscaler","href":"/api-reference/video-projects/ai-video-upscaler"},{"openapi":"post /v1/animation","title":"Animation API Reference - Magic Hour Docs","sidebarTitle":"Animation","href":"/api-reference/video-projects/animation"},{"openapi":"post /v1/audio-to-video","title":"Audio-to-Video","href":"/api-reference/video-projects/audio-to-video"},{"openapi":"post /v1/auto-subtitle-generator","title":"Auto Subtitle Generator API Reference - Magic Hour Docs","sidebarTitle":"Auto Subtitle Generator","href":"/api-reference/video-projects/auto-subtitle-generator"},{"openapi":"post /v1/character-replace","title":"Character Replace API Reference - Magic Hour Docs","sidebarTitle":"Character Replace","href":"/api-reference/video-projects/character-replace"},{"openapi":"post /v1/face-swap","title":"Face Swap Video API Reference - Magic Hour Docs","sidebarTitle":"Face Swap Video","href":"/api-reference/video-projects/face-swap-video"},{"openapi":"post /v1/image-to-video","title":"Image-to-Video API Reference - Magic Hour Docs","sidebarTitle":"Image-to-Video","href":"/api-reference/video-projects/image-to-video"},{"openapi":"post /v1/lip-sync","title":"Lip Sync API Reference - Magic Hour Docs","sidebarTitle":"Lip Sync","href":"/api-reference/video-projects/lip-sync"},{"openapi":"post /v1/text-to-video","title":"Text-to-Video API Reference - Magic Hour Docs","sidebarTitle":"Text-to-Video","href":"/api-reference/video-projects/text-to-video"},{"openapi":"post /v1/video-to-video","title":"Video-to-Video API Reference - Magic Hour Docs","sidebarTitle":"Video-to-Video","href":"/api-reference/video-projects/video-to-video"}]},{"group":"Image Projects","pages":[{"openapi":"get /v1/image-projects/{id}","title":"Get Image Details API Reference - Magic Hour Docs","sidebarTitle":"Get Image Details","href":"/api-reference/image-projects/get-image-details"},{"openapi":"delete /v1/image-projects/{id}","title":"Delete Image API Reference - Magic Hour Docs","sidebarTitle":"Delete Image","href":"/api-reference/image-projects/delete-image"},{"openapi":"post /v1/ai-clothes-changer","title":"AI Clothes Changer API Reference - Magic Hour Docs","sidebarTitle":"AI Clothes Changer","href":"/api-reference/image-projects/ai-clothes-changer"},{"openapi":"post /v1/ai-face-editor","title":"AI Face Editor API Reference - Magic Hour Docs","sidebarTitle":"AI Face Editor","href":"/api-reference/image-projects/ai-face-editor"},{"openapi":"post /v1/ai-gif-generator","title":"AI GIF Generator API Reference - Magic Hour Docs","sidebarTitle":"AI GIF Generator","href":"/api-reference/image-projects/ai-gif-generator"},{"openapi":"post /v1/ai-image-editor","title":"AI Image Editor API Reference - Magic Hour Docs","sidebarTitle":"AI Image Editor","href":"/api-reference/image-projects/ai-image-editor"},{"openapi":"post /v1/ai-headshot-generator","title":"AI Headshot Generator API Reference - Magic Hour Docs","sidebarTitle":"AI Headshot Generator","href":"/api-reference/image-projects/ai-headshot-generator"},{"openapi":"post /v1/ai-image-generator","title":"AI Image Generator API Reference - Magic Hour Docs","sidebarTitle":"AI Image Generator","href":"/api-reference/image-projects/ai-image-generator"},{"openapi":"post /v1/ai-image-upscaler","title":"AI Image Upscaler API Reference - Magic Hour Docs","sidebarTitle":"AI Image Upscaler","href":"/api-reference/image-projects/ai-image-upscaler"},{"openapi":"post /v1/ai-meme-generator","title":"AI Meme Generator API Reference - Magic Hour Docs","sidebarTitle":"AI Meme Generator","href":"/api-reference/image-projects/ai-meme-generator"},{"openapi":"post /v1/ai-qr-code-generator","title":"AI QR Code Generator API Reference - Magic Hour Docs","sidebarTitle":"AI QR Code Generator","href":"/api-reference/image-projects/ai-qr-code-generator"},{"openapi":"post /v1/body-swap","title":"Body Swap","href":"/api-reference/image-projects/body-swap"},{"openapi":"post /v1/face-swap-photo","title":"Face Swap Photo API Reference - Magic Hour Docs","sidebarTitle":"Face Swap Photo","href":"/api-reference/image-projects/face-swap-photo"},{"openapi":"post /v1/head-swap","title":"Head Swap API Reference - Magic Hour Docs","sidebarTitle":"Head Swap","href":"/api-reference/image-projects/head-swap"},{"openapi":"post /v1/image-background-remover","title":"Image Background Remover API Reference - Magic Hour Docs","sidebarTitle":"Image Background Remover","href":"/api-reference/image-projects/image-background-remover"},{"openapi":"post /v1/photo-colorizer","title":"Photo Colorizer API Reference - Magic Hour Docs","sidebarTitle":"Photo Colorizer","href":"/api-reference/image-projects/photo-colorizer"}]}]},{"tab":"Webhook Reference","pages":[{"title":"Webhook Reference","href":"/webhook-reference/overview"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Generate Asset Upload Urls API Reference - Magic Hour Docs - Magic Hour API Docs","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C9Wu0MeN.js","utils-jWgu-6Qf.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DBD8f9qn.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BGuX1ui5.js","snippetPresets-Evy63nQB.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BQHO1lnV.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-B6C8m-t_.js","shallow-BG4cT0fH.js","getApiPlaygroundDisplay-CgEPrE-D.js","CodeSnippet-CU8JyZ9N.js","CodeSnippets-BnxHU32T.js","Page-D6S0Yh6q.js","getPastedJson-CwiYOonh.js","icon-DYDpWmDf.js","MethodPill-C-J-l7_c.js","DuplicateIcon-B6ARwg9w.js","createIcon-Dsv4MtDq.js","DynamicMarkdown-CtasenyM.js","SectionHeading-YNcgYwjB.js","axios-vUo_bRtp.js","Markdown-CwLx6PAg.js","clsx-C3kuh_dz.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CmKHfscc.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-U3mI6Ljh.js"]}