{
"message": "The selected model does not support Text To Image.",
"errors": {
"model": [
"This model is not available on your plan. Please upgrade to access it."
]
}
}
{
"message": "The selected model does not support Text To Image.",
"errors": {
"model": [
"This model is not available on your plan. Please upgrade to access it."
]
}
}
{
"message": "Too Many Attempts."
}
Generate music tracks from text with control over lyrics, tempo, key, and style. Returns a request_id for status polling.
Prerequisite: Consult the Model Selection endpoint to identify a valid model slug and check its parameter limits. Model slugs look like AceStep_1_5_Turbo — always take them from the models endpoint rather than hard-coding a display name.
These constraints are enforced by validation and are easy to trip over:
Field
Constraint
lyrics
Required and must be non-empty, including for instrumental tracks. Omitting it or sending "" returns 422 The lyrics field is required. For an instrumental track, send "[Instrumental]".
timesignature
Integer only, and only 2, 3, 4 or 6 are accepted. A notation string such as "4/4" returns 422 The timesignature field must be an integer. Map the numerator of an x/4 signature (4/4 → 4, 3/4 → 3, 2/4 → 2, 6/8 → 6); 5/4 and 7/8 cannot be expressed. Omit the field or send an empty value to let the model choose.
format
Use mp3 — the only format the current models actually produce (info.limits.output_formats). wav and flac are rejected with 422 This output format is not supported by this model. Available formats: mp3. An unrecognised value such as ogg returns 422 The selected format is invalid.
keyscale
Free-form string ("C major", "D minor", "F# minor"). Not validated against a fixed list — passed to the model as a hint.
vocal_language
Free-form string. Both ISO codes ("en") and language names ("English") are accepted. Not validated against a fixed list.
timesignature is validated as an integer, not as musical notation. If you populate it from a UI dropdown offering values like 4/4 or 6/8, convert to the integer before sending — otherwise only the requests that set the field fail, while the rest keep succeeding.
Sanctum personal access token, sent as Authorization: Bearer <token>. The token is opaque — it carries no claims and no embedded expiry, so do not attempt to decode it. Issue and revoke tokens from your account dashboard.
Every example in this schema is a working set for the model example shown — they are not defaults and not portable. Sizes, step counts, frame counts and frame rates are all per-model: read info.limits and info.defaults for the model you actually intend to use from GET /api/v2/models. Substituting a different model while keeping these values is the most common source of a 422.
Duration in seconds (10-600). The accepted range is model-specific — read info.limits.min_duration/max_duration for your model from GET /api/v2/models. Some models additionally cap duration per output format via info.limits.max_duration_by_format.
Number of diffusion inference steps (1-100). Use 8 for turbo models, 32+ for base models. The accepted range is model-specific — read info.limits.min_steps/max_steps for your model from GET /api/v2/models; several models pin it to a single value.
Classifier-free guidance scale. The accepted range is model-specific — read info.limits.min_guidance / max_guidance for your model from GET /api/v2/models. Several models pin it to a single value (AceStep_1_5_Turbo accepts only 1), so a value outside that range is rejected with 422.
Audio output format. Read info.limits.output_formats for your model from GET /api/v2/models and send one of the listed values; anything else is rejected with 422.
Optional reference audio file for style transfer. Supported formats: mp3, wav, flac, ogg, m4a. Max size configurable (default 10MB). Duration must be within model-specific limits.
Optional HTTPS URL to receive webhook notifications for job status changes (processing, completed, failed). Must be HTTPS. Max 2048 characters. A per-request URL is self-contained: it is delivered even when the account has no webhook configuration, or the account webhook is disabled. See the webhooks block at the top level of this document for the event payloads and the headers each delivery carries.
Optional per-request HMAC secret (min. 32 chars) used to sign the webhook callback. Overrides the account-default secret for this job only. If omitted, the account-default secret signs the callback; if no secret exists at all, the callback is still delivered but UNSIGNED (empty X-DeAPI-Signature header). Requires webhook_url to also be set.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"deAPI","colors":{"primary":"#FD9A00","light":"#FFAD33","dark":"#E58A00"},"logo":{"light":"https://mintcdn.com/deapi-f9ba3abb/gSOvhf4F2Dm8oAad/logo/deapi-light.svg?fit=max\u0026auto=format\u0026n=gSOvhf4F2Dm8oAad\u0026q=85\u0026s=e44c94d9c161aa9264f717cd49f375e5","dark":"https://mintcdn.com/deapi-f9ba3abb/gSOvhf4F2Dm8oAad/logo/deapi-dark.svg?fit=max\u0026auto=format\u0026n=gSOvhf4F2Dm8oAad\u0026q=85\u0026s=4f204c43a4a41d8f476b76d91ac5ee7c"},"favicon":"https://mintcdn.com/deapi-f9ba3abb/-BqpLinCKwOHWbhI/favicon.png?fit=max\u0026auto=format\u0026n=-BqpLinCKwOHWbhI\u0026q=85\u0026s=295488219f7cfd2b9a7007447e093121","api":{"openapi":["openapi.json","openapi-v2.json"]},"navbar":{"links":[{"href":"https://app.deapi.ai/dashboard","label":"Dashboard"},{"href":"https://status.deapi.ai/","label":"Status"},{"href":"https://github.com/deapi-ai","label":"GitHub"}],"primary":{"type":"button","label":"Get API Key","href":"https://app.deapi.ai/dashboard"}},"footer":{"socials":{"github":"https://github.com/deapi-ai","twitter":"https://x.com/deAPI_","discord":"https://discord.com/invite/UFfK5YRBsr","x":"https://x.com/deAPI_"}},"search":{"prompt":"Search deAPI docs..."},"seo":{"indexing":"all"},"contextual":{"options":["copy","view","chatgpt","claude","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"deapi-f9ba3abb","hasAudioNarration":false,"actualSubdomain":"deapi-f9ba3abb","customDomains":["docs.deapi.ai"],"gitSource":{"type":"github","owner":"deapi-ai","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad9fda4f7b413b0bdc2fd82","collectionId":"a0ac662e-4b69-4e6b-9f36-6f740d5d6d6e","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad9fda4f7b413b0bdc2fd82"},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6ad9fda4f7b413b0bdc2fd82","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"API v2 (Latest)","count":49},{"language":"default","tag":"API v1 (Deprecated)","count":42},{"language":"default","tag":"Guides","count":18},{"language":"default","tag":"Generation","count":14},{"language":"default","tag":"Analysis","count":12},{"language":"default","tag":"Videos","count":12},{"language":"default","tag":"Transformation","count":10},{"language":"default","tag":"Images","count":10},{"language":"default","tag":"Get started","count":8},{"language":"default","tag":"API Keys","count":8}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"editor-v7-file-tree","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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"editor-agent-model-picker","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":"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}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api/v2/audio/music","slug":"/api/v2/audio/music","pageMetadata":{"title":"Text-to-Music","openapi":"openapi-v2.json POST /api/v2/audio/music","description":"Generate music from a text prompt.","href":"/api/v2/audio/music"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Generate music from a text prompt.\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Heading,Note,Table,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Generate music tracks from text with control over lyrics, tempo, key, and style. Returns a `,_jsx(_components.code,{children:`request_id`}),` for status polling.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Prerequisite:`}),` Consult the `,_jsx(_components.a,{href:`/api/v2/utilities/models`,children:`Model Selection`}),` endpoint to identify a valid model `,_jsx(_components.code,{children:`slug`}),` and check its parameter limits. Model slugs look like `,_jsx(_components.code,{children:`AceStep_1_5_Turbo`}),` — always take them from the models endpoint rather than hard-coding a display name.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`field-values-worth-knowing`,children:`Field values worth knowing`}),`\n`,_jsx(_components.p,{children:`These constraints are enforced by validation and are easy to trip over:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Constraint`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`lyrics`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Required and must be non-empty`}),`, including for instrumental tracks. Omitting it or sending `,_jsx(_components.code,{children:`\"\"`}),` returns `,_jsx(_components.code,{children:`422 The lyrics field is required.`}),` For an instrumental track, send `,_jsx(_components.code,{children:`\"[Instrumental]\"`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`timesignature`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Integer only`}),`, and only `,_jsx(_components.code,{children:`2`}),`, `,_jsx(_components.code,{children:`3`}),`, `,_jsx(_components.code,{children:`4`}),` or `,_jsx(_components.code,{children:`6`}),` are accepted. A notation string such as `,_jsx(_components.code,{children:`\"4/4\"`}),` returns `,_jsx(_components.code,{children:`422 The timesignature field must be an integer.`}),` Map the numerator of an x/4 signature (4/4 → `,_jsx(_components.code,{children:`4`}),`, 3/4 → `,_jsx(_components.code,{children:`3`}),`, 2/4 → `,_jsx(_components.code,{children:`2`}),`, 6/8 → `,_jsx(_components.code,{children:`6`}),`); 5/4 and 7/8 cannot be expressed. Omit the field or send an empty value to let the model choose.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`format`})}),_jsxs(_components.td,{children:[`Use `,_jsx(_components.code,{children:`mp3`}),` — the only format the current models actually produce (`,_jsx(_components.code,{children:`info.limits.output_formats`}),`). `,_jsx(_components.code,{children:`wav`}),` and `,_jsx(_components.code,{children:`flac`}),` are rejected with `,_jsx(_components.code,{children:`422 This output format is not supported by this model. Available formats: mp3.`}),` An unrecognised value such as `,_jsx(_components.code,{children:`ogg`}),` returns `,_jsx(_components.code,{children:`422 The selected format is invalid.`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`keyscale`})}),_jsxs(_components.td,{children:[`Free-form string (`,_jsx(_components.code,{children:`\"C major\"`}),`, `,_jsx(_components.code,{children:`\"D minor\"`}),`, `,_jsx(_components.code,{children:`\"F# minor\"`}),`). Not validated against a fixed list — passed to the model as a hint.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`vocal_language`})}),_jsxs(_components.td,{children:[`Free-form string. Both ISO codes (`,_jsx(_components.code,{children:`\"en\"`}),`) and language names (`,_jsx(_components.code,{children:`\"English\"`}),`) are accepted. Not validated against a fixed list.`]})]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`timesignature`}),` is validated as an `,_jsx(_components.strong,{children:`integer`}),`, not as musical notation. If you populate it from a UI dropdown offering values like `,_jsx(_components.code,{children:`4/4`}),` or `,_jsx(_components.code,{children:`6/8`}),`, convert to the integer before sending — otherwise only the requests that set the field fail, while the rest keep succeeding.`]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Text-to-Music","openapi":"openapi-v2.json POST /api/v2/audio/music","description":"Generate music from a text prompt.","href":"/api/v2/audio/music"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Field values worth knowing","slug":"field-values-worth-knowing","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Client API v2"],"summary":"Generate music from a text prompt","description":"Generate music from a text prompt.","operationId":"generateMusic","parameters":["11867659-b320-4046-a338-84db32aa9c34"],"requestBody":"c4aae741-713b-4bfb-8dfd-c300f53ea634","responses":{"200":"1b1eb26d-edd3-420b-873d-c5fe4d61ff6e","401":"26a4f18d-972d-492d-b412-964b15ed30ea","403":"973eaf15-7260-493b-adee-f6adc648f936","404":"a6588a8e-9667-4fe4-8e97-619f11926056","422":"ed4693ff-bb49-49fc-a5b5-80a1f8a9989d","429":"ad37680f-7fee-4bd1-b2ee-897293f93630"},"security":["ef0d8acb-0acb-430a-a641-8412e32132e8"],"method":"post","type":"path","servers":["e0e49a8e-d368-42c9-8377-07c35e662b8c"],"path":"/api/v2/audio/music","baseUrlOptions":["https://api.deapi.ai"],"title":"Generate music from a text prompt","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"11867659-b320-4046-a338-84db32aa9c34":{"name":"Accept","in":"header","required":true,"schema":{"type":"string","default":"application/json","enum":["application/json"],"isRequired":true,"uniqueKey":"","typeLabel":"enum\u003cstring>"}}},"requestBody":{"description":"Music generation parameters","required":true,"content":{"multipart/form-data":{"schema":{"description":"Every example in this schema is a working set for the `model` example shown — they are not defaults and not portable. Sizes, step counts, frame counts and frame rates are all per-model: read `info.limits` and `info.defaults` for the model you actually intend to use from `GET /api/v2/models`. Substituting a different `model` while keeping these values is the most common source of a 422.","required":["caption","model","lyrics","duration","inference_steps","guidance_scale","seed","format"],"properties":{"caption":{"description":"Text description of the music to generate","type":"string","example":"upbeat electronic dance music with energetic synths","isRequired":true,"uniqueKey":"caption","typeLabel":"string"},"model":{"description":"The model to use for music generation. Available models can be retrieved via the GET /api/v2/models endpoint.","type":"string","example":"AceStep_1_5_Turbo","isRequired":true,"uniqueKey":"model","typeLabel":"string"},"lyrics":{"description":"Lyrics for the music. Use \"[Instrumental]\" for instrumental tracks without vocals.","type":"string","example":"[Instrumental]","isRequired":true,"uniqueKey":"lyrics","typeLabel":"string"},"duration":{"description":"Duration in seconds (10-600). The accepted range is model-specific — read `info.limits.min_duration`/`max_duration` for your `model` from `GET /api/v2/models`. Some models additionally cap duration per output format via `info.limits.max_duration_by_format`.","type":"number","example":30,"isRequired":true,"uniqueKey":"duration","typeLabel":"number"},"inference_steps":{"description":"Number of diffusion inference steps (1-100). Use 8 for turbo models, 32+ for base models. The accepted range is model-specific — read `info.limits.min_steps`/`max_steps` for your `model` from `GET /api/v2/models`; several models pin it to a single value.","type":"integer","example":8,"isRequired":true,"uniqueKey":"inference_steps","typeLabel":"integer"},"guidance_scale":{"description":"Classifier-free guidance scale. The accepted range is model-specific — read `info.limits.min_guidance` / `max_guidance` for your `model` from `GET /api/v2/models`. Several models pin it to a single value (AceStep_1_5_Turbo accepts only 1), so a value outside that range is rejected with 422.","type":"number","example":1,"isRequired":true,"uniqueKey":"guidance_scale","typeLabel":"number"},"seed":{"description":"Random seed. Use -1 for random.","type":"integer","example":-1,"isRequired":true,"uniqueKey":"seed","typeLabel":"integer"},"format":{"description":"Audio output format. Read `info.limits.output_formats` for your `model` from `GET /api/v2/models` and send one of the listed values; anything else is rejected with 422.","type":"string","example":"mp3","isRequired":true,"uniqueKey":"format","typeLabel":"string"},"bpm":{"oneOf":[{"description":"Beats per minute (30-300)","type":"integer","example":120,"uniqueKey":"bpm.oneOf.0","typeLabel":"integer"},{"description":"Beats per minute (30-300)","type":"null","example":120,"uniqueKey":"bpm.oneOf.1","typeLabel":"null"}],"uniqueKey":"bpm","typeLabel":"integer | null"},"keyscale":{"oneOf":[{"description":"Musical key/scale (e.g. \"C major\", \"F# minor\")","type":"string","example":"C major","uniqueKey":"keyscale.oneOf.0","typeLabel":"string"},{"description":"Musical key/scale (e.g. \"C major\", \"F# minor\")","type":"null","example":"C major","uniqueKey":"keyscale.oneOf.1","typeLabel":"null"}],"uniqueKey":"keyscale","typeLabel":"string | null"},"timesignature":{"oneOf":[{"description":"Time signature. Must be 2, 3, 4, or 6.","type":"integer","example":4,"uniqueKey":"timesignature.oneOf.0","typeLabel":"integer"},{"description":"Time signature. Must be 2, 3, 4, or 6.","type":"null","example":4,"uniqueKey":"timesignature.oneOf.1","typeLabel":"null"}],"uniqueKey":"timesignature","typeLabel":"integer | null"},"vocal_language":{"oneOf":[{"description":"Language code for vocals (e.g. \"en\", \"es\", \"fr\")","type":"string","example":"en","uniqueKey":"vocal_language.oneOf.0","typeLabel":"string"},{"description":"Language code for vocals (e.g. \"en\", \"es\", \"fr\")","type":"null","example":"en","uniqueKey":"vocal_language.oneOf.1","typeLabel":"null"}],"uniqueKey":"vocal_language","typeLabel":"string | null"},"reference_audio":{"oneOf":[{"description":"Optional reference audio file for style transfer. Supported formats: mp3, wav, flac, ogg, m4a. Max size configurable (default 10MB). Duration must be within model-specific limits.","type":"string","format":"binary","uniqueKey":"reference_audio.oneOf.0","typeLabel":"file"},{"description":"Optional reference audio file for style transfer. Supported formats: mp3, wav, flac, ogg, m4a. Max size configurable (default 10MB). Duration must be within model-specific limits.","type":"null","format":"binary","uniqueKey":"reference_audio.oneOf.1","typeLabel":"null"}],"uniqueKey":"reference_audio","typeLabel":"file | null"},"webhook_url":{"oneOf":[{"description":"Optional HTTPS URL to receive webhook notifications for job status changes (processing, completed, failed). Must be HTTPS. Max 2048 characters. A per-request URL is self-contained: it is delivered even when the account has no webhook configuration, or the account webhook is disabled. See the `webhooks` block at the top level of this document for the event payloads and the headers each delivery carries.","type":"string","format":"uri","example":"https://your-server.com/webhooks/deapi","maxLength":2048,"uniqueKey":"webhook_url.oneOf.0","typeLabel":"string\u003curi>"},{"description":"Optional HTTPS URL to receive webhook notifications for job status changes (processing, completed, failed). Must be HTTPS. Max 2048 characters. A per-request URL is self-contained: it is delivered even when the account has no webhook configuration, or the account webhook is disabled. See the `webhooks` block at the top level of this document for the event payloads and the headers each delivery carries.","type":"null","format":"uri","example":"https://your-server.com/webhooks/deapi","maxLength":2048,"uniqueKey":"webhook_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"webhook_url","typeLabel":"string\u003curi> | null"},"webhook_secret":{"oneOf":[{"description":"Optional per-request HMAC secret (min. 32 chars) used to sign the webhook callback. Overrides the account-default secret for this job only. If omitted, the account-default secret signs the callback; if no secret exists at all, the callback is still delivered but UNSIGNED (empty X-DeAPI-Signature header). Requires `webhook_url` to also be set.","type":"string","example":"a1b2c3d4e5f60708091a2b3c4d5e6f7081920a1b2c3d4e5f60708091a2b3c4d5","maxLength":255,"minLength":32,"uniqueKey":"webhook_secret.oneOf.0","typeLabel":"string"},{"description":"Optional per-request HMAC secret (min. 32 chars) used to sign the webhook callback. Overrides the account-default secret for this job only. If omitted, the account-default secret signs the callback; if no secret exists at all, the callback is still delivered but UNSIGNED (empty X-DeAPI-Signature header). Requires `webhook_url` to also be set.","type":"null","example":"a1b2c3d4e5f60708091a2b3c4d5e6f7081920a1b2c3d4e5f60708091a2b3c4d5","maxLength":255,"minLength":32,"uniqueKey":"webhook_secret.oneOf.1","typeLabel":"null"}],"uniqueKey":"webhook_secret","typeLabel":"string | null"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"caption":"upbeat electronic dance music with energetic synths","model":"AceStep_1_5_Turbo","lyrics":"[Instrumental]","duration":30,"inference_steps":8,"guidance_scale":1,"seed":-1,"format":"mp3","bpm":120,"keyscale":"C major","timesignature":4,"vocal_language":"en","reference_audio":"\u003cstring>","webhook_url":"https://your-server.com/webhooks/deapi","webhook_secret":"a1b2c3d4e5f60708091a2b3c4d5e6f7081920a1b2c3d4e5f60708091a2b3c4d5"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"1b1eb26d-edd3-420b-873d-c5fe4d61ff6e":{"description":"ID of the inference request.","headers":{"X-RateLimit-Policy":{"description":"Every window that applies, as `\u003climit>;w=\u003cseconds>` elements. Always present on a throttled response, so a single element means there is no daily limit — do not infer that from the absence of the Daily-* headers. `300;w=60` is minute-only; `3;w=60, 100;w=86400` is both.","schema":{"type":"string","example":"3;w=60, 100;w=86400"}},"X-RateLimit-Source":{"description":"Where the limit came from, so you know what would change it:\n`tier` — your account tier's rate for this endpoint;\n`fallback` — no rate configured for this tier and endpoint, degraded default in force;\n`model` — a per-model override for the model in the request, unaffected by your tier\n(only when the request carried a recognised `model`, otherwise the tier pool applies);\n`static` — a flat limit outside the tier system, identical for every account.\n\nIf you ever see `fallback`, tell us: it means no rate is configured for that tier and endpoint.","schema":{"type":"string","example":"tier","enum":["tier","fallback","model","static"]}},"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute (RPM)","schema":{"type":"integer","example":3}},"X-RateLimit-Remaining":{"description":"Remaining requests in current minute window","schema":{"type":"integer","example":2}},"X-RateLimit-Reset":{"description":"Epoch second at which the minute (RPM) window refills. Fixed window — the value does not drift as you spend the quota. Describes the same window as X-RateLimit-Limit, including on a daily rejection.","schema":{"type":"integer","example":1755800460}},"X-RateLimit-Daily-Limit":{"description":"Maximum requests allowed per day (RPD)","schema":{"type":"integer","example":100}},"X-RateLimit-Daily-Remaining":{"description":"Remaining requests in current day window","schema":{"type":"integer","example":95}},"X-RateLimit-Daily-Reset":{"description":"Epoch second at which the daily (RPD) window refills — 86400 s after the first request that opened this bucket's window, not a calendar midnight. Present only when a daily limit applies.","schema":{"type":"integer","example":1755846000}}},"content":{"application/json":{"schema":{"required":["data"],"properties":{"data":{"description":"Information from success endpoint","required":["request_id"],"properties":{"request_id":{"description":"UUID identifying the created inference request. Pass it to `GET /api/v2/jobs/{job_request}` to poll status and collect the result.","type":"string","format":"uuid","example":"c08a339c-73e5-4d67-a4d5-231302fbff9a","isRequired":true,"uniqueKey":"data.request_id","typeLabel":"string\u003cuuid>"}},"type":"object","isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":{"request_id":"c08a339c-73e5-4d67-a4d5-231302fbff9a"}}}},"exampleType":"generated"}},"exampleType":"generated"},"26a4f18d-972d-492d-b412-964b15ed30ea":{"description":"Unauthorized user.","content":{"application/json":{"schema":{"properties":{"data":{"description":"Information from success endpoint","type":"object","uniqueKey":"data","typeLabel":"object"},"message":{"description":"Error general message","type":"string","uniqueKey":"message","typeLabel":"string"},"errors":{"description":"Information about errors","type":"array","items":{"oneOf":[{}],"uniqueKey":"errors.items.[INDEX]","typeLabel":"any"},"uniqueKey":"errors","typeLabel":"any[]"},"statusCode":{"description":"Status code","type":"integer","uniqueKey":"statusCode","typeLabel":"integer"},"code":{"description":"A stable, machine-readable reason, on the responses that publish one. Refused credentials (401): `missing_key` — no Bearer credentials arrived at all; `invalid_key` — a key was presented but is unknown, carries the wrong secret, or is malformed; `key_expired` — past its expiry date; `key_revoked` — deactivated. Refused requests: `insufficient_permissions` (403), `ip_not_allowed` (403), `active_key_limit_reached` (422), `insufficient_balance` (422), `key_limit_exceeded` (402), `rate_limited` (429). Absent wherever a response publishes no code, so treat an unknown value as the status code alone — the list grows.","type":"string","enum":["missing_key","invalid_key","key_expired","key_revoked","insufficient_permissions","ip_not_allowed","active_key_limit_reached","insufficient_balance","key_limit_exceeded","rate_limited"],"uniqueKey":"code","typeLabel":"enum\u003cstring>"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":{},"message":"\u003cstring>","errors":["\u003cunknown>"],"statusCode":123,"code":"missing_key"}}},"exampleType":"generated"}},"exampleType":"generated"},"973eaf15-7260-493b-adee-f6adc648f936":{"description":"The account is suspended. Applies to every endpoint that spends credits — generation, transcription and prompt enhancement — and is returned before any validation runs, so a suspended account sees this rather than a 422 about the body. Price-estimate endpoints are not gated and keep working.","content":{"application/json":{"schema":{"properties":{"message":{"description":"Human-readable explanation. No `errors` object accompanies this response.","type":"string","example":"Client account is suspended. If you believe this is a mistake, contact us.","uniqueKey":"message","typeLabel":"string"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Client account is suspended. If you believe this is a mistake, contact us."}}},"exampleType":"generated"}},"exampleType":"generated"},"a6588a8e-9667-4fe4-8e97-619f11926056":{"description":"Model not found.","content":{"application/json":{"schema":{"properties":{"data":{"description":"Information from success endpoint","type":"object","uniqueKey":"data","typeLabel":"object"},"message":{"description":"Error general message","type":"string","uniqueKey":"message","typeLabel":"string"},"errors":{"description":"Information about errors","type":"array","items":{"oneOf":[{}],"uniqueKey":"errors.items.[INDEX]","typeLabel":"any"},"uniqueKey":"errors","typeLabel":"any[]"},"statusCode":{"description":"Status code","type":"integer","uniqueKey":"statusCode","typeLabel":"integer"},"code":{"description":"A stable, machine-readable reason, on the responses that publish one. Refused credentials (401): `missing_key` — no Bearer credentials arrived at all; `invalid_key` — a key was presented but is unknown, carries the wrong secret, or is malformed; `key_expired` — past its expiry date; `key_revoked` — deactivated. Refused requests: `insufficient_permissions` (403), `ip_not_allowed` (403), `active_key_limit_reached` (422), `insufficient_balance` (422), `key_limit_exceeded` (402), `rate_limited` (429). Absent wherever a response publishes no code, so treat an unknown value as the status code alone — the list grows.","type":"string","enum":["missing_key","invalid_key","key_expired","key_revoked","insufficient_permissions","ip_not_allowed","active_key_limit_reached","insufficient_balance","key_limit_exceeded","rate_limited"],"uniqueKey":"code","typeLabel":"enum\u003cstring>"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":{},"message":"\u003cstring>","errors":["\u003cunknown>"],"statusCode":123,"code":"missing_key"}}},"exampleType":"generated"}},"exampleType":"generated"},"ed4693ff-bb49-49fc-a5b5-80a1f8a9989d":{"description":"Validation failed. Common errors include: model does not exist, model does not support the inference type for this endpoint, the model is not available on your plan (it requires a higher tier than your account has — upgrade to use it), or invalid request parameters.","content":{"application/json":{"schema":{"properties":{"message":{"description":"General error message","type":"string","example":"The selected model does not support Text To Image.","uniqueKey":"message","typeLabel":"string"},"errors":{"description":"Detailed validation errors by field. A model your plan does not cover is reported on the \"model\" field with the message \"This model is not available on your plan. Please upgrade to access it.\" Such a model is also omitted from GET /models.","type":"object","example":{"model":["This model is not available on your plan. Please upgrade to access it."]},"uniqueKey":"errors","typeLabel":"object"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"The selected model does not support Text To Image.","errors":{"model":["This model is not available on your plan. Please upgrade to access it."]}}}},"exampleType":"generated"}},"exampleType":"generated"},"ad37680f-7fee-4bd1-b2ee-897293f93630":{"description":"Rate limit exceeded. Check X-RateLimit-Type header to determine if minute (RPM) or daily (RPD) limit was hit.","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute (RPM)","schema":{"type":"integer","example":3}},"X-RateLimit-Remaining":{"description":"Remaining requests in current minute window","schema":{"type":"integer","example":2}},"X-RateLimit-Daily-Limit":{"description":"Maximum requests allowed per day (RPD)","schema":{"type":"integer","example":100}},"X-RateLimit-Daily-Remaining":{"description":"Remaining requests in current day window","schema":{"type":"integer","example":95}},"X-RateLimit-Type":{"description":"Which limit rejected the request. Sent only on 429. Read it before anything else on the response: it decides what the other `X-RateLimit-*` headers are counting.\n\n`minute` — the per-request RPM window. `daily` — the per-request RPD window; the Daily-* pair is the one at 0.\n\n`key-creation` — the hourly cap on keys created over the API (`POST /api/v2/keys`), per account and shared by its ADMIN keys. The whole `X-RateLimit-*` set describes that bucket and there are no Daily-* headers.\n\n`ip-not-allowed` — too many calls from an address your key's IP whitelist refuses. Counted against that address, never against your account.","schema":{"type":"string","example":"minute","enum":["minute","daily","key-creation","ip-not-allowed"]}},"Retry-After":{"description":"Seconds until the window that rejected you frees up (60 for minute, up to 86400 for daily). Counted from when that window opened, not to a calendar boundary. Sent only on 429.","schema":{"type":"integer","example":60}},"X-RateLimit-Reset":{"description":"Epoch second at which the minute (RPM) window refills. Fixed window — the value does not drift as you spend the quota. Describes the same window as X-RateLimit-Limit, including on a daily rejection.","schema":{"type":"integer","example":1755800460}},"X-RateLimit-Daily-Reset":{"description":"Epoch second at which the daily (RPD) window refills — 86400 s after the first request that opened this bucket's window, not a calendar midnight. Present only when a daily limit applies.","schema":{"type":"integer","example":1755846000}},"X-RateLimit-Source":{"description":"Where the limit came from, so you know what would change it:\n`tier` — your account tier's rate for this endpoint;\n`fallback` — no rate configured for this tier and endpoint, degraded default in force;\n`model` — a per-model override for the model in the request, unaffected by your tier\n(only when the request carried a recognised `model`, otherwise the tier pool applies);\n`static` — a flat limit outside the tier system, identical for every account.\n\nIf you ever see `fallback`, tell us: it means no rate is configured for that tier and endpoint.","schema":{"type":"string","example":"tier","enum":["tier","fallback","model","static"]}},"X-RateLimit-Policy":{"description":"Every window that applies, as `\u003climit>;w=\u003cseconds>` elements. Always present on a throttled response, so a single element means there is no daily limit — do not infer that from the absence of the Daily-* headers. `300;w=60` is minute-only; `3;w=60, 100;w=86400` is both.","schema":{"type":"string","example":"3;w=60, 100;w=86400"}}},"content":{"application/json":{"schema":{"description":"Rate limit exceeded response","properties":{"message":{"description":"Error message","type":"string","example":"Too Many Attempts.","uniqueKey":"message","typeLabel":"string"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Too Many Attempts."}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"ef0d8acb-0acb-430a-a641-8412e32132e8":{"bearerAuth":{"type":"http","description":"Sanctum personal access token, sent as `Authorization: Bearer \u003ctoken>`. The token is opaque — it carries no claims and no embedded expiry, so do not attempt to decode it. Issue and revoke tokens from your account dashboard.","scheme":"bearer","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"e0e49a8e-d368-42c9-8377-07c35e662b8c":{"url":"https://api.deapi.ai","description":"Production API Server base URL"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","description":"Sanctum personal access token, sent as `Authorization: Bearer \u003ctoken>`. The token is opaque — it carries no claims and no embedded expiry, so do not attempt to decode it. Issue and revoke tokens from your account dashboard.","scheme":"bearer","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Sanctum personal access token, sent as `Authorization: Bearer \u003ctoken>`. The token is opaque — it carries no claims and no embedded expiry, so do not attempt to decode it. Issue and revoke tokens from your account dashboard.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi-v2.json"},"subdomain":"deapi-f9ba3abb","siteName":"deAPI","title":"Text-to-Music - deAPI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-09T08:36:32.852Z","originalFileLocation":"api/v2/audio/music.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=\"Generate music from a text prompt.\">\u003cmeta data-mint-head name=\"application-name\" content=\"deAPI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Text-to-Music - deAPI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Generate music from a text prompt.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"deAPI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.deapi.ai/api/v2/audio/music\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://deapi-f9ba3abb.mintlify.app/_mintlify/api/og/v2?division=Audio\u0026amp;title=Text-to-Music\u0026amp;description=Generate+music+from+a+text+prompt.\u0026amp;theme=4c928ee8ac6977ca60ea2061\u0026amp;signature=ba3dcdc9f4df45b251cd56c4b2fd85eeb5f2ab5ea4c2009a4f26b40da6f18665\">\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=\"Text-to-Music - deAPI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Generate music from a text prompt.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://deapi-f9ba3abb.mintlify.app/_mintlify/api/og/v2?division=Audio\u0026amp;title=Text-to-Music\u0026amp;description=Generate+music+from+a+text+prompt.\u0026amp;theme=4c928ee8ac6977ca60ea2061\u0026amp;signature=ba3dcdc9f4df45b251cd56c4b2fd85eeb5f2ab5ea4c2009a4f26b40da6f18665\">\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/deapi-f9ba3abb/33g1Y_LWZKSlqOOT/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"deAPI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FD9A00\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.deapi.ai/api/v2/audio/music\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api/v2/audio/music.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.deapi.ai/#organization\",\"name\":\"deAPI\",\"url\":\"https://docs.deapi.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/deapi-f9ba3abb/gSOvhf4F2Dm8oAad/logo/deapi-light.svg?fit=max\u0026auto=format\u0026n=gSOvhf4F2Dm8oAad\u0026q=85\u0026s=e44c94d9c161aa9264f717cd49f375e5\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.deapi.ai#website\",\"name\":\"deAPI\",\"url\":\"https://docs.deapi.ai\",\"publisher\":{\"@id\":\"https://docs.deapi.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.deapi.ai/api/v2/audio/music#webpage\",\"url\":\"https://docs.deapi.ai/api/v2/audio/music\",\"name\":\"Text-to-Music\",\"description\":\"Generate music from a text prompt.\",\"dateModified\":\"2026-09-09T08:36:32.852Z\",\"isPartOf\":{\"@id\":\"https://docs.deapi.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.deapi.ai/api/v2/audio/music#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.deapi.ai/api/v2/audio/music#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Audio\",\"item\":\"https://docs.deapi.ai/api/v2/audio/speech\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Text-to-Music\",\"item\":\"https://docs.deapi.ai/api/v2/audio/music\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.deapi.ai/api/v2/audio/music#apireference\",\"headline\":\"Text-to-Music\",\"name\":\"Text-to-Music\",\"description\":\"Generate music from a text prompt.\",\"url\":\"https://docs.deapi.ai/api/v2/audio/music\",\"mainEntityOfPage\":{\"@id\":\"https://docs.deapi.ai/api/v2/audio/music#webpage\"},\"dateModified\":\"2026-09-09T08:36:32.852Z\",\"publisher\":{\"@id\":\"https://docs.deapi.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.deapi.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"deAPI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"deAPI","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/introduction"}]},{"tab":"API v2 (Latest)","groups":[{"group":"Overview","pages":[{"title":"API Overview","href":"/api/v2/overview"},{"title":"Errors","href":"/api/v2/errors"}]},{"group":"Images","pages":[{"title":"Image Generation","openapi":"openapi-v2.json POST /api/v2/images/generations","href":"/api/v2/images/generations"},{"title":"Image Generation Price Calculation","openapi":"openapi-v2.json POST /api/v2/images/generations/price","href":"/api/v2/images/generations-price"},{"title":"Image Edit","openapi":"openapi-v2.json POST /api/v2/images/edits","href":"/api/v2/images/edits"},{"title":"Image Edit Price Calculation","openapi":"openapi-v2.json POST /api/v2/images/edits/price","href":"/api/v2/images/edits-price"},{"title":"Image OCR","openapi":"openapi-v2.json POST /api/v2/images/ocr","href":"/api/v2/images/ocr"},{"title":"Image OCR Price Calculation","openapi":"openapi-v2.json POST /api/v2/images/ocr/price","href":"/api/v2/images/ocr-price"},{"title":"Image Background Removal","openapi":"openapi-v2.json POST /api/v2/images/background-removals","href":"/api/v2/images/background-removals"},{"title":"Image Background Removal Price Calculation","openapi":"openapi-v2.json POST /api/v2/images/background-removals/price","href":"/api/v2/images/background-removals-price"},{"title":"Image Upscale","openapi":"openapi-v2.json POST /api/v2/images/upscales","href":"/api/v2/images/upscales"},{"title":"Image Upscale Price Calculation","openapi":"openapi-v2.json POST /api/v2/images/upscales/price","href":"/api/v2/images/upscales-price"}]},{"group":"Videos","pages":[{"title":"Video Generation","openapi":"openapi-v2.json POST /api/v2/videos/generations","href":"/api/v2/videos/generations"},{"title":"Video Generation Price Calculation","openapi":"openapi-v2.json POST /api/v2/videos/generations/price","href":"/api/v2/videos/generations-price"},{"title":"Video Animation (Image-to-Video)","openapi":"openapi-v2.json POST /api/v2/videos/animations","href":"/api/v2/videos/animations"},{"title":"Video Animation Price Calculation","openapi":"openapi-v2.json POST /api/v2/videos/animations/price","href":"/api/v2/videos/animations-price"},{"title":"Video Audio Sync (Audio-to-Video)","openapi":"openapi-v2.json POST /api/v2/videos/audio-syncs","href":"/api/v2/videos/audio-syncs"},{"title":"Video Audio Sync Price Calculation","openapi":"openapi-v2.json POST /api/v2/videos/audio-syncs/price","href":"/api/v2/videos/audio-syncs-price"},{"title":"Video Replacement","openapi":"openapi-v2.json POST /api/v2/videos/replacements","href":"/api/v2/videos/replacements"},{"title":"Video Replacement Price Calculation","openapi":"openapi-v2.json POST /api/v2/videos/replacements/price","href":"/api/v2/videos/replacements-price"},{"title":"Video Upscale","openapi":"openapi-v2.json POST /api/v2/videos/upscales","href":"/api/v2/videos/upscales"},{"title":"Video Upscale Price Calculation","openapi":"openapi-v2.json POST /api/v2/videos/upscales/price","href":"/api/v2/videos/upscales-price"},{"title":"Video Description","openapi":"openapi-v2.json POST /api/v2/videos/descriptions","href":"/api/v2/videos/descriptions"},{"title":"Video Description Price Calculation","openapi":"openapi-v2.json POST /api/v2/videos/descriptions/price","href":"/api/v2/videos/descriptions-price"}]},{"group":"Audio","pages":[{"title":"Text-to-Speech","openapi":"openapi-v2.json POST /api/v2/audio/speech","href":"/api/v2/audio/speech"},{"title":"Text-to-Speech Price Calculation","openapi":"openapi-v2.json POST /api/v2/audio/speech/price","description":"Estimate the price of a text-to-speech generation request. Either text or count_text must be provided.","href":"/api/v2/audio/speech-price"},{"title":"Text-to-Music","openapi":"openapi-v2.json POST /api/v2/audio/music","href":"/api/v2/audio/music"},{"title":"Text-to-Music Price Calculation","openapi":"openapi-v2.json POST /api/v2/audio/music/price","description":"Estimate the price of a text-to-music generation request. Requires duration and inference_steps parameters.","href":"/api/v2/audio/music-price"},{"title":"Audio/Video Transcription","openapi":"openapi-v2.json POST /api/v2/audio/transcriptions","href":"/api/v2/audio/transcriptions"},{"title":"Transcription Price Calculation","openapi":"openapi-v2.json POST /api/v2/audio/transcriptions/price","href":"/api/v2/audio/transcriptions-price"}]},{"group":"Embeddings","pages":[{"title":"Embeddings","openapi":"openapi-v2.json POST /api/v2/embeddings","href":"/api/v2/embeddings/embeddings"},{"title":"Embeddings Price Calculation","openapi":"openapi-v2.json POST /api/v2/embeddings/price","href":"/api/v2/embeddings/embeddings-price"}]},{"group":"Prompt Enhancement","pages":[{"title":"Prompt Enhancement - Overview","href":"/api/v2/prompt-enhancement/overview"},{"title":"Prompt Booster","openapi":"openapi-v2.json POST /api/v2/prompts/enhancements","href":"/api/v2/prompt-enhancement/prompt-booster"},{"title":"Prompt Booster Price","openapi":"openapi-v2.json POST /api/v2/prompts/enhancements/price","href":"/api/v2/prompt-enhancement/prompt-booster-price"}]},{"group":"Utilities","pages":[{"title":"Check Balance","openapi":"openapi-v2.json GET /api/v2/account/balance","href":"/api/v2/utilities/balance"},{"title":"Get Job Results","openapi":"openapi-v2.json GET /api/v2/jobs/{job_request}","href":"/api/v2/utilities/jobs"},{"title":"Model Selection","openapi":"openapi-v2.json GET /api/v2/models","href":"/api/v2/utilities/models"}]},{"group":"API Keys","pages":[{"title":"Get Current Key","openapi":"openapi-v2.json GET /api/v2/key","href":"/api/v2/keys/get-current-key"},{"title":"Get Current Key Usage","openapi":"openapi-v2.json GET /api/v2/key/usage","href":"/api/v2/keys/get-current-key-usage"},{"title":"List Keys","openapi":"openapi-v2.json GET /api/v2/keys","href":"/api/v2/keys/list-keys"},{"title":"Create Key","openapi":"openapi-v2.json POST /api/v2/keys","href":"/api/v2/keys/create-key"},{"title":"Get Key","openapi":"openapi-v2.json GET /api/v2/keys/{id}","href":"/api/v2/keys/get-key"},{"title":"Update Key","openapi":"openapi-v2.json PATCH /api/v2/keys/{id}","href":"/api/v2/keys/update-key"},{"title":"Delete Key","openapi":"openapi-v2.json DELETE /api/v2/keys/{id}","href":"/api/v2/keys/delete-key"},{"title":"Get Key Usage","openapi":"openapi-v2.json GET /api/v2/keys/{id}/usage","href":"/api/v2/keys/get-key-usage"}]},{"group":"Account","pages":[{"title":"Get Account Billing","openapi":"openapi-v2.json GET /api/v2/account","href":"/api/v2/account/get-account"},{"title":"Get Account Usage","openapi":"openapi-v2.json GET /api/v2/account/usage","href":"/api/v2/account/usage"},{"title":"List Payments","openapi":"openapi-v2.json GET /api/v2/account/payments","href":"/api/v2/account/payments"}]}]},{"tab":"API v1 (Deprecated)","pages":[{"title":"API v1 (Deprecated)","href":"/api/v1/overview"}]}]},"title":"Text-to-Music - deAPI","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Bbp7I60D.js","utils-C3RIvJha.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DqD-vLt8.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B31Loprg.js","snippetPresets-DKpk-b8t.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Cj65AhOR.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BXtn5gcC.js","shallow-RY2b03Cp.js","getApiPlaygroundDisplay-B0jeiPk3.js","CodeSnippet-CYgBjjwn.js","CodeSnippets-DOngDrYB.js","Page-n7I5XbKb.js","getPastedJson-DRQbJx-T.js","icon-CQiQCicY.js","MethodPill-BKTLdNtu.js","DuplicateIcon-B9jpAdat.js","createIcon-DCddRrXv.js","DynamicMarkdown-a8hUKrw6.js","SectionHeading-eECVV2eH.js","axios-vUo_bRtp.js","Markdown--GF7ZIpf.js","clsx-DZLdJUrt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-2LoAhjKH.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Zwc0ZncM.js"]}