{"openapi":"3.1.0","info":{"title":"Audiostack API","description":"Documentation for the Audiostack API - the infrastructure for audio","version":"v2","termsOfService":"https://audiostack.ai/en/legal/terms-of-service","contact":{"email":"support@audiostack.ai"}},"servers":[{"url":"https://v2.api.audio","description":"Production server"},{"url":"https://staging-v2.api.audio","description":"Staging server"}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"paths":{"/audioforms/":{"post":{"tags":["Audioform"],"summary":"Request to build an Audioform","description":"This endpoint validates the audioform and then starts building it in the background.\nIf the audioform is valid enough to warrant starting a background job, it will return a `202` status code with the `audioformID`.\nCall then the GET endpoint with the `audioformID` to get the result of the build.","operationId":"process_request__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostRequestSchema"}}},"required":true},"responses":{"202":{"description":"Accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSuccessResponse"}}}},"400":{"description":"Generally error message will be of this format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}}}}},"/audioforms/{audioformId}":{"get":{"tags":["Audioform"],"summary":"Return the result of an Audioform build","description":"This endpoint returns the audioform if it is ready, otherwise it returns a `202` in progress status code.","operationId":"process_result__audioform_id__get","parameters":[{"name":"audioformId","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Audioform Id"}},{"name":"version","in":"header","required":true,"schema":{"type":"string","enum":["3","2","1"],"title":"Version","description":"The version of the audioform to use in the returned audioforms. We recommend using latest version to take advantage of latest features.","example":"3"}}],"responses":{"200":{"description":"The message will be different depending on the status of the audioform build (success or failure)","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GetSuccessfulBuildResponse"},{"$ref":"#/components/schemas/GetFailedBuildResponse"}],"title":"Response 200 Process Result  Audioform Id  Get"}}}},"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAudioform202"}}},"description":"Accepted"},"400":{"description":"Generally error message will be of this format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}}}}},"/audioforms/batches":{"post":{"tags":["Audioform"],"summary":"BETA - Create a batch of audioforms","description":"**BETA**: THIS ENDPOINT IS EXPERIMENTAL AND SUBJECT TO CHANGE.\n\nAudioform batches enable the submission of up to 1000 audioforms in a single request. The whole batch is validated as a single\nunit to catch detectable errors. Once validated, the batch is then processed in parallel. The batch progress\ncan be tracked by via a single batch ID so the user does not need to track 1000s of individual audioform IDs.\n\nAccepts an array of batch `items` (name + audioform) to be processed in parallel as a batch.\n","operationId":"create_batch_batches_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostBatchRequestSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"202":{"description":"Batch accepted for processing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostBatchSuccessResponse"}}}},"422":{"description":"One or more Audioforms in the batch failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointErrorResponse"}}}}}}},"/audioforms/batches/{batchId}":{"get":{"tags":["Audioform"],"summary":"BETA - Get the current status of an audioform batch","description":"**BETA**: THIS ENDPOINT IS EXPERIMENTAL AND SUBJECT TO CHANGE.\n\nReturns the status of a batch of audioforms.\n","operationId":"get_batch_batches__batch_id__get","parameters":[{"name":"batchId","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Batch Id"}}],"responses":{"200":{"description":"Batch retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostBatchSuccessResponse"}}}},"404":{"description":"Batch not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/creator/brief":{"post":{"tags":["Brief"],"summary":"Submit a brief to drive AI-assisted ad creation","description":"Accepts a creative brief that defines a desired set out of output adverts with user-specified \ndegrees of AI support.\n","operationId":"postCreativeBrief","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CreateBriefFromBodyRequest"},{"$ref":"#/components/schemas/CreateBriefFromFileRequest"}]}}}},"responses":{"200":{"description":"Brief successfully processed to produce audioforms","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBriefResponse"}}}},"422":{"description":"Invalid request cannot be processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBriefUnprocessableEntityResponse"}}}}}}},"/creator/story":{"post":{"tags":["Story"],"summary":"BETA - Submit a story to drive AI-assisted creation of longform audio content","description":"**BETA**: THIS ENDPOINT IS EXPERIMENTAL AND SUBJECT TO CHANGE.\n\nSubmits a story creation job. Accepts a `story` object that defines a complex\naudio narrative (podcasts, audiobooks, news bulletins, and other longform content).\nThe response returns a `storyId`; use the GET `/creator/story/{storyId}` endpoint with this\nid to poll until the job completes.\n","operationId":"postStory","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStoryFromBodyRequest"}}}},"responses":{"200":{"description":"Story successfully queued for processing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStoryResponse"}}}},"422":{"description":"Invalid request cannot be processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStoryUnprocessableEntityResponse"}}}}}},"get":{"tags":["Story"],"summary":"BETA - Retrieve the status and results of a previously submitted story creation request","description":"**BETA**: THIS ENDPOINT IS EXPERIMENTAL AND SUBJECT TO CHANGE.\n\nUse this endpoint to check the current status and obtain results for a story creation job using its `storyId` from a previous request to POST /creator/story.\n","operationId":"getStory","parameters":[{"name":"storyId","in":"query","required":true,"schema":{"type":"string","format":"uuid"},"description":"The unique identifier of the story creation request to retrieve."}],"responses":{"200":{"description":"Story creation job has finished (success or failure). Always includes `storyId`; may include optional `storyResult` and `audioforms`. On failure, `message` details the problem.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetStoryResponse"}}}},"202":{"description":"Story creation request is still being processed. Response includes `storyId` and may include a `message`. Poll again with the same `storyId`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoryAcceptedResponse"}}}},"404":{"description":"Story creation request not found","content":{"application/json":{"schema":{"type":"object","description":"Response when the requested resource does not exist (404).","allOf":[{"$ref":"#/components/schemas/GetStoryResponse/allOf/0"},{"type":"object","properties":{"message":{"type":"string","description":"A message indicating that the resource was not found."}}}]}}}}}}},"/files/{fileId}":{"get":{"tags":["Files"],"summary":"Get File","operationId":"get_file_files__fileId__get","parameters":[{"name":"fileId","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileResponseV2"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Files"],"summary":"Patch File","operationId":"patch_file_files__fileId__patch","parameters":[{"name":"fileId","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"File Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchFilePayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileResponseV2"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Files"],"summary":"Delete File By Id","operationId":"delete_file_by_id_files__fileId__delete","parameters":[{"name":"fileId","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteFileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/files":{"post":{"tags":["Files"],"summary":"Upload File","operationId":"upload_file_files_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateUploadUrlPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUploadUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/files/copy":{"put":{"tags":["Files"],"summary":"Copy File to a new folder","operationId":"copy_file_files_copy_put","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopyFilePayload"}}}},"responses":{"200":{"description":"Successful Response.\nNote the response will contain a new fileId for the copied file.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileResponseV2"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/files/file-categories":{"get":{"tags":["Files"],"summary":"Get File Categories","operationId":"get_file_categories_files_file_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileCategoriesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/folders":{"post":{"tags":["Folders"],"summary":"Create Folder","operationId":"create_folder_folders_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFolderPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderResponseV2"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Folders"],"summary":"List Folder","operationId":"list_folder_folders_get","parameters":[{"name":"path","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The folder path to list; omit or leave empty to list the root folder","title":"Path"},"description":"The folder path to list; omit or leave empty to list the root folder"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","title":"Limit"},"description":"Maximum number of items to return (>= 0)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","title":"Offset"},"description":"Number of items to skip before returning results (>= 0)"},{"name":"$orderBy","in":"query","required":false,"schema":{"type":"string"},"description":"OData $orderBy expression. Comma-separated list of fields with optional 'asc'/'desc'.\nExample: 'updatedAt desc, fileName asc'\n\nAvailable fields (files): categoryId, createdAt, createdBy, deliverablesCount, fileId, fileName, fileTypeId, updatedAt, sessionsCount\n\nSpecial case for folders: unsupported file-based filters are ignored, and folder sorting is limited to: folderId, folderName, parentFolderId, createdBy, updatedAt, createdAt. Unknown fields are dropped.","examples":{"byTypeAsc":{"summary":"By file type","value":"fileTypeId asc"},"byCategoryAsc":{"summary":"By category","value":"categoryId asc"},"byUpdatedAtDesc":{"summary":"Recently modified first","value":"updatedAt desc"},"byCreatedAtAsc":{"summary":"Oldest created first","value":"createdAt asc"},"byNameAsc":{"summary":"Alphabetical by file name","value":"fileName asc"}}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_ListFolderResponseV2_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/folders/{folderId}":{"get":{"tags":["Folders"],"summary":"Get Folder By Id","operationId":"get_folder_by_id_folders__folderId__get","parameters":[{"name":"folderId","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","title":"Limit"},"description":"Maximum number of items to return (>= 0)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","title":"Offset"},"description":"Number of items to skip before returning results (>= 0)"},{"name":"$orderBy","in":"query","required":false,"schema":{"type":"string"},"description":"OData $orderBy expression. Comma-separated list of fields with optional 'asc'/'desc'.\nExample: 'updatedAt desc, fileName asc'\n\nAvailable fields (files): categoryId, createdAt, createdBy, deliverablesCount, fileId, fileName, fileTypeId, updatedAt, sessionsCount\n\nSpecial case for folders: unsupported file-based filters are ignored, and folder sorting is limited to: folderId, folderName, parentFolderId, createdBy, updatedAt, createdAt. Unknown fields are dropped.","examples":{"byTypeAsc":{"summary":"By file type","value":"fileTypeId asc"},"byCategoryAsc":{"summary":"By category","value":"categoryId asc"},"byUpdatedAtDesc":{"summary":"Recently modified first","value":"updatedAt desc"},"byCreatedAtAsc":{"summary":"Oldest created first","value":"createdAt asc"},"byNameAsc":{"summary":"Alphabetical by file name","value":"fileName asc"}}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_ListFolderResponseV2_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Folders"],"summary":"Delete Folder","operationId":"delete_folder_folders__folderId__delete","parameters":[{"name":"folderId","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response Delete Folder Folders  Folder Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Folders"],"summary":"Modify Folder","operationId":"modify_folder_folders__folderId__patch","parameters":[{"name":"folderId","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModifyFolderPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderResponseV2"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/folders/{folderId}/files":{"get":{"tags":["Folders"],"summary":"List Files In Folder","operationId":"list_files_in_folder_folders__folderId__files_get","parameters":[{"name":"folderId","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","title":"Limit"},"description":"Maximum number of items to return (>= 0)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","title":"Offset"},"description":"Number of items to skip before returning results (>= 0)"},{"name":"$orderBy","in":"query","required":false,"schema":{"type":"string"},"description":"OData $orderBy expression.\nComma-separated list of fields with optional 'asc'/'desc'.\nExample: 'updatedAt desc, sessionName asc'\n\nAvailable fields:\naccessControl, categoryId, createdAt, createdBy, fileId, fileName, fileTypeId, updatedAt, updatedBy\n","examples":{"byTypeAsc":{"summary":"By file type","value":"fileTypeId asc"},"byCategoryAsc":{"summary":"By category","value":"categoryId asc"},"byUpdatedAtDesc":{"summary":"Recently modified first","value":"updatedAt desc"},"byCreatedAtAsc":{"summary":"Oldest created first","value":"createdAt asc"},"byNameAsc":{"summary":"Alphabetical by file name","value":"fileName asc"}}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_list_FileResponseV2__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analytics/usage":{"get":{"tags":["Analytics"],"summary":"Get usage in a date range","description":"Returns usage information between the specified start and end dates inclusive. \nUsage metrics are:\n\n  - Total number of audioforms created\n  - Total seconds of production audio created\n\n  Both dates must be valid and not in the future. The end date must be equal to or after the start date.\n","operationId":"getAnalyticsUsage","parameters":[{"name":"dateFrom","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date for the usage report (YYYY-MM-DD). Must not be in the future.","example":"2026-01-25"}},{"name":"dateTo","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date for the usage report (YYYY-MM-DD). Must be equal to or after dateFrom. Must not be in the future.","example":"2026-01-26"}}],"responses":{"200":{"description":"Events usage report generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsUsageResponse"}}}},"422":{"description":"Validation error - invalid date, date in future, or date_to must be after date_from","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsValidationError"}}}}}}},"/assets/voices/query":{"post":{"tags":["Assets - Voices"],"summary":"Search AudioStack's voice library for the right voice(s) for your audio.","description":"Enables you to search AudioStack's voice library from the API in a similar way to how you\nwould on the front end.\n\nYou can provide a search string e.g. \"serious\"\n\nYou can defined a complex filter to narrow down the results e.g. \n\nFind all matches for:\n  * female voices only\n  * english language only\n  * american, irish and australian accents only\n","operationId":"postVoicesQuery","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostVoicesQueryRequest"}}}},"responses":{"200":{"description":"Voices successfully queried","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostVoicesQueryResponse"}}}},"422":{"description":"Invalid request cannot be processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostQueryUnprocessableEntityResponse"}}}}}}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key"},"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"EndpointErrorResponse":{"properties":{"metadata":{"$ref":"#/components/schemas/ResponseMetadata"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","default":[]},"message":{"type":"string","title":"Message"},"errors":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"items":{"type":"string"},"type":"array"}],"title":"Errors","default":[]}},"type":"object","required":["metadata","message"],"title":"EndpointErrorResponse","description":"All endpoints should return this model in case of an error response\nwith a status code of `4xx` or `5xx`\nException for `422` that will give validation details instead of the `errors` field\n\nInherits ```EndpointResponseBase``` members ```metadata```, ```warnings```, ```message```"},"GetAudioform202":{"properties":{"message":{"type":"string","title":"Message"},"audioformId":{"type":"string","format":"uuid","title":"Audioformid"}},"type":"object","required":["message","audioformId"],"title":"GetAudioform202"},"GetFailedBuildResponse":{"properties":{"metadata":{"$ref":"#/components/schemas/ResponseMetadata"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","default":[]},"message":{"type":"string","title":"Message"},"data":{"$ref":"#/components/schemas/GetFailedBuildResponseData"}},"type":"object","required":["metadata","message","data"],"title":"GetFailedBuildResponse","description":"This is returned when a build was failed (endpoint status code is `200`)\n\nInherits ```EndpointResponseBase``` members ```metadata```, ```warnings```, ```message```"},"GetFailedBuildResponseData":{"properties":{"statusCode":{"type":"integer","title":"Statuscode"},"audioform":{"anyOf":[{"$ref":"#/components/schemas/Audioform3/properties/AudioformInput"},{"$ref":"#/components/schemas/Audioform2/properties/AudioformInput"},{"$ref":"#/components/schemas/Audioform1/properties/AudioformInput"}],"title":"Audioform"},"message":{"type":"string","title":"Message"}},"type":"object","required":["statusCode","audioform","message"],"title":"GetFailedBuildResponseData"},"GetSuccessfulBuildResponse":{"properties":{"metadata":{"$ref":"#/components/schemas/ResponseMetadata"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","default":[]},"message":{"type":"string","title":"Message"},"data":{"$ref":"#/components/schemas/GetSuccessfulBuildResponseData"}},"type":"object","required":["metadata","message","data"],"title":"GetSuccessfulBuildResponse","description":"This is returned when a build was successful (endpoint status code is `200`)\n\nInherits ```EndpointResponseBase``` members ```metadata```, ```warnings```, ```message```"},"GetSuccessfulBuildResponseData":{"properties":{"statusCode":{"type":"integer","title":"Statuscode"},"audioform":{"anyOf":[{"$ref":"#/components/schemas/Audioform3/properties/AudioformInput"},{"$ref":"#/components/schemas/Audioform2/properties/AudioformInput"},{"$ref":"#/components/schemas/Audioform1/properties/AudioformInput"}],"title":"Audioform"},"result":{"anyOf":[{"$ref":"#/components/schemas/AudioformResult3/properties/AudioformResult"},{"$ref":"#/components/schemas/AudioformResult2/properties/AudioformResult"},{"$ref":"#/components/schemas/AudioformResult1/properties/AudioformResult"}],"title":"Result"}},"type":"object","required":["statusCode","audioform","result"],"title":"GetSuccessfulBuildResponseData"},"PostRequestSchema":{"properties":{"audioform":{"anyOf":[{"$ref":"#/components/schemas/Audioform3/properties/AudioformInput"},{"$ref":"#/components/schemas/Audioform2/properties/AudioformInput"},{"$ref":"#/components/schemas/Audioform1/properties/AudioformInput"}],"title":"Audioform"}},"type":"object","required":["audioform"],"title":"PostRequestSchema"},"PostSuccessResponse":{"properties":{"metadata":{"$ref":"#/components/schemas/ResponseMetadata"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","default":[]},"message":{"type":"string","title":"Message"},"data":{"$ref":"#/components/schemas/PostSuccessResponseData"}},"type":"object","required":["metadata","message","data"],"title":"PostSuccessResponse","description":"Success `POST` response\n\nInherits ```EndpointResponseBase``` members ```metadata```, ```warnings```, ```message```"},"PostSuccessResponseData":{"properties":{"audioformId":{"type":"string","format":"uuid","title":"Audioformid"}},"type":"object","required":["audioformId"],"title":"PostSuccessResponseData"},"ResponseMetadata":{"properties":{"requestId":{"type":"string","title":"Requestid"},"version":{"type":"string"},"creditUsed":{"type":"number","title":"Creditused"},"creditsRemaining":{"type":"number","title":"Creditsremaining"}},"type":"object","required":["requestId"],"title":"ResponseMetadata"},"ValidationErrorResponse":{"properties":{"metadata":{"$ref":"#/components/schemas/ResponseMetadata"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"message":{"type":"string","title":"Message"},"details":{"title":"Details"}},"type":"object","required":["metadata","message","details"],"title":"ValidationErrorResponse","description":"Specific error response for validation errors (`422`)"},"Audioform1":{"x-targetDurationLimitsDescription":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n","x-targetDuration":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n","type":"object","properties":{"Alignment":{"type":"string","enum":["start","end","middle"],"title":"Alignment"},"ArrangementInput":{"properties":{"sections":{"items":{"$ref":"#/components/schemas/Audioform1/properties/SectionInput"},"type":"array","title":"Sections"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"Optional. If specified the arrangement (e.g. the audioform) will have that exact duration.\n\n- If the content is smaller there will be silence at the end.\n\n- If the content is longer, it will be clipped (the fade-out will still be applied at the end).\n    \n- If not set, then the duration is the sum of the duration of all the sections  (e.g. the arrangement adapts to the duration of its content)\n"},"fadeIn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-in","description":"Expressed in seconds, optional and defaults to 0. \nThe fade-in is the duration of the fade-in effect at the beginning of the audioform.\n"},"fadeOut":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-out","description":"Expressed in seconds, optional and defaults to 0. \nThe fade-out is the duration of the fade-out effect at the end of the audioform.\n"},"usePlaybackGainHints":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"use playback gain hints","description":"Optional and defaults to false. When enabled (`true`), all assets (excepted Voice) will get a new property in the result called `playbackGainHint`. \n\nThis is a `dB` (decibel) value on the asset that helps the browser to locally rebuild the audioform from the asset. \n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip gain to get the correct playback gain if the asset is played in a clip.\n"}},"type":"object","required":["sections"],"title":"Arrangement"},"AudioformInput":{"properties":{"header":{"$ref":"#/components/schemas/Audioform1/properties/Header"},"assets":{"additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/Audioform1/properties/TTS"},{"$ref":"#/components/schemas/Audioform1/properties/STS"},{"$ref":"#/components/schemas/Audioform1/properties/Media"},{"$ref":"#/components/schemas/Audioform1/properties/Voice"},{"$ref":"#/components/schemas/Audioform1/properties/SoundTemplate"},{"$ref":"#/components/schemas/Audioform1/properties/SoundTemplateSnippet"},{"$ref":"#/components/schemas/Audioform1/properties/SoundEffect"}]},"type":"object","title":"Assets"},"production":{"$ref":"#/components/schemas/Audioform1/properties/ProductionInput"},"delivery":{"$ref":"#/components/schemas/Audioform1/properties/Delivery"}},"type":"object","required":["header","assets","production","delivery"],"title":"Audioform v1"},"Clip":{"properties":{"assetRef":{"type":"string","title":"Asset reference","description":"The asset reference (within the audioform) of the asset to be used in the clip.\n"},"readPosition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Read position in seconds","description":"[optional, defaults to `0s` ]: position in the source asset where the clip starts\n"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"[optional]: if not set, the clip assume the duration necessary to encompass exactly the asset (minus read position). \nIf set, it will have the specified duration (in seconds). \nIf the asset is shorter there will be silence at the end. If the asset is longer the asset will be clipped.\n"},"marginStart":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin start in seconds","description":"[optional, defaults to `0s`]: a silence before the clip. \n"},"marginEnd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin end in seconds","description":"[optional, defaults to `0s`]: a silence after the clip. \n"},"fadeIn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-in in seconds","description":"[optional, defaults to `0`]: ramp up duration of the volume of the clip at the beginning of the clip.\n"},"fadeOut":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-out in seconds","description":"[optional, defaults to `0`]: ramp down duration of the volume of the clip at the end of the clip.\n"},"gain":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gain in dB","description":"[optional, defaults to `0 dB`]: a relative gain in `dB` to what the mastering engine would normally compute to make the clip louder or quieter.\n"},"blendBase":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blendbase","default":false},"blendElement":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blendelement","default":false}},"type":"object","required":["assetRef"],"title":"Clip","description":"The clips are placed within a layer contiguously. They have a margin property that allow them to be spaced and not strictly contiguous.\n\nThey can also have a fade in and fade out, so that the volume ramps up at the beginning and ramps down at the end. Note that fades don’t change the duration.\n\nA clip can contain any of the time assets.\n\nSeveral clips can refer to the same asset. See the clip as putting a part (or all) of an asset on the timeline. If the user wants to cut a sound in two for example, it would create two clips. \n"},"Delivery":{"properties":{"loudnessPreset":{"$ref":"#/components/schemas/Audioform1/properties/LoudnessPreset"},"encoderPreset":{"$ref":"#/components/schemas/Audioform1/properties/EncoderPreset"},"public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Public","description":"Should the delivery audiofile be publicly available or private."}},"type":"object","required":["loudnessPreset","encoderPreset"],"title":"Delivery"},"EncoderPreset":{"type":"string","enum":["mp3","wav","wav320","ogg","flac","mp3VeryLow","mp3Low","mp3Medium","mp3High","mp3VeryHigh","mp3Alexa","mp3Alexa48br","m4a"],"title":"EncoderPreset","description":"The encoder preset to be used for the delivery.\n"},"Header":{"properties":{"version":{"type":"string","const":"1","title":"Version"}},"type":"object","required":["version"],"title":"Header"},"Layer":{"properties":{"clips":{"items":{"$ref":"#/components/schemas/Audioform1/properties/Clip"},"type":"array","title":"Clips","description":"The clips are placed within a layer contiguously. They have a margin property that allow them to be spaced and not strictly contiguous.\n\nThey can also have a fade in and fade out, so that the volume ramps up at the beginning and ramps down at the end. Note that fades don’t change the duration.\n\nA clip can contain any of the time assets.\n\nSeveral clips can refer to the same asset. See the clip as putting a part (or all) of an asset on the timeline. If the user wants to cut a sound in two for example, it would create two clips. \n"},"alignment":{"anyOf":[{"$ref":"#/components/schemas/Audioform1/properties/Alignment"},{"type":"null"}],"description":"The alignment is within the containing section space created between the section paddingStart and paddingEnd. \n\nThe values can be `start`, `end` or `middle`.\n\nNote that if the section duration is free (e.g. there no forcedDuration) then the alignment is equivalent to aligning relative to the longest layer (because the section adapts to the longest layer).\n\nA layer _always_ has the length of its content (e.g. the clips).\n"}},"type":"object","required":["clips"],"title":"Layer"},"LoudnessPreset":{"type":"string","enum":["spotify","streaming","radio","radioAdvertising","podcast","applePodcast","youtube","lowVol","podcastDynamic"],"title":"Loudness preset","description":"How loud should it be in term of LUFS and compression.\n\nNote that \"radio\" and \"radioAdvertising\" are very loud and not recommended.\n"},"Media":{"properties":{"type":{"type":"string","const":"media","title":"Type"},"mediaId":{"type":"string","title":"Media UUID","description":"The mediaId is UUID of the form `12345678-baad-baad-baadbaadbaad`.\n\nIt corresponds to a custom media stored in your [private library](https://docs.audiostack.ai/docs/libraries).\n"}},"type":"object","required":["type","mediaId"],"title":"Media"},"ProductionInput":{"properties":{"arrangement":{"$ref":"#/components/schemas/Audioform1/properties/ArrangementInput"},"masteringPreset":{"type":"string","enum":["balanced","voiceenhanced","musicenhanced"],"title":"Mastering preset","description":"The mastering preset to be used for the production.\n\nThe values can be `balanced`, `voiceenhanced` or `musicenhanced`, which will apply the corresponding mastering preset to the production.\n\nRefer to the general documentation for more details on the mastering presets.\n"}},"type":"object","required":["arrangement","masteringPreset"],"title":"Production"},"SectionInput":{"properties":{"layers":{"items":{"$ref":"#/components/schemas/Audioform1/properties/Layer"},"type":"array","title":"Layers","description":"The layers containst clips. All the layers play _together_, mixing their content to create the final audioform.\n"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"[optional] \n- if specified the section will have that exact duration. \n  If the one of the layer is smaller there will be silence at the end. If a layer is longer it will be clipped, at the begining, the end or each side depending on the alignement (see layers).\n  Behaviour is not defined if `forcedDuration < paddingStart + paddingEnd`\n- If not set, then the duration is size of the longest layer, plus the padding.\n"},"paddingStart":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Padding start in seconds","description":"[optional] : defaults to `0 seconds`. This is marging before the layers, e.g. the layers will start after the padding. The sound template (if set) will play during that time.\n"},"paddingEnd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Padding end in seconds","description":"[optional] : defaults to `0 seconds`. This is the margin after the end of the longest layer. The sound template (if set) will play during that time. Note that if `forcedDuration` is set, the layers will be clipped but `paddingEnd` time will be preserved. \n"},"soundTemplateRef":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sound template asset reference within the audioform","description":"[optional] - if specified, the asset reference of the sound template to play as background audio for the section. \n\nThe sound template adapts to the section duration.\n"},"smartFit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Smart-fit feature enabled","description":"[optional] defaults to false.  If set to true the sound template will be edited so that it combines the begin and the end of the file in a smart way so ending of the audio always sound great and natural.\n"}},"type":"object","required":["layers"],"title":"Section"},"SoundEffect":{"properties":{"type":{"type":"string","const":"soundEffect","title":"Type"},"soundEffectAlias":{"type":"string","title":"Sound effect alias","description":"The alias of the sound effect (unique to the sound effect). Corresponds to a sound effect in our sound effect library.\nLearn more about sound effects in the documentation.\n"}},"type":"object","required":["type","soundEffectAlias"],"title":"Sound Effect"},"SoundTemplate":{"properties":{"type":{"type":"string","const":"soundTemplate","title":"Type"},"soundTemplateAlias":{"type":"string","title":"Sound template alias","description":"The alias of the sound template (unique to the sound template). Corresponds to a sound template in our sound template library or in your private library.\nLearn more about sound templates in the documentation.\n"},"segment":{"type":"string","title":"Segment","description":"The segment of the sound template to play.\nGenerally, most sound templates have only one segment called \"main\". You can get information about a specific sound tempalte via the sound template API. Refer to the documentation for more details.\n"}},"type":"object","required":["type","soundTemplateAlias","segment"],"title":"SoundTemplate","description":"Corresponds to a [sound template](https://docs.audiostack.ai/docs/sound-template-library) (either in our sound template library or uploaded by our clients and private to them).\n\nA sound template cannot be put in a clip as they don't have an inherent duration. Use a _sound template snippet_ for this.\n"},"SoundTemplateSnippet":{"properties":{"type":{"type":"string","const":"soundTemplateSnippet","title":"Type"},"soundTemplateRef":{"type":"string","title":"Sound template asset reference within the audioform","description":"The asset reference to the sound template to be used in the snippet.\n"},"targetReadPosition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target read position in seconds","description":"optional, and `0 second` if not specifed. Where do we start reading in the sound template."},"targetDuration":{"type":"number","title":"Target duration in seconds","description":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n"},"smartFit":{"type":"boolean","title":"Smart fit","description":"[optional] defaults to `false`. If set to `true` the snippet is following the smart fit feature. Refer to the sound template asset for more details.\n\nIf `smartFit` is true, `targetReadPosition` must be `0` (or not specified).\n"}},"type":"object","required":["type","soundTemplateRef","targetDuration"],"title":"Sound Template Snippet","description":"Create an audio file of a given duration from a sound template, that can be used in a Clip."},"STS":{"properties":{"type":{"type":"string","const":"sts","title":"Type"},"mediaRef":{"type":"string","title":"Media asset reference within the audioform","description":"The asset reference to the media file that contains the recording of the source speech\n"},"voiceRef":{"type":"string","title":"Voice asset reference within the audioform","description":"the asset reference of the Voice with which to generate the asset.\n"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds","description":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n"}},"type":"object","required":["type","mediaRef","voiceRef"],"title":"STS","description":"A STS (Speech to speech) uses a Media and a Voice to generate an audio file.\n"},"TTS":{"properties":{"type":{"type":"string","const":"tts","title":"Type"},"text":{"type":"string","title":"Text","description":"The text to be spoken.\n"},"voiceRef":{"type":"string","title":"Voice asset reference","description":"The asset reference (within the audioform) of the Voice with which to generate the asset.\n"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds","description":"[optional] Asks the system to match the asset to a certain time. It will ask the voice provider to speed up the voice if supported, otherwise it will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.          \n"},"targetDurationSpeedUpLimit":{"type":"number","title":"Target duration speed-up limit","default":1.2,"description":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n"},"targetDurationSlowDownLimit":{"type":"number","title":"Target duration slow-down limit","default":1.2,"description":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n"}},"type":"object","required":["type","text","voiceRef"],"title":"TTS"},"Voice":{"properties":{"type":{"type":"string","const":"voice","title":"Type"},"voiceAlias":{"type":"string","title":"Voice alias","description":"The alias of the voice (unique to the voice). Corresponds to a voice in our voice library.\nLearn more about voices in the [documentation](https://docs.audiostack.ai/docs/voice-library-1).\nNote that all voices are not suitable for STS, all voices are suitable for TTS. \n"},"speed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Speed","default":1,"description":"[optional], defaults to `1`. Adjust the speed of the voice from `0.8` to `1.2`. \n"},"voicePreset":{"$ref":"#/components/schemas/Audioform1/properties/VoicePreset","default":"standard"}},"type":"object","required":["type","voiceAlias"],"title":"Voice","description":"A voice asset references one of the voices from our catalogue. \n\nSee [AudioStack Voices & Text-to-Speech](https://docs.audiostack.ai/docs/voice-library-1) for more details.\n\nNote that all voices are not suitable for STS, all voices are suitable for TTS. \n"},"VoicePreset":{"type":"string","enum":["standard","expressive"],"title":"VoicePreset"}},"title":"Audioform1 Schemas"},"Audioform2":{"x-targetDurationLimitsDescription":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n","x-targetDuration":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n","type":"object","properties":{"Alignment":{"type":"string","enum":["start","end","middle"],"title":"Alignment"},"ArrangementInput":{"properties":{"sections":{"items":{"$ref":"#/components/schemas/Audioform2/properties/SectionInput"},"type":"array","title":"Sections"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"Optional. If specified the arrangement (e.g. the audioform) will have that exact duration.\n\n- If the content is smaller there will be silence at the end.\n\n- If the content is longer, it will be clipped (the fade-out will still be applied at the end).\n    \n- If not set, then the duration is the sum of the duration of all the sections  (e.g. the arrangement adapts to the duration of its content)\n"},"fadeIn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-in","description":"Expressed in seconds, optional and defaults to 0. \nThe fade-in is the duration of the fade-in effect at the beginning of the audioform.\n"},"fadeOut":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-out","description":"Expressed in seconds, optional and defaults to 0. \nThe fade-out is the duration of the fade-out effect at the end of the audioform.\n"},"usePlaybackGainHints":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"use playback gain hints","description":"Optional and defaults to false. When enabled (`true`), all assets (excepted Voice) will get a new property in the result called `playbackGainHint`. \n\nThis is a `dB` (decibel) value on the asset that helps the browser to locally rebuild the audioform from the asset. \n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip gain to get the correct playback gain if the asset is played in a clip.\n"}},"type":"object","required":["sections"],"title":"Arrangement"},"AudioformInput":{"properties":{"header":{"$ref":"#/components/schemas/Audioform2/properties/Header"},"assets":{"additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/Audioform2/properties/TTS"},{"$ref":"#/components/schemas/Audioform2/properties/STS"},{"$ref":"#/components/schemas/Audioform2/properties/Media"},{"$ref":"#/components/schemas/Audioform2/properties/Voice"},{"$ref":"#/components/schemas/Audioform2/properties/SoundTemplate"},{"$ref":"#/components/schemas/Audioform2/properties/SoundTemplateSnippet"},{"$ref":"#/components/schemas/Audioform2/properties/SoundEffect"}]},"type":"object","title":"Assets"},"production":{"$ref":"#/components/schemas/Audioform2/properties/ProductionInput"},"delivery":{"$ref":"#/components/schemas/Audioform2/properties/Delivery"}},"type":"object","required":["header","assets","production","delivery"],"title":"Audioform v2"},"Clip":{"properties":{"assetRef":{"type":"string","title":"Asset reference","description":"The asset reference (within the audioform) of the asset to be used in the clip.\n"},"readPosition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Read position in seconds","description":"[optional, defaults to `0s` ]: position in the source asset where the clip starts\n"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"[optional]: if not set, the clip assume the duration necessary to encompass exactly the asset (minus read position). \nIf set, it will have the specified duration (in seconds). \nIf the asset is shorter there will be silence at the end. If the asset is longer the asset will be clipped.\n"},"marginStart":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin start in seconds","description":"[optional, defaults to `0s`]: a silence before the clip. \n"},"marginEnd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin end in seconds","description":"[optional, defaults to `0s`]: a silence after the clip. \n"},"fadeIn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-in in seconds","description":"[optional, defaults to `0`]: ramp up duration of the volume of the clip at the beginning of the clip.\n"},"fadeOut":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-out in seconds","description":"[optional, defaults to `0`]: ramp down duration of the volume of the clip at the end of the clip.\n"},"gain":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gain in dB","description":"[optional, defaults to `0 dB`]: a relative gain in `dB` to what the mastering engine would normally compute to make the clip louder or quieter.\n"},"blendBase":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blendbase","default":false},"blendElement":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blendelement","default":false}},"type":"object","required":["assetRef"],"title":"Clip","description":"The clips are placed within a layer contiguously. They have a margin property that allow them to be spaced and not strictly contiguous.\n\nThey can also have a fade in and fade out, so that the volume ramps up at the beginning and ramps down at the end. Note that fades don't change the duration.\n\nA clip can contain any of the time assets.\n\nSeveral clips can refer to the same asset. See the clip as putting a part (or all) of an asset on the timeline. If the user wants to cut a sound in two for example, it would create two clips.\n"},"Delivery":{"properties":{"loudnessPreset":{"$ref":"#/components/schemas/Audioform2/properties/LoudnessPreset"},"encoderPreset":{"$ref":"#/components/schemas/Audioform2/properties/EncoderPreset"},"public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Public","description":"Should the delivery audiofile be publicly available or private."}},"type":"object","required":["loudnessPreset","encoderPreset"],"title":"Delivery"},"EncoderPreset":{"type":"string","enum":["mp3","wav","wav320","ogg","flac","mp3VeryLow","mp3Low","mp3Medium","mp3High","mp3VeryHigh","mp3Alexa","mp3Alexa48br","m4a"],"title":"EncoderPreset","description":"The encoder preset to be used for the delivery.\n"},"Header":{"properties":{"version":{"type":"string","const":"2","title":"Version"}},"type":"object","required":["version"],"title":"Header"},"Layer":{"properties":{"clips":{"items":{"$ref":"#/components/schemas/Audioform2/properties/Clip"},"type":"array","title":"Clips","description":"The clips are placed within a layer contiguously. They have a margin property that allow them to be spaced and not strictly contiguous.\n\nThey can also have a fade in and fade out, so that the volume ramps up at the beginning and ramps down at the end. Note that fades don't change the duration.\n\nA clip can contain any of the time assets.\n\nSeveral clips can refer to the same asset. See the clip as putting a part (or all) of an asset on the timeline. If the user wants to cut a sound in two for example, it would create two clips. \n"},"alignment":{"anyOf":[{"$ref":"#/components/schemas/Audioform2/properties/Alignment"},{"type":"null"}],"description":"The alignment is within the containing section space created between the section paddingStart and paddingEnd. \n\nThe values can be `start`, `end` or `middle`.\n\nNote that if the section duration is free (e.g. there no forcedDuration) then the alignment is equivalent to aligning relative to the longest layer (because the section adapts to the longest layer).\n\nA layer _always_ has the length of its content (e.g. the clips).\n"}},"type":"object","required":["clips"],"title":"Layer"},"LoudnessPreset":{"type":"string","enum":["spotify","streaming","radio","radioAdvertising","podcast","applePodcast","youtube","lowVol","podcastDynamic"],"title":"Loudness preset","description":"How loud should it be in term of LUFS and compression.\n\nNote that \"radio\" and \"radioAdvertising\" are very loud and not recommended.\n"},"Media":{"properties":{"type":{"type":"string","const":"media","title":"Type"},"fileId":{"type":"string","title":"File UUID","description":"The fileId is UUID of the form `12345678-baad-baad-baadbaadbaad`.\n\nIt corresponds to a custom audio file stored in your [private library](https://docs.audiostack.ai/docs/libraries).\n"}},"type":"object","required":["type","fileId"],"title":"Media"},"ProductionInput":{"properties":{"arrangement":{"$ref":"#/components/schemas/Audioform2/properties/ArrangementInput"},"masteringPreset":{"type":"string","enum":["balanced","voiceenhanced","musicenhanced"],"title":"Mastering preset","description":"The mastering preset to be used for the production.\n\nThe values can be `balanced`, `voiceenhanced` or `musicenhanced`, which will apply the corresponding mastering preset to the production.\n\nRefer to the general documentation for more details on the mastering presets.\n"}},"type":"object","required":["arrangement","masteringPreset"],"title":"Production"},"SectionInput":{"properties":{"layers":{"items":{"$ref":"#/components/schemas/Audioform2/properties/Layer"},"type":"array","title":"Layers","description":"The layers containst clips. All the layers play _together_, mixing their content to create the final audioform.\n"},"soundTemplateRef":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sound template asset reference within the audioform","description":"[optional] - if specified, the asset reference of the sound template to play as background audio for the section. \n\nThe sound template adapts to the section duration.\n"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"[optional] \n- if specified the section will have that exact duration. \n  If the one of the layer is smaller there will be silence at the end. If a layer is longer it will be clipped, at the begining, the end or each side depending on the alignement (see layers).\n  Behaviour is not defined if `forcedDuration < paddingStart + paddingEnd`\n- If not set, then the duration is size of the longest layer, plus the padding.\n"},"paddingStart":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Padding start in seconds","description":"[optional] : defaults to `0 seconds`. This is marging before the layers, e.g. the layers will start after the padding. The sound template (if set) will play during that time.\n"},"paddingEnd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Padding end in seconds","description":"[optional] : defaults to `0 seconds`. This is the margin after the end of the longest layer. The sound template (if set) will play during that time. Note that if `forcedDuration` is set, the layers will be clipped but `paddingEnd` time will be preserved. \n"},"smartFit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Smart-fit feature enabled","description":"[optional] defaults to false.  If set to true the sound template will be edited so that it combines the begin and the end of the file in a smart way so ending of the audio always sound great and natural.\n"}},"type":"object","required":["layers"],"title":"Section"},"SoundEffect":{"properties":{"type":{"type":"string","const":"soundEffect","title":"Type"},"soundEffectAlias":{"type":"string","title":"Sound effect alias","description":"The alias of the sound effect (unique to the sound effect). Corresponds to a sound effect in our sound effect library.\nLearn more about sound effects in the documentation.\n"}},"type":"object","required":["type","soundEffectAlias"],"title":"Sound Effect"},"SoundTemplate":{"properties":{"type":{"type":"string","const":"soundTemplate","title":"Type"},"soundTemplateAlias":{"type":"string","title":"Sound template alias","description":"The alias of the sound template (unique to the sound template). Corresponds to a sound template in our sound template library or in your private library.\nLearn more about sound templates in the documentation.\n"},"segment":{"type":"string","title":"Segment","description":"The segment of the sound template to play.\nGenerally, most sound templates have only one segment called \"main\". You can get information about a specific sound tempalte via the sound template API. Refer to the documentation for more details.\n"}},"type":"object","required":["type","soundTemplateAlias","segment"],"title":"SoundTemplate","description":"Corresponds to a [sound template](https://docs.audiostack.ai/docs/sound-template-library) (either in our sound template library or uploaded by our clients and private to them).\n\nA sound template cannot be put in a clip as they don't have an inherent duration. Use a _sound template snippet_ for this.\n"},"SoundTemplateSnippet":{"properties":{"type":{"type":"string","const":"soundTemplateSnippet","title":"Type"},"soundTemplateRef":{"type":"string","title":"Sound template asset reference within the audioform","description":"The asset reference to the sound template to be used in the snippet.\n"},"targetReadPosition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target read position in seconds","description":"optional, and `0 second` if not specifed. Where do we start reading in the sound template."},"targetDuration":{"type":"number","title":"Target duration in seconds","description":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n"},"smartFit":{"type":"boolean","title":"Smart fit","description":"[optional] defaults to `false`. If set to `true` the snippet is following the smart fit feature. Refer to the sound template asset for more details.\n\nIf `smartFit` is true, `targetReadPosition` must be `0` (or not specified).\n"}},"type":"object","required":["type","soundTemplateRef","targetDuration"],"title":"Sound Template Snippet","description":"Create an audio file of a given duration from a sound template, that can be used in a Clip."},"STS":{"properties":{"type":{"type":"string","const":"sts","title":"Type"},"mediaRef":{"type":"string","title":"Media asset reference within the audioform","description":"The asset reference to the media file that contains the recording of the source speech\n"},"voiceRef":{"type":"string","title":"Voice asset reference within the audioform","description":"the asset reference of the Voice with which to generate the asset.\n"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds","description":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n"}},"type":"object","required":["type","mediaRef","voiceRef"],"title":"STS"},"TTS":{"properties":{"type":{"type":"string","const":"tts","title":"Type"},"text":{"type":"string","title":"Text","description":"The text to be spoken.\n"},"voiceRef":{"type":"string","title":"Voice asset reference","description":"The asset reference (within the audioform) of the Voice with which to generate the asset.\n"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds","description":"[optional] Asks the system to match the asset to a certain time. It will ask the voice provider to speed up the voice if supported, otherwise it will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.          \n"},"targetDurationSpeedUpLimit":{"type":"number","title":"Target duration speed-up limit","default":1.2,"description":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n"},"targetDurationSlowDownLimit":{"type":"number","title":"Target duration slow-down limit","default":1.2,"description":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n"},"useVoiceIntelligenceLayer":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"use Voice Intelligence Layer","description":"[optional] defaults to `false`. If set to `true` the voice will use the voice intelligence layer\nwhich is a technology that helps with getting a more natural pronunciation.\n"},"anchor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Anchor","description":"[optional] string - specify this value to enable TTS locking. Any other audioform using a TTS with \nthe same parameters (including voice parameters) and the same anchor will sound the same.\n\nIf this is not specified the TTS in the result will still get a uniquely generated value by the \nserver so that you can lock the value.\n"}},"type":"object","required":["type","text","voiceRef"],"title":"TTS"},"Voice":{"properties":{"type":{"type":"string","const":"voice","title":"Type"},"voiceAlias":{"type":"string","title":"Voice alias","description":"The alias of the voice (unique to the voice). Corresponds to a voice in our voice library.\nLearn more about voices in the [documentation](https://docs.audiostack.ai/docs/voice-library-1).\nNote that all voices are not suitable for STS, all voices are suitable for TTS. \n"},"speed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Speed","default":1,"description":"[optional], defaults to `1`. Adjust the speed of the voice from `0.8` to `1.2`. \n"},"voicePreset":{"$ref":"#/components/schemas/Audioform2/properties/VoicePreset","default":"standard"}},"type":"object","required":["type","voiceAlias"],"title":"Voice","description":"A voice asset references one of the voices from our catalogue. \n\nSee [AudioStack Voices & Text-to-Speech](https://docs.audiostack.ai/docs/voice-library-1) for more details.\n\nNote that all voices are not suitable for STS, all voices are suitable for TTS.\n"},"VoicePreset":{"type":"string","enum":["standard","expressive"],"title":"VoicePreset"}},"title":"Audioform2 Schemas"},"Audioform3":{"x-targetDurationLimitsDescription":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n","x-targetDuration":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n","type":"object","properties":{"Alignment":{"type":"string","enum":["start","end","middle"],"title":"Alignment"},"ArrangementInput":{"properties":{"sections":{"items":{"$ref":"#/components/schemas/Audioform3/properties/SectionInput"},"type":"array","title":"Sections"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"Optional. If specified the arrangement (e.g. the audioform) will have that exact duration.\n\n- If the content is smaller there will be silence at the end.\n\n- If the content is longer, it will be clipped (the fade-out will still be applied at the end).\n    \n- If not set, then the duration is the sum of the duration of all the sections  (e.g. the arrangement adapts to the duration of its content)\n"},"fadeIn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-in","description":"Expressed in seconds, optional and defaults to 0. \nThe fade-in is the duration of the fade-in effect at the beginning of the audioform.\n"},"fadeOut":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-out","description":"Expressed in seconds, optional and defaults to 0. \nThe fade-out is the duration of the fade-out effect at the end of the audioform.\n"},"usePlaybackGainHints":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"use playback gain hints","description":"Optional and defaults to false. When enabled (`true`), all assets (excepted Voice) will get a new property in the result called `playbackGainHint`. \n\nThis is a `dB` (decibel) value on the asset that helps the browser to locally rebuild the audioform from the asset. \n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip gain to get the correct playback gain if the asset is played in a clip.\n"}},"type":"object","required":["sections"],"title":"Arrangement"},"AudioformInput":{"properties":{"header":{"$ref":"#/components/schemas/Audioform3/properties/Header"},"assets":{"additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/Audioform3/properties/TTS"},{"$ref":"#/components/schemas/Audioform3/properties/STS"},{"$ref":"#/components/schemas/Audioform3/properties/Media"},{"$ref":"#/components/schemas/Audioform3/properties/Voice"},{"$ref":"#/components/schemas/Audioform3/properties/SoundTemplate"},{"$ref":"#/components/schemas/Audioform3/properties/SoundTemplateSnippet"},{"$ref":"#/components/schemas/Audioform3/properties/SoundEffect"}]},"type":"object","title":"Assets"},"production":{"$ref":"#/components/schemas/Audioform3/properties/ProductionInput"},"delivery":{"$ref":"#/components/schemas/Audioform3/properties/Delivery"}},"type":"object","required":["header","assets","production","delivery"],"title":"Audioform v3"},"Clip":{"properties":{"assetRef":{"type":"string","title":"Asset reference","description":"The asset reference (within the audioform) of the asset to be used in the clip.\n"},"readPosition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Read position in seconds","description":"[optional, defaults to `0s` ]: position in the source asset where the clip starts\n"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"[optional]: if not set, the clip assume the duration necessary to encompass exactly the asset (minus read position). \nIf set, it will have the specified duration (in seconds). \nIf the asset is shorter there will be silence at the end. If the asset is longer the asset will be clipped.\n"},"marginStart":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin start in seconds","description":"[optional, defaults to `0s`]: a silence before the clip. \n"},"marginEnd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin end in seconds","description":"[optional, defaults to `0s`]: a silence after the clip. \n"},"fadeIn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-in in seconds","description":"[optional, defaults to `0`]: ramp up duration of the volume of the clip at the beginning of the clip.\n"},"fadeOut":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-out in seconds","description":"[optional, defaults to `0`]: ramp down duration of the volume of the clip at the end of the clip.\n"},"gain":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gain in dB","description":"[optional, defaults to `0 dB`]: a relative gain in `dB` to what the mastering engine would normally compute to make the clip louder or quieter.\n"},"blendBase":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blendbase","default":false},"blendElement":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blendelement","default":false}},"type":"object","required":["assetRef"],"title":"Clip","description":"The clips are placed within a layer contiguously. They have a margin property that allow them to be spaced and not strictly contiguous.\n\nThey can also have a fade in and fade out, so that the volume ramps up at the beginning and ramps down at the end. Note that fades don't change the duration.\n\nA clip can contain any of the time assets.\n\nSeveral clips can refer to the same asset. See the clip as putting a part (or all) of an asset on the timeline. If the user wants to cut a sound in two for example, it would create two clips.\n"},"Delivery":{"properties":{"loudnessPreset":{"$ref":"#/components/schemas/Audioform3/properties/LoudnessPreset"},"encoderPreset":{"$ref":"#/components/schemas/Audioform3/properties/EncoderPreset"},"public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Public","description":"Should the delivery audiofile be publicly available or private."}},"type":"object","required":["loudnessPreset","encoderPreset"],"title":"Delivery"},"EncoderPreset":{"type":"string","enum":["mp3","wav","wav320","ogg","flac","mp3VeryLow","mp3Low","mp3Medium","mp3High","mp3VeryHigh","mp3Alexa","mp3Alexa48br","m4a"],"title":"EncoderPreset","description":"The encoder preset to be used for the delivery.\n"},"Header":{"properties":{"version":{"type":"string","const":"3","title":"Version"}},"type":"object","required":["version"],"title":"Header"},"Layer":{"properties":{"clips":{"items":{"$ref":"#/components/schemas/Audioform3/properties/Clip"},"type":"array","title":"Clips","description":"The clips are placed within a layer contiguously. They have a margin property that allow them to be spaced and not strictly contiguous.\n\nThey can also have a fade in and fade out, so that the volume ramps up at the beginning and ramps down at the end. Note that fades don't change the duration.\n\nA clip can contain any of the time assets.\n\nSeveral clips can refer to the same asset. See the clip as putting a part (or all) of an asset on the timeline. If the user wants to cut a sound in two for example, it would create two clips. \n"},"alignment":{"anyOf":[{"$ref":"#/components/schemas/Audioform3/properties/Alignment"},{"type":"null"}],"description":"The alignment is within the containing section space created between the section paddingStart and paddingEnd. \n\nThe values can be `start`, `end` or `middle`.\n\nNote that if the section duration is free (e.g. there no forcedDuration) then the alignment is equivalent to aligning relative to the longest layer (because the section adapts to the longest layer).\n\nA layer _always_ has the length of its content (e.g. the clips).\n"}},"type":"object","required":["clips"],"title":"Layer"},"LoudnessPreset":{"type":"string","enum":["spotify","streaming","radio","radioAdvertising","podcast","applePodcast","youtube","lowVol","podcastDynamic"],"title":"Loudness preset","description":"How loud should it be in term of LUFS and compression.\n\nNote that \"radio\" and \"radioAdvertising\" are very loud and not recommended.\n"},"Media":{"properties":{"type":{"type":"string","const":"media","title":"Type"},"fileId":{"type":"string","title":"File UUID","description":"The fileId is UUID of the form `12345678-baad-baad-baadbaadbaad`.\n\nIt corresponds to a custom audio file stored in your [private library](https://docs.audiostack.ai/docs/libraries).\n"}},"type":"object","required":["type","fileId"],"title":"Media"},"ProductionInput":{"properties":{"arrangement":{"$ref":"#/components/schemas/Audioform3/properties/ArrangementInput"},"mixingPreset":{"type":"string","enum":["balanced","voiceenhanced","musicenhanced"],"title":"Mixing preset","description":"The mixing preset to be used for the production.\n\nThe values can be `balanced`, `voiceenhanced` or `musicenhanced`, which will apply the corresponding mixing preset to the production.\n\nRefer to the general documentation for more details on the mixing presets.\n"}},"type":"object","required":["arrangement","mixingPreset"],"title":"Production"},"SectionInput":{"properties":{"layers":{"items":{"$ref":"#/components/schemas/Audioform3/properties/Layer"},"type":"array","title":"Layers","description":"The layers containst clips. All the layers play _together_, mixing their content to create the final audioform.\n"},"soundTemplateRef":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sound template asset reference within the audioform","description":"[optional] - if specified, the asset reference of the sound template to play as background audio for the section. \n\nThe sound template adapts to the section duration.\n"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"[optional] \n- if specified the section will have that exact duration. \n  If the one of the layer is smaller there will be silence at the end. If a layer is longer it will be clipped, at the begining, the end or each side depending on the alignement (see layers).\n  Behaviour is not defined if `forcedDuration < paddingStart + paddingEnd`\n- If not set, then the duration is size of the longest layer, plus the padding.\n"},"paddingStart":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Padding start in seconds","description":"[optional] : defaults to `0 seconds`. This is marging before the layers, e.g. the layers will start after the padding. The sound template (if set) will play during that time.\n"},"paddingEnd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Padding end in seconds","description":"[optional] : defaults to `0 seconds`. This is the margin after the end of the longest layer. The sound template (if set) will play during that time. Note that if `forcedDuration` is set, the layers will be clipped but `paddingEnd` time will be preserved. \n"},"smartFit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Smart-fit feature enabled","description":"[optional] defaults to false.  If set to true the sound template will be edited so that it combines the begin and the end of the file in a smart way so ending of the audio always sound great and natural.\n"}},"type":"object","required":["layers"],"title":"Section"},"SoundEffect":{"properties":{"type":{"type":"string","const":"soundEffect","title":"Type"},"soundEffectAlias":{"type":"string","title":"Sound effect alias","description":"The alias of the sound effect (unique to the sound effect). Corresponds to a sound effect in our sound effect library.\nLearn more about sound effects in the documentation.\n"}},"type":"object","required":["type","soundEffectAlias"],"title":"Sound Effect"},"SoundTemplate":{"properties":{"type":{"type":"string","const":"soundTemplate","title":"Type"},"soundTemplateAlias":{"type":"string","title":"Sound template alias","description":"The alias of the sound template (unique to the sound template). Corresponds to a sound template in our sound template library or in your private library.\nLearn more about sound templates in the documentation.\n"},"segment":{"type":"string","title":"Segment","description":"The segment of the sound template to play.\nGenerally, most sound templates have only one segment called \"main\". You can get information about a specific sound tempalte via the sound template API. Refer to the documentation for more details.\n"}},"type":"object","required":["type","soundTemplateAlias","segment"],"title":"SoundTemplate","description":"Corresponds to a [sound template](https://docs.audiostack.ai/docs/sound-template-library) (either in our sound template library or uploaded by our clients and private to them).\n\nA sound template cannot be put in a clip as they don't have an inherent duration. Use a _sound template snippet_ for this.\n"},"SoundTemplateSnippet":{"properties":{"type":{"type":"string","const":"soundTemplateSnippet","title":"Type"},"soundTemplateRef":{"type":"string","title":"Sound template asset reference within the audioform","description":"The asset reference to the sound template to be used in the snippet.\n"},"targetReadPosition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target read position in seconds","description":"optional, and `0 second` if not specifed. Where do we start reading in the sound template."},"targetDuration":{"type":"number","title":"Target duration in seconds","description":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n"},"smartFit":{"type":"boolean","title":"Smart fit","description":"[optional] defaults to `false`. If set to `true` the snippet is following the smart fit feature. Refer to the sound template asset for more details.\n\nIf `smartFit` is true, `targetReadPosition` must be `0` (or not specified).\n"}},"type":"object","required":["type","soundTemplateRef","targetDuration"],"title":"Sound Template Snippet","description":"Create an audio file of a given duration from a sound template, that can be used in a Clip."},"STS":{"properties":{"type":{"type":"string","const":"sts","title":"Type"},"mediaRef":{"type":"string","title":"Media asset reference within the audioform","description":"The asset reference to the media file that contains the recording of the source speech\n"},"voiceRef":{"type":"string","title":"Voice asset reference within the audioform","description":"the asset reference of the Voice with which to generate the asset.\n"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds","description":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n"}},"type":"object","required":["type","mediaRef","voiceRef"],"title":"STS"},"TTS":{"properties":{"type":{"type":"string","const":"tts","title":"Type"},"text":{"type":"string","title":"Text","description":"The text to be spoken.\n"},"voiceRef":{"type":"string","title":"Voice asset reference","description":"The asset reference (within the audioform) of the Voice with which to generate the asset.\n"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds","description":"[optional] Asks the system to match the asset to a certain time. It will ask the voice provider to speed up the voice if supported, otherwise it will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.          \n"},"targetDurationSpeedUpLimit":{"type":"number","title":"Target duration speed-up limit","default":1.2,"description":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n"},"targetDurationSlowDownLimit":{"type":"number","title":"Target duration slow-down limit","default":1.2,"description":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n"},"useVoiceIntelligenceLayer":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"use Voice Intelligence Layer","description":"[optional] defaults to `false`. If set to `true` the voice will use the voice intelligence layer\nwhich is a technology that helps with getting a more natural pronunciation.\n"},"language":{"$ref":"#/components/schemas/CreateBriefFromBodyRequest/properties/brief/properties/voices/items/anyOf/1/properties/lang/oneOf/1/items","description":"Required when `useVoiceIntelligenceLayer` is `true`. The language for the voice intelligence layer.\n"},"anchor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Anchor","description":"[optional] string - specify this value to enable TTS locking. Any other audioform using a TTS with \nthe same parameters (including voice parameters) and the same anchor will sound the same.\n\nIf this is not specified the TTS in the result will still get a uniquely generated value by the \nserver so that you can lock the value.\n"}},"allOf":[{"type":"object","required":["type","text","voiceRef"]},{"if":{"properties":{"useVoiceIntelligenceLayer":{"const":true}},"required":["useVoiceIntelligenceLayer"]},"then":{"required":["language"]}}],"type":"object","title":"TTS"},"Voice":{"properties":{"type":{"type":"string","const":"voice","title":"Type"},"voiceAlias":{"type":"string","title":"Voice alias","description":"The alias of the voice (unique to the voice). Corresponds to a voice in our voice library.\nLearn more about voices in the [documentation](https://docs.audiostack.ai/docs/voice-library-1).\nNote that all voices are not suitable for STS, all voices are suitable for TTS. \n"},"speed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Speed","default":1,"description":"[optional], defaults to `1`. Adjust the speed of the voice from `0.8` to `1.2`. \n"},"voicePreset":{"$ref":"#/components/schemas/Audioform3/properties/VoicePreset","default":"standard"}},"type":"object","required":["type","voiceAlias"],"title":"Voice","description":"A voice asset references one of the voices from our catalogue. \n\nSee [AudioStack Voices & Text-to-Speech](https://docs.audiostack.ai/docs/voice-library-1) for more details.\n\nNote that all voices are not suitable for STS, all voices are suitable for TTS.\n"},"VoicePreset":{"type":"string","enum":["standard","expressive"],"title":"VoicePreset"}},"title":"Audioform3 Schemas"},"AudioformResult1":{"x-playbackGainHintDescription":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n","x-duration":"the actual duration of the element\n","x-position":"the actual position of the element in seconds and in absolute time from the beginning of the audioform\n","x-assetUri":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n","x-targetDurationLimitsDescription":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n","x-targetDuration":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n","type":"object","properties":{"Alignment":{"type":"string","enum":["start","end","middle"],"title":"Alignment"},"ArrangementResult":{"properties":{"sections":{"items":{"$ref":"#/components/schemas/AudioformResult1/properties/SectionResult"},"type":"array","title":"Sections"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"Optional. If specified the arrangement (e.g. the audioform) will have that exact duration.\n\n- If the content is smaller there will be silence at the end.\n\n- If the content is longer, it will be clipped (the fade-out will still be applied at the end).\n    \n- If not set, then the duration is the sum of the duration of all the sections  (e.g. the arrangement adapts to the duration of its content)\n"},"fadeIn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-in","description":"Expressed in seconds, optional and defaults to 0. \nThe fade-in is the duration of the fade-in effect at the beginning of the audioform.\n"},"fadeOut":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-out","description":"Expressed in seconds, optional and defaults to 0. \nThe fade-out is the duration of the fade-out effect at the end of the audioform.\n"},"usePlaybackGainHints":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"use playback gain hints","description":"Optional and defaults to false. When enabled (`true`), all assets (excepted Voice) will get a new property in the result called `playbackGainHint`. \n\nThis is a `dB` (decibel) value on the asset that helps the browser to locally rebuild the audioform from the asset. \n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip gain to get the correct playback gain if the asset is played in a clip.\n"},"position":{"type":"number","title":"Position in seconds","description":"the actual position of the element in seconds and in absolute time from the beginning of the audioform\n"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"}},"type":"object","required":["sections","position","duration"],"title":"ArrangementResult"},"AudioformResult":{"properties":{"header":{"$ref":"#/components/schemas/AudioformResult1/properties/HeaderResult"},"assets":{"additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/AudioformResult1/properties/TTSResult"},{"$ref":"#/components/schemas/AudioformResult1/properties/STSResult"},{"$ref":"#/components/schemas/AudioformResult1/properties/MediaResult"},{"$ref":"#/components/schemas/Audioform1/properties/Voice"},{"$ref":"#/components/schemas/AudioformResult1/properties/SoundTemplateResult"},{"$ref":"#/components/schemas/AudioformResult1/properties/SoundTemplateSnippetResult"},{"$ref":"#/components/schemas/AudioformResult1/properties/SoundEffectResult"}]},"type":"object","title":"Assets"},"production":{"$ref":"#/components/schemas/AudioformResult1/properties/ProductionResult"},"delivery":{"$ref":"#/components/schemas/AudioformResult1/properties/DeliveryResult"}},"type":"object","required":["header","assets","production","delivery"],"title":"AudioformResult version 1"},"ClipResult":{"properties":{"assetRef":{"type":"string","title":"Asset reference","description":"The asset reference (within the audioform) of the asset to be used in the clip.\n"},"readPosition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Read position in seconds","description":"[optional, defaults to `0s` ]: position in the source asset where the clip starts\n"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"[optional]: if not set, the clip assume the duration necessary to encompass exactly the asset (minus read position). \nIf set, it will have the specified duration (in seconds). \nIf the asset is shorter there will be silence at the end. If the asset is longer the asset will be clipped.\n"},"marginStart":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin start in seconds","description":"[optional, defaults to `0s`]: a silence before the clip. \n"},"marginEnd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin end in seconds","description":"[optional, defaults to `0s`]: a silence after the clip. \n"},"fadeIn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-in in seconds","description":"[optional, defaults to `0`]: ramp up duration of the volume of the clip at the beginning of the clip.\n"},"fadeOut":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-out in seconds","description":"[optional, defaults to `0`]: ramp down duration of the volume of the clip at the end of the clip.\n"},"gain":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gain in dB","description":"[optional, defaults to `0 dB`]: a relative gain in `dB` to what the mastering engine would normally compute to make the clip louder or quieter.\n"},"blendBase":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blendbase"},"blendElement":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blendelement"},"position":{"type":"number","title":"Position in seconds","description":"the actual position of the element in seconds and in absolute time from the beginning of the audioform\n"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"}},"type":"object","required":["assetRef","position","duration"],"title":"ClipResult"},"DeliveryResult":{"properties":{"loudnessPreset":{"$ref":"#/components/schemas/AudioformResult1/properties/LoudnessPreset"},"encoderPreset":{"$ref":"#/components/schemas/AudioformResult1/properties/EncoderPreset"},"public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Public","description":"Should the delivery audiofile be publicly available or private."},"uri":{"type":"string","minLength":1,"format":"uri","title":"URI of the delivery","description":"The download URI of the delivery audio file. If it is not public you will need to be authenticated to download it."},"extension":{"type":"string","title":"Extension of the file"},"deliveryId":{"type":"string","title":"Delivery UUID"}},"type":"object","required":["loudnessPreset","encoderPreset","uri","extension","deliveryId"],"title":"Delivery Result"},"EncoderPreset":{"type":"string","enum":["mp3","wav","wav320","ogg","flac","mp3VeryLow","mp3Low","mp3Medium","mp3High","mp3VeryHigh","mp3Alexa","mp3Alexa48br","m4a"],"title":"EncoderPreset"},"HeaderResult":{"properties":{"version":{"type":"string","const":"1","title":"Version"},"audioformId":{"type":"string","format":"uuid","title":"Audioform UUID","description":"The UUID of the audioform build. It is used to identify the audioform build in the API."}},"type":"object","required":["version","audioformId"],"title":"HeaderResult"},"LayerResult":{"properties":{"clips":{"items":{"$ref":"#/components/schemas/AudioformResult1/properties/ClipResult"},"type":"array","title":"Clips"},"alignment":{"anyOf":[{"$ref":"#/components/schemas/AudioformResult1/properties/Alignment"},{"type":"null"}],"description":"The alignment is within the containing section space created between the section paddingStart and paddingEnd. \n\nThe values can be `start`, `end` or `middle`.\n\nNote that if the section duration is free (e.g. there no forcedDuration) then the alignment is equivalent to aligning relative to the longest layer (because the section adapts to the longest layer).\n\nA layer _always_ has the length of its content (e.g. the clips).\n"},"position":{"type":"number","title":"Position","description":"the actual position of the element in seconds and in absolute time from the beginning of the audioform\n"},"duration":{"type":"number","title":"Duration","description":"the actual duration of the element\n"}},"type":"object","required":["clips","position","duration"],"title":"LayerResult"},"LoudnessPreset":{"type":"string","enum":["spotify","streaming","radio","radioAdvertising","podcast","applePodcast","youtube","lowVol","podcastDynamic"],"title":"LoudnessPreset"},"MediaResult":{"properties":{"type":{"type":"string","const":"media","title":"Type"},"mediaId":{"type":"string","title":"Media UUID","description":"The mediaId is UUID of the form `12345678-baad-baad-baadbaadbaad`.\n\nIt corresponds to a custom media stored in your [private library](https://docs.audiostack.ai/docs/libraries).\n"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"category":{"type":"string","title":"Category","description":"The category of the media [undocumented]."},"path":{"type":"string","title":"Path","description":"The path of the media [undocumented]."},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","mediaId","duration","uri","category","path"],"title":"Media Result"},"ProductionResult":{"properties":{"arrangement":{"$ref":"#/components/schemas/AudioformResult1/properties/ArrangementResult"},"masteringPreset":{"type":"string","enum":["balanced","voiceenhanced","musicenhanced"],"title":"Mastering preset","description":"The mastering preset to be used for the production.\n\nThe values can be `balanced`, `voiceenhanced` or `musicenhanced`, which will apply the corresponding mastering preset to the production.\n\nRefer to the general documentation for more details on the mastering presets.\n"},"productionId":{"type":"string","title":"Production UUID"}},"type":"object","required":["arrangement","masteringPreset","productionId"],"title":"ProductionResult"},"STSResult":{"properties":{"type":{"type":"string","const":"sts","title":"Type"},"mediaRef":{"type":"string","title":"Media asset reference within the audioform","description":"The asset reference to the media file that contains the recording of the source speech\n"},"voiceRef":{"type":"string","title":"Voice asset reference within the audioform","description":"the asset reference of the Voice with which to generate the asset.\n"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds","description":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"stsId":{"type":"string","title":"STS UUID","description":"The UUID of the STS asset."},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","mediaRef","voiceRef","duration","uri","stsId"],"title":"STS Result"},"SectionResult":{"properties":{"layers":{"items":{"$ref":"#/components/schemas/AudioformResult1/properties/LayerResult"},"type":"array","title":"Layers"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"[optional] \n- if specified the section will have that exact duration. \n  If the one of the layer is smaller there will be silence at the end. If a layer is longer it will be clipped, at the begining, the end or each side depending on the alignement (see layers).\n  Behaviour is not defined if `forcedDuration < paddingStart + paddingEnd`\n- If not set, then the duration is size of the longest layer, plus the padding.\n"},"paddingStart":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Padding start in seconds","description":"[optional] : defaults to `0 seconds`. This is marging before the layers, e.g. the layers will start after the padding. The sound template (if set) will play during that time.\n"},"paddingEnd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Padding end in seconds","description":"[optional] : defaults to `0 seconds`. This is the margin after the end of the longest layer. The sound template (if set) will play during that time. Note that if `forcedDuration` is set, the layers will be clipped but `paddingEnd` time will be preserved. \n"},"soundTemplateRef":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sound template asset reference within the audioform","description":"[optional] - if specified, the asset reference of the sound template to play as background audio for the section. \n\nThe sound template adapts to the section duration.\n"},"smartFit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Smart-fit feature enabled","description":"[optional] defaults to false.  If set to true the sound template will be edited so that it combines the begin and the end of the file in a smart way so ending of the audio always sound great and natural.\n"},"position":{"type":"number","title":"Position","description":"the actual position of the element in seconds and in absolute time from the beginning of the audioform\n"},"duration":{"type":"number","title":"Duration","description":"the actual duration of the element\n"},"soundTemplateUri":{"anyOf":[{"type":"string","minLength":1,"format":"uri"},{"type":"null"}],"title":"Sound template URI","description":"The download URI of the sound template. Will always be private and you will need to be authenticated to download it."}},"type":"object","required":["layers","position","duration","soundTemplateUri"],"title":"SectionResult"},"SoundEffectResult":{"properties":{"type":{"type":"string","const":"soundEffect","title":"Type"},"soundEffectAlias":{"type":"string","title":"Sound effect alias","description":"The alias of the sound effect (unique to the sound effect). Corresponds to a sound effect in our sound effect library.\nLearn more about sound effects in the documentation.\n"},"duration":{"type":"number","title":"Duration","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","soundEffectAlias","duration","uri"],"title":"Sound Effect Result"},"SoundTemplateResult":{"properties":{"type":{"type":"string","const":"soundTemplate","title":"Type"},"soundTemplateAlias":{"type":"string","title":"Sound template alias","description":"The alias of the sound template (unique to the sound template). Corresponds to a sound template in our sound template library or in your private library.\nLearn more about sound templates in the documentation.\n"},"segment":{"type":"string","title":"Segment","description":"The segment of the sound template to play.\nGenerally, most sound templates have only one segment called \"main\". You can get information about a specific sound tempalte via the sound template API. Refer to the documentation for more details.\n"},"duration":{"type":"number","title":"Duration","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","soundTemplateAlias","segment","duration","uri"],"title":"Sound Template Result"},"SoundTemplateSnippetResult":{"properties":{"type":{"type":"string","const":"soundTemplateSnippet","title":"Type"},"soundTemplateRef":{"type":"string","title":"Sound template asset reference within the audioform","description":"The asset reference to the sound template to be used in the snippet.\n"},"targetReadPosition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target read position in seconds","description":"optional, and `0 second` if not specifed. Where do we start reading in the sound template."},"targetDuration":{"type":"number","title":"Target duration in seconds","description":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n"},"smartFit":{"type":"boolean","title":"Smart fit","description":"[optional] defaults to `false`. If set to `true` the snippet is following the smart fit feature. Refer to the sound template asset for more details.\n\nIf `smartFit` is true, `targetReadPosition` must be `0` (or not specified).\n"},"readPosition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Readposition"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","soundTemplateRef","targetDuration","duration","uri"],"title":"Sound Template Snippet Result"},"TTSResult":{"properties":{"type":{"type":"string","const":"tts","title":"Type"},"text":{"type":"string","title":"Text","description":"The text to be spoken.\n"},"voiceRef":{"type":"string","title":"Voice asset reference","description":"The asset reference (within the audioform) of the Voice with which to generate the asset.\n"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds","description":"[optional] Asks the system to match the asset to a certain time. It will ask the voice provider to speed up the voice if supported, otherwise it will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.          \n"},"targetDurationSpeedUpLimit":{"type":"number","title":"Target duration speed-up limit","default":1.2,"description":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n"},"targetDurationSlowDownLimit":{"type":"number","title":"Target duration slow-down limit","default":1.2,"description":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"ttsId":{"type":"string","title":"TTS UUID","description":"The UUID of the TTS asset [undocumented]."},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","text","voiceRef","duration","uri","ttsId"],"title":"TTS Result"},"VoicePreset":{"type":"string","enum":["standard","expressive"],"title":"VoicePreset"}},"title":"AudioformResult1 Schemas"},"AudioformResult2":{"x-playbackGainHintDescription":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n","x-duration":"the actual duration of the element\n","x-position":"the actual position of the element in seconds and in absolute time from the beginning of the audioform\n","x-assetUri":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n","x-targetDurationLimitsDescription":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n","x-targetDuration":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n","type":"object","properties":{"Alignment":{"type":"string","enum":["start","end","middle"],"title":"Alignment"},"ArrangementResult":{"properties":{"sections":{"items":{"$ref":"#/components/schemas/AudioformResult2/properties/SectionResult"},"type":"array","title":"Sections"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"Optional. If specified the arrangement (e.g. the audioform) will have that exact duration.\n\n- If the content is smaller there will be silence at the end.\n\n- If the content is longer, it will be clipped (the fade-out will still be applied at the end).\n    \n- If not set, then the duration is the sum of the duration of all the sections  (e.g. the arrangement adapts to the duration of its content)\n"},"fadeIn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-in","description":"Expressed in seconds, optional and defaults to 0. \nThe fade-in is the duration of the fade-in effect at the beginning of the audioform.\n"},"fadeOut":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-out","description":"Expressed in seconds, optional and defaults to 0. \nThe fade-out is the duration of the fade-out effect at the end of the audioform.\n"},"usePlaybackGainHints":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"use playback gain hints","description":"Optional and defaults to false. When enabled (`true`), all assets (excepted Voice) will get a new property in the result called `playbackGainHint`. \n\nThis is a `dB` (decibel) value on the asset that helps the browser to locally rebuild the audioform from the asset. \n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip gain to get the correct playback gain if the asset is played in a clip.\n"},"position":{"type":"number","title":"Position in seconds","description":"the actual position of the element in seconds and in absolute time from the beginning of the audioform\n"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"}},"type":"object","required":["sections","position","duration"],"title":"ArrangementResult"},"AudioformResult":{"properties":{"header":{"$ref":"#/components/schemas/AudioformResult2/properties/HeaderResult"},"assets":{"additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/AudioformResult2/properties/TTSResult"},{"$ref":"#/components/schemas/AudioformResult2/properties/STSResult"},{"$ref":"#/components/schemas/AudioformResult2/properties/MediaResult"},{"$ref":"#/components/schemas/Audioform2/properties/Voice"},{"$ref":"#/components/schemas/AudioformResult2/properties/SoundTemplateResult"},{"$ref":"#/components/schemas/AudioformResult2/properties/SoundTemplateSnippetResult"},{"$ref":"#/components/schemas/AudioformResult2/properties/SoundEffectResult"}]},"type":"object","title":"Assets"},"production":{"$ref":"#/components/schemas/AudioformResult2/properties/ProductionResult"},"delivery":{"$ref":"#/components/schemas/AudioformResult2/properties/DeliveryResult"}},"type":"object","required":["header","assets","production","delivery"],"title":"AudioformResult version 2"},"ClipResult":{"properties":{"assetRef":{"type":"string","title":"Asset reference","description":"The asset reference (within the audioform) of the asset to be used in the clip.\n"},"readPosition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Read position in seconds","description":"[optional, defaults to `0s` ]: position in the source asset where the clip starts\n"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"[optional]: if not set, the clip assume the duration necessary to encompass exactly the asset (minus read position). \nIf set, it will have the specified duration (in seconds). \nIf the asset is shorter there will be silence at the end. If the asset is longer the asset will be clipped.\n"},"marginStart":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin start in seconds","description":"[optional, defaults to `0s`]: a silence before the clip. \n"},"marginEnd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin end in seconds","description":"[optional, defaults to `0s`]: a silence after the clip. \n"},"fadeIn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-in in seconds","description":"[optional, defaults to `0`]: ramp up duration of the volume of the clip at the beginning of the clip.\n"},"fadeOut":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-out in seconds","description":"[optional, defaults to `0`]: ramp down duration of the volume of the clip at the end of the clip.\n"},"gain":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gain in dB","description":"[optional, defaults to `0 dB`]: a relative gain in `dB` to what the mastering engine would normally compute to make the clip louder or quieter.\n"},"blendBase":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blendbase"},"blendElement":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blendelement"},"position":{"type":"number","title":"Position in seconds","description":"the actual position of the element in seconds and in absolute time from the beginning of the audioform\n"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"}},"type":"object","required":["assetRef","position","duration"],"title":"ClipResult"},"DeliveryResult":{"properties":{"loudnessPreset":{"$ref":"#/components/schemas/AudioformResult2/properties/LoudnessPreset"},"encoderPreset":{"$ref":"#/components/schemas/AudioformResult2/properties/EncoderPreset"},"public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Public","description":"Should the delivery audiofile be publicly available or private."},"uri":{"type":"string","minLength":1,"format":"uri","title":"URI of the delivery","description":"The download URI of the delivery audio file. If it is not public you will need to be authenticated to download it."},"extension":{"type":"string","title":"Extension of the file"}},"type":"object","required":["loudnessPreset","encoderPreset","uri","extension"],"title":"Delivery Result"},"EncoderPreset":{"type":"string","enum":["mp3","wav","wav320","ogg","flac","mp3VeryLow","mp3Low","mp3Medium","mp3High","mp3VeryHigh","mp3Alexa","mp3Alexa48br","m4a"],"title":"EncoderPreset"},"HeaderResult":{"properties":{"version":{"type":"string","const":"2","title":"Version"},"audioformId":{"type":"string","format":"uuid","title":"Audioform UUID","description":"The UUID of the audioform build. It is used to identify the audioform build in the API."}},"type":"object","required":["version","audioformId"],"title":"HeaderResult"},"LayerResult":{"properties":{"clips":{"items":{"$ref":"#/components/schemas/AudioformResult2/properties/ClipResult"},"type":"array","title":"Clips"},"alignment":{"anyOf":[{"$ref":"#/components/schemas/AudioformResult2/properties/Alignment"},{"type":"null"}],"description":"The alignment is within the containing section space created between the section paddingStart and paddingEnd. \n\nThe values can be `start`, `end` or `middle`.\n\nNote that if the section duration is free (e.g. there no forcedDuration) then the alignment is equivalent to aligning relative to the longest layer (because the section adapts to the longest layer).\n\nA layer _always_ has the length of its content (e.g. the clips).\n"},"position":{"type":"number","title":"Position","description":"the actual position of the element in seconds and in absolute time from the beginning of the audioform\n"},"duration":{"type":"number","title":"Duration","description":"the actual duration of the element\n"}},"type":"object","required":["clips","position","duration"],"title":"LayerResult"},"LoudnessPreset":{"type":"string","enum":["spotify","streaming","radio","radioAdvertising","podcast","applePodcast","youtube","lowVol","podcastDynamic"],"title":"LoudnessPreset"},"MediaResult":{"properties":{"type":{"type":"string","const":"media","title":"Type"},"fileId":{"type":"string","title":"Fileid"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","fileId","duration","uri"],"title":"Media Result"},"ProductionResult":{"properties":{"arrangement":{"$ref":"#/components/schemas/AudioformResult2/properties/ArrangementResult"},"masteringPreset":{"type":"string","enum":["balanced","voiceenhanced","musicenhanced"],"title":"Mastering preset","description":"The mastering preset to be used for the production.\n\nThe values can be `balanced`, `voiceenhanced` or `musicenhanced`, which will apply the corresponding mastering preset to the production.\n\nRefer to the general documentation for more details on the mastering presets.\n"}},"type":"object","required":["arrangement","masteringPreset"],"title":"ProductionResult"},"STSResult":{"properties":{"type":{"type":"string","const":"sts","title":"Type"},"mediaRef":{"type":"string","title":"Media asset reference within the audioform","description":"The asset reference to the media file that contains the recording of the source speech\n"},"voiceRef":{"type":"string","title":"Voice asset reference within the audioform","description":"the asset reference of the Voice with which to generate the asset.\n"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds","description":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","mediaRef","voiceRef","duration","uri"],"title":"STS Result"},"SectionResult":{"properties":{"layers":{"items":{"$ref":"#/components/schemas/AudioformResult2/properties/LayerResult"},"type":"array","title":"Layers"},"soundTemplateRef":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sound template asset reference within the audioform","description":"[optional] - if specified, the asset reference of the sound template to play as background audio for the section. \n\nThe sound template adapts to the section duration.\n"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"[optional] \n- if specified the section will have that exact duration. \n  If the one of the layer is smaller there will be silence at the end. If a layer is longer it will be clipped, at the begining, the end or each side depending on the alignement (see layers).\n  Behaviour is not defined if `forcedDuration < paddingStart + paddingEnd`\n- If not set, then the duration is size of the longest layer, plus the padding.\n"},"paddingStart":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Padding start in seconds","description":"[optional] : defaults to `0 seconds`. This is marging before the layers, e.g. the layers will start after the padding. The sound template (if set) will play during that time.\n"},"paddingEnd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Padding end in seconds","description":"[optional] : defaults to `0 seconds`. This is the margin after the end of the longest layer. The sound template (if set) will play during that time. Note that if `forcedDuration` is set, the layers will be clipped but `paddingEnd` time will be preserved. \n"},"smartFit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Smart-fit feature enabled","description":"[optional] defaults to false.  If set to true the sound template will be edited so that it combines the begin and the end of the file in a smart way so ending of the audio always sound great and natural.\n"},"position":{"type":"number","title":"Position","description":"the actual position of the element in seconds and in absolute time from the beginning of the audioform\n"},"duration":{"type":"number","title":"Duration","description":"the actual duration of the element\n"},"soundTemplateUri":{"anyOf":[{"type":"string","minLength":1,"format":"uri"},{"type":"null"}],"title":"Sound template URI","description":"The download URI of the sound template. Will always be private and you will need to be authenticated to download it."}},"type":"object","required":["layers","position","duration"],"title":"SectionResult"},"SoundEffectResult":{"properties":{"type":{"type":"string","const":"soundEffect","title":"Type"},"soundEffectAlias":{"type":"string","title":"Sound effect alias","description":"The alias of the sound effect (unique to the sound effect). Corresponds to a sound effect in our sound effect library.\nLearn more about sound effects in the documentation.\n"},"duration":{"type":"number","title":"Duration","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","soundEffectAlias","duration","uri"],"title":"Sound Effect Result"},"SoundTemplateResult":{"properties":{"type":{"type":"string","const":"soundTemplate","title":"Type"},"soundTemplateAlias":{"type":"string","title":"Sound template alias","description":"The alias of the sound template (unique to the sound template). Corresponds to a sound template in our sound template library or in your private library.\nLearn more about sound templates in the documentation.\n"},"segment":{"type":"string","title":"Segment","description":"The segment of the sound template to play.\nGenerally, most sound templates have only one segment called \"main\". You can get information about a specific sound tempalte via the sound template API. Refer to the documentation for more details.\n"},"duration":{"type":"number","title":"Duration","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","soundTemplateAlias","segment","duration","uri"],"title":"Sound Template Result"},"SoundTemplateSnippetResult":{"properties":{"type":{"type":"string","const":"soundTemplateSnippet","title":"Type"},"soundTemplateRef":{"type":"string","title":"Sound template asset reference within the audioform","description":"The asset reference to the sound template to be used in the snippet.\n"},"targetReadPosition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target read position in seconds","description":"optional, and `0 second` if not specifed. Where do we start reading in the sound template."},"targetDuration":{"type":"number","title":"Target duration in seconds","description":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n"},"readPosition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Readposition"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","soundTemplateRef","targetDuration","duration","uri"],"title":"Sound Template Snippet Result"},"TTSResult":{"properties":{"type":{"type":"string","const":"tts","title":"Type"},"text":{"type":"string","title":"Text","description":"The text to be spoken.\n"},"voiceRef":{"type":"string","title":"Voice asset reference","description":"The asset reference (within the audioform) of the Voice with which to generate the asset.\n"},"anchor":{"type":"string","title":"Anchor","description":"[optional] string - specify this value to enable TTS locking. Any other audioform using a TTS with \nthe same parameters (including voice parameters) and the same anchor will sound the same.\n\nIf this is not specified the TTS in the result will still get a uniquely generated value by the \nserver so that you can lock the value.\n"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds","description":"[optional] Asks the system to match the asset to a certain time. It will ask the voice provider to speed up the voice if supported, otherwise it will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.          \n"},"targetDurationSpeedUpLimit":{"type":"number","title":"Target duration speed-up limit","default":1.2,"description":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n"},"targetDurationSlowDownLimit":{"type":"number","title":"Target duration slow-down limit","default":1.2,"description":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"},"useVoiceIntelligenceLayer":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"use Voice Intelligence Layer","description":"[optional] defaults to `false`. If set to `true` the voice will use the voice intelligence layer\nwhich is a technology that helps with getting a more natural pronunciation.\n"}},"type":"object","required":["type","text","voiceRef","anchor","duration","uri"],"title":"TTS Result"},"VoicePreset":{"type":"string","enum":["standard","expressive"],"title":"VoicePreset"}},"title":"AudioformResult2 Schemas"},"AudioformResult3":{"x-playbackGainHintDescription":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n","x-duration":"the actual duration of the element\n","x-position":"the actual position of the element in seconds and in absolute time from the beginning of the audioform\n","x-assetUri":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n","x-targetDurationLimitsDescription":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n","x-targetDuration":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n","type":"object","properties":{"Alignment":{"type":"string","enum":["start","end","middle"],"title":"Alignment"},"ArrangementResult":{"properties":{"sections":{"items":{"$ref":"#/components/schemas/AudioformResult3/properties/SectionResult"},"type":"array","title":"Sections"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"Optional. If specified the arrangement (e.g. the audioform) will have that exact duration.\n\n- If the content is smaller there will be silence at the end.\n\n- If the content is longer, it will be clipped (the fade-out will still be applied at the end).\n    \n- If not set, then the duration is the sum of the duration of all the sections  (e.g. the arrangement adapts to the duration of its content)\n"},"fadeIn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-in","description":"Expressed in seconds, optional and defaults to 0. \nThe fade-in is the duration of the fade-in effect at the beginning of the audioform.\n"},"fadeOut":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-out","description":"Expressed in seconds, optional and defaults to 0. \nThe fade-out is the duration of the fade-out effect at the end of the audioform.\n"},"usePlaybackGainHints":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"use playback gain hints","description":"Optional and defaults to false. When enabled (`true`), all assets (excepted Voice) will get a new property in the result called `playbackGainHint`. \n\nThis is a `dB` (decibel) value on the asset that helps the browser to locally rebuild the audioform from the asset. \n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip gain to get the correct playback gain if the asset is played in a clip.\n"},"position":{"type":"number","title":"Position in seconds","description":"the actual position of the element in seconds and in absolute time from the beginning of the audioform\n"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"}},"type":"object","required":["sections","position","duration"],"title":"ArrangementResult"},"AudioformResult":{"properties":{"header":{"$ref":"#/components/schemas/AudioformResult3/properties/HeaderResult"},"assets":{"additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/AudioformResult3/properties/TTSResult"},{"$ref":"#/components/schemas/AudioformResult3/properties/STSResult"},{"$ref":"#/components/schemas/AudioformResult3/properties/MediaResult"},{"$ref":"#/components/schemas/Audioform3/properties/Voice"},{"$ref":"#/components/schemas/AudioformResult3/properties/SoundTemplateResult"},{"$ref":"#/components/schemas/AudioformResult3/properties/SoundTemplateSnippetResult"},{"$ref":"#/components/schemas/AudioformResult3/properties/SoundEffectResult"}]},"type":"object","title":"Assets"},"production":{"$ref":"#/components/schemas/AudioformResult3/properties/ProductionResult"},"delivery":{"$ref":"#/components/schemas/AudioformResult3/properties/DeliveryResult"}},"type":"object","required":["header","assets","production","delivery"],"title":"AudioformResult version 3"},"ClipResult":{"properties":{"assetRef":{"type":"string","title":"Asset reference","description":"The asset reference (within the audioform) of the asset to be used in the clip.\n"},"readPosition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Read position in seconds","description":"[optional, defaults to `0s` ]: position in the source asset where the clip starts\n"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"[optional]: if not set, the clip assume the duration necessary to encompass exactly the asset (minus read position). \nIf set, it will have the specified duration (in seconds). \nIf the asset is shorter there will be silence at the end. If the asset is longer the asset will be clipped.\n"},"marginStart":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin start in seconds","description":"[optional, defaults to `0s`]: a silence before the clip. \n"},"marginEnd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin end in seconds","description":"[optional, defaults to `0s`]: a silence after the clip. \n"},"fadeIn":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-in in seconds","description":"[optional, defaults to `0`]: ramp up duration of the volume of the clip at the beginning of the clip.\n"},"fadeOut":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fade-out in seconds","description":"[optional, defaults to `0`]: ramp down duration of the volume of the clip at the end of the clip.\n"},"gain":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gain in dB","description":"[optional, defaults to `0 dB`]: a relative gain in `dB` to what the mastering engine would normally compute to make the clip louder or quieter.\n"},"blendBase":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blendbase"},"blendElement":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blendelement"},"position":{"type":"number","title":"Position in seconds","description":"the actual position of the element in seconds and in absolute time from the beginning of the audioform\n"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"}},"type":"object","required":["assetRef","position","duration"],"title":"ClipResult"},"DeliveryResult":{"properties":{"loudnessPreset":{"$ref":"#/components/schemas/AudioformResult3/properties/LoudnessPreset"},"encoderPreset":{"$ref":"#/components/schemas/AudioformResult3/properties/EncoderPreset"},"public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Public","description":"Should the delivery audiofile be publicly available or private."},"uri":{"type":"string","minLength":1,"format":"uri","title":"URI of the delivery","description":"The download URI of the delivery audio file. If it is not public you will need to be authenticated to download it."},"extension":{"type":"string","title":"Extension of the file"}},"type":"object","required":["loudnessPreset","encoderPreset","uri","extension"],"title":"Delivery Result"},"EncoderPreset":{"type":"string","enum":["mp3","wav","wav320","ogg","flac","mp3VeryLow","mp3Low","mp3Medium","mp3High","mp3VeryHigh","mp3Alexa","mp3Alexa48br","m4a"],"title":"EncoderPreset"},"HeaderResult":{"properties":{"version":{"type":"string","const":"3","title":"Version"},"audioformId":{"type":"string","format":"uuid","title":"Audioform UUID","description":"The UUID of the audioform build. It is used to identify the audioform build in the API."}},"type":"object","required":["version","audioformId"],"title":"HeaderResult"},"LayerResult":{"properties":{"clips":{"items":{"$ref":"#/components/schemas/AudioformResult3/properties/ClipResult"},"type":"array","title":"Clips"},"alignment":{"anyOf":[{"$ref":"#/components/schemas/AudioformResult3/properties/Alignment"},{"type":"null"}],"description":"The alignment is within the containing section space created between the section paddingStart and paddingEnd. \n\nThe values can be `start`, `end` or `middle`.\n\nNote that if the section duration is free (e.g. there no forcedDuration) then the alignment is equivalent to aligning relative to the longest layer (because the section adapts to the longest layer).\n\nA layer _always_ has the length of its content (e.g. the clips).\n"},"position":{"type":"number","title":"Position","description":"the actual position of the element in seconds and in absolute time from the beginning of the audioform\n"},"duration":{"type":"number","title":"Duration","description":"the actual duration of the element\n"}},"type":"object","required":["clips","position","duration"],"title":"LayerResult"},"LoudnessPreset":{"type":"string","enum":["spotify","streaming","radio","radioAdvertising","podcast","applePodcast","youtube","lowVol","podcastDynamic"],"title":"LoudnessPreset"},"MediaResult":{"properties":{"type":{"type":"string","const":"media","title":"Type"},"fileId":{"type":"string","title":"Fileid"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","fileId","duration","uri"],"title":"Media Result"},"ProductionResult":{"properties":{"arrangement":{"$ref":"#/components/schemas/AudioformResult3/properties/ArrangementResult"},"mixingPreset":{"type":"string","enum":["balanced","voiceenhanced","musicenhanced"],"title":"Mixing preset","description":"The mixing preset to be used for the production.\n\nThe values can be `balanced`, `voiceenhanced` or `musicenhanced`, which will apply the corresponding mixing preset to the production.\n\nRefer to the general documentation for more details on the mixing presets.\n"}},"type":"object","required":["arrangement","mixingPreset"],"title":"ProductionResult"},"STSResult":{"properties":{"type":{"type":"string","const":"sts","title":"Type"},"mediaRef":{"type":"string","title":"Media asset reference within the audioform","description":"The asset reference to the media file that contains the recording of the source speech\n"},"voiceRef":{"type":"string","title":"Voice asset reference within the audioform","description":"the asset reference of the Voice with which to generate the asset.\n"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds","description":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","mediaRef","voiceRef","duration","uri"],"title":"STS Result"},"SectionResult":{"properties":{"layers":{"items":{"$ref":"#/components/schemas/AudioformResult3/properties/LayerResult"},"type":"array","title":"Layers"},"soundTemplateRef":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sound template asset reference within the audioform","description":"[optional] - if specified, the asset reference of the sound template to play as background audio for the section. \n\nThe sound template adapts to the section duration.\n"},"forcedDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Forced duration in seconds","description":"[optional] \n- if specified the section will have that exact duration. \n  If the one of the layer is smaller there will be silence at the end. If a layer is longer it will be clipped, at the begining, the end or each side depending on the alignement (see layers).\n  Behaviour is not defined if `forcedDuration < paddingStart + paddingEnd`\n- If not set, then the duration is size of the longest layer, plus the padding.\n"},"paddingStart":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Padding start in seconds","description":"[optional] : defaults to `0 seconds`. This is marging before the layers, e.g. the layers will start after the padding. The sound template (if set) will play during that time.\n"},"paddingEnd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Padding end in seconds","description":"[optional] : defaults to `0 seconds`. This is the margin after the end of the longest layer. The sound template (if set) will play during that time. Note that if `forcedDuration` is set, the layers will be clipped but `paddingEnd` time will be preserved. \n"},"smartFit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Smart-fit feature enabled","description":"[optional] defaults to false.  If set to true the sound template will be edited so that it combines the begin and the end of the file in a smart way so ending of the audio always sound great and natural.\n"},"position":{"type":"number","title":"Position","description":"the actual position of the element in seconds and in absolute time from the beginning of the audioform\n"},"duration":{"type":"number","title":"Duration","description":"the actual duration of the element\n"},"soundTemplateUri":{"anyOf":[{"type":"string","minLength":1,"format":"uri"},{"type":"null"}],"title":"Sound template URI","description":"The download URI of the sound template. Will always be private and you will need to be authenticated to download it."}},"type":"object","required":["layers","position","duration"],"title":"SectionResult"},"SoundEffectResult":{"properties":{"type":{"type":"string","const":"soundEffect","title":"Type"},"soundEffectAlias":{"type":"string","title":"Sound effect alias","description":"The alias of the sound effect (unique to the sound effect). Corresponds to a sound effect in our sound effect library.\nLearn more about sound effects in the documentation.\n"},"duration":{"type":"number","title":"Duration","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","soundEffectAlias","duration","uri"],"title":"Sound Effect Result"},"SoundTemplateResult":{"properties":{"type":{"type":"string","const":"soundTemplate","title":"Type"},"soundTemplateAlias":{"type":"string","title":"Sound template alias","description":"The alias of the sound template (unique to the sound template). Corresponds to a sound template in our sound template library or in your private library.\nLearn more about sound templates in the documentation.\n"},"segment":{"type":"string","title":"Segment","description":"The segment of the sound template to play.\nGenerally, most sound templates have only one segment called \"main\". You can get information about a specific sound tempalte via the sound template API. Refer to the documentation for more details.\n"},"duration":{"type":"number","title":"Duration","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","soundTemplateAlias","segment","duration","uri"],"title":"Sound Template Result"},"SoundTemplateSnippetResult":{"properties":{"type":{"type":"string","const":"soundTemplateSnippet","title":"Type"},"soundTemplateRef":{"type":"string","title":"Sound template asset reference within the audioform","description":"The asset reference to the sound template to be used in the snippet.\n"},"targetReadPosition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target read position in seconds","description":"optional, and `0 second` if not specifed. Where do we start reading in the sound template."},"targetDuration":{"type":"number","title":"Target duration in seconds","description":"[optional]. Asks the system to match the asset to a certain time. It will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.\n"},"readPosition":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Readposition"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"}},"type":"object","required":["type","soundTemplateRef","targetDuration","duration","uri"],"title":"Sound Template Snippet Result"},"TTSResult":{"properties":{"type":{"type":"string","const":"tts","title":"Type"},"text":{"type":"string","title":"Text","description":"The text to be spoken.\n"},"voiceRef":{"type":"string","title":"Voice asset reference","description":"The asset reference (within the audioform) of the Voice with which to generate the asset.\n"},"anchor":{"type":"string","title":"Anchor","description":"[optional] string - specify this value to enable TTS locking. Any other audioform using a TTS with \nthe same parameters (including voice parameters) and the same anchor will sound the same.\n\nIf this is not specified the TTS in the result will still get a uniquely generated value by the \nserver so that you can lock the value.\n"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds","description":"[optional] Asks the system to match the asset to a certain time. It will ask the voice provider to speed up the voice if supported, otherwise it will time-stretch the result.\n\nThe system might not be able to match that exact duration but will try its best.          \n"},"targetDurationSpeedUpLimit":{"type":"number","title":"Target duration speed-up limit","default":1.2,"description":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n"},"targetDurationSlowDownLimit":{"type":"number","title":"Target duration slow-down limit","default":1.2,"description":"optional, must be `≥1` and defaults to `1.2`\n\nThis is the limits of the duration change that the system will apply to the asset to avoid it sounding unnatural.\n"},"duration":{"type":"number","title":"Duration in seconds","description":"the actual duration of the element\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the asset audio file. If it is not public you will need to be authenticated to download it.\n"},"playbackGainHint":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Playbackgainhint","description":"A value in `dB`. Optional, and only present if the property `usePlaybackGainHints` is set to `true` in the arrangement.\n\nIn order to be as close as possible to the mastering engine render of the audioform (available in the Delivery section result as the uri parameter) the browser has to play the asset with the playbackGainHint value applied.\n\nThe browser needs to combine this with the clip `gain` if the asset is played in a clip.\n"},"useVoiceIntelligenceLayer":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"use Voice Intelligence Layer","description":"[optional] defaults to `false`. If set to `true` the voice will use the voice intelligence layer\nwhich is a technology that helps with getting a more natural pronunciation.\n"},"language":{"$ref":"#/components/schemas/CreateBriefFromBodyRequest/properties/brief/properties/voices/items/anyOf/1/properties/lang/oneOf/1/items","description":"Present when `useVoiceIntelligenceLayer` is `true`. The language used for the voice intelligence layer.\n"}},"allOf":[{"type":"object","required":["type","text","voiceRef","anchor","duration","uri"]},{"if":{"properties":{"useVoiceIntelligenceLayer":{"const":true}},"required":["useVoiceIntelligenceLayer"]},"then":{"required":["language"]}}],"type":"object","title":"TTS Result"},"VoicePreset":{"type":"string","enum":["standard","expressive"],"title":"VoicePreset"}},"title":"AudioformResult3 Schemas"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"PostBatchRequestSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AudioformBatchItemInput"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"PostBatchRequestSchema"},"PostBatchSuccessResponse":{"properties":{"metadata":{"$ref":"#/components/schemas/ResponseMetadata"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","default":[]},"message":{"type":"string","title":"Message"},"data":{"$ref":"#/components/schemas/AudioformBatchData"}},"type":"object","required":["metadata","message","data"],"title":"PostBatchSuccessResponse"},"AudioformBatchData":{"properties":{"batchId":{"type":"string","format":"uuid","title":"Batchid"},"status":{"$ref":"#/components/schemas/BatchStatus"},"items":{"items":{"$ref":"#/components/schemas/AudioformBatchItemData"},"type":"array","title":"Items"}},"type":"object","required":["batchId","status","items"],"title":"AudioformBatchData"},"AudioformBatchItemData":{"properties":{"batchItemId":{"type":"string","format":"uuid","title":"Batchitemid"},"name":{"type":"string","title":"Name"},"audioform":{"anyOf":[{"$ref":"#/components/schemas/Audioform3/properties/AudioformInput"},{"$ref":"#/components/schemas/Audioform2/properties/AudioformInput"}],"title":"Audioform"},"audioformId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Audioformid"},"audioformStatus":{"$ref":"#/components/schemas/AudioformStatus"},"audioformResult":{"anyOf":[{"$ref":"#/components/schemas/AudioformResult3/properties/AudioformResult"},{"$ref":"#/components/schemas/AudioformResult2/properties/AudioformResult"},{"$ref":"#/components/schemas/AudioformError"},{"type":"null"}],"title":"Audioformresult"}},"type":"object","required":["batchItemId","name"],"title":"AudioformBatchItemData"},"AudioformBatchItemInput":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"audioform":{"additionalProperties":true,"type":"object","title":"Audioform"}},"type":"object","required":["name","audioform"],"title":"AudioformBatchItemInput"},"AudioformError":{"properties":{"message":{"type":"string","title":"Message"},"statusCode":{"type":"integer","title":"Statuscode"}},"type":"object","required":["message","statusCode"],"title":"AudioformError"},"AudioformStatus":{"type":"string","enum":["queued","in_progress","success","error"],"title":"AudioformStatus"},"BatchStatus":{"type":"string","enum":["submitted","complete"],"title":"BatchStatus"},"audioformVersion":{"type":"string","enum":["0.0.1","1","2"],"description":"The version of the audioform to use in the returned audioforms.\nDefaults to `\"0.0.1\"` for backwards compatibility. We recommend \nusing lastest version to take advantage of latest features.\n","default":"0.0.1"},"CreateBriefFromBodyRequest":{"type":"object","properties":{"audioformVersion":{"$ref":"#/components/schemas/audioformVersion"},"brief":{"type":"object","additionalProperties":false,"properties":{"script":{"oneOf":[{"title":"AI Script Writer","additionalProperties":false,"description":"Use when you want AudioStack to write your script with AI using a product description.","properties":{"productName":{"title":"Product name","type":"string","description":"The name of the product you are advertising.\n","example":"AudioStack"},"productDescription":{"title":"Product description","type":"string","description":"Your product description must be a meaningful summary of your product.\n\nDo: \n  - Describe your product including things like why it is great, who it \n  is for, and its unique features. \n  - Make sure your description is at least 15-20 words long.\n\nDon't:\n  - Add meaningless text.\n  - Only paste URLs.\n  - Use special characters or emojis.\n  - Write in multiple languages.\n","example":"Our AI-driven production suite for agencies, publishers, AdTech and brands removes every blocker in the traditional production process - so you can create content 10 times faster for a tenth of the effort."},"adLength":{"default":30,"oneOf":[{"type":"null","title":"Variable length","description":"Set to `null` to allow the length of ad to fit to the script and voice speed.\n"},{"enum":[10,15,20,30,40],"type":"integer","title":"Fixed length","description":"Set value to force the ad to fit to the desired length.\nThis will adjust the script length (if being written by AI) and voice speed.\n"}]},"lang":{"$ref":"#/components/schemas/CreateStoryFromBodyRequest/properties/story/properties/textSettings/properties/language"},"callToAction":{"default":"","title":"Call to action","type":"string","description":"Set a call to action for the ad to be included in the ad.\n\nDon't:\n  - Use this field like a prompt.\n  - Include instructions like \"Make sure to include\".\n","example":"To see AudioStack in action, visit try.audiostack.ai"},"targetAudience":{"default":"","title":"Target audience","type":"string","description":"Define the target audience for the ad.\n\nDon't:\n  - Use this field like a prompt.\n  - Include instructions like \"Make sure to target\".\n","example":"Audio professionals"},"toneOfScript":{"default":"","title":"Tone of script","type":"string","description":"Define the desired tone of the ad.\n\nDon't:\n  - Use this field like a prompt.\n  - Include instructions like \"Make the ad silly\".\n","example":"Futuristic and Inspiring"},"thirdPerson":{"type":"boolean","default":true,"title":"Third person indicator","description":"Set to `true` to write the ad in the third person .\n","example":true}},"required":["productName","productDescription"],"type":"object"},{"additionalProperties":false,"description":"Handles cases where a fully written script is provided.","properties":{"productName":{"title":"Product name","type":"string","description":"The name of the product you are advertising.\n","example":"AudioStack"},"scriptText":{"title":"Script text","type":"string","description":"Script text to be used in the ad.\n","example":"Why wait for creativity to catch up? Our AI makes production ten times faster with minimal effort. Agencies and brands, embrace speed! Start your evolution now."},"adLength":{"default":30,"oneOf":[{"type":"null","title":"Variable length","description":"Set to `null` to allow the length of ad to fit to the script and voice speed.\n"},{"exclusiveMinimum":0,"maximum":600,"type":"number","title":"Fixed length","description":"Set value to force the ad to fit to the desired length.\nThis will adjust the voice speed as necessary overriding any speed value.\n"}]},"lang":{"$ref":"#/components/schemas/CreateStoryFromBodyRequest/properties/story/properties/textSettings/properties/language"}},"required":["productName","scriptText"],"title":"Use your own script","type":"object"}]},"voices":{"items":{"anyOf":[{"title":"Voice","type":"object","additionalProperties":false,"properties":{"alias":{"title":"Alias","type":"string","example":"isaac"},"speed":{"oneOf":[{"type":"null","title":"Auto-recommended speed","description":"Set to `null` or omit to use the recommended speed for the voice."},{"maximum":1.2,"minimum":0.8,"type":"number","title":"User-defined speed","description":"Set a value to guide the speed for the voice. \nNote that when `script.adLength` is set, the speed will \nbe adjusted to fit the target ad length but this value \nwill still be used to adjust the script length.\n"}],"default":null,"title":"Speed"},"voicePreset":{"default":"standard","type":"string","title":"Voice Preset","enum":["standard","expressive"]}},"required":["alias"]},{"additionalProperties":false,"properties":{"accent":{"oneOf":[{"type":"null","title":"Any accent"},{"items":{"type":"string","title":"AccentsEnum","enum":["in","indian","jp","japanese","us","american","cn","chinese","ca","canadian","tw","taiwanese","hindi","au","australian","rs","serbian","nl","dutch","de","standard","gb","british","shaanxi","guangxi","sk","slovak","no","norwegian","lb","lebanese","id","indonesian","vn","vietnamese","german","ph","filipino","ba","bosnian and herzegovinian","tn","tunisian","za","south african","pa","panamanian","it","italian","br","brazilian","my","malaysian","ro","romanian","ua","ukrainian","pl","polish","ee","estonian","af","afghan","pt","portuguese","ir","modern standard","fr","french","multilingual","hk","hong kong","mx","mexican","eg","egyptian","sichuan","ie","irish","es","spanish","se","swedish","ja","uy","uruguayan","al","albanian","ch","swiss","ge","georgian","gt","guatemalan","pr","puerto rican","ru","russian","scottish","tr","turkish","th","thai","de-standard","bg","bulgarian","dk","danish","kr","south korean","la","laotian","ae","emirati","nz","new zealand","pk","pakistani","be","belgian","gr","greek","om","omani","shandong","mt","maltese","sv","salvadoran","uk","cl","chilean","il","israeli","np","nepalese","mn","mongolian","sg","singaporean","lk","sri lankan","ve","venezuelan","xa","arabic","kh","cambodian","hu","hungarian","korean","ke","kenyan","co","colombian","ar","argentinian","am","armenian","hi","at","austrian","ye","yemeni","ng","nigerian","hn","honduran","mm","burmese","ec","ecuadorian","iranian","parisian","is","icelandic","sa","saudi arabian","liaoning","cz","czech","saudi","tz","tanzanian","latin american","fi","finnish","lv","latvian","lt","lithuanian","ma","moroccan","et","ethiopian","mk","macedonian","do","dominican","ly","libyan","kw","kuwaiti","so","somali","bh","bahraini","si","slovenian","cr","costa rican","kz","kazakhstani","uz","uzbekistani","dz","algerian","bo","bolivian","az","azerbaijani","gq","equatorial guinean","ni","nicaraguan","iq","iraqi","py","paraguayan","qa","qatari","cu","cuban","sy","syrian","hr","croatian","jo","jordanian","gulf","henan","pe","peruvian","levantine","ja_jp"]},"title":"Specify accent(s)","description":"Specify the accent(s) you want to use for the voice.\nYou can specify multiple accents by adding them to the array.\n","type":"array"}],"default":null,"title":"Accent"},"gender":{"oneOf":[{"type":"null","title":"Any gender"},{"items":{"$ref":"#/components/schemas/VoiceResponse/properties/gender"},"title":"Specify gender(s)","description":"Specify the gender(s) you want to use for the voice.\nYou can specify multiple genders by adding them to the array.\n","type":"array"}],"default":null,"title":"Gender"},"lang":{"oneOf":[{"type":"null","title":"Any language(s)"},{"items":{"type":"string","title":"Allowed languages","description":"These are the languages which AudioStack's voice library can support.","enum":["af","am","ar","az","be","bg","bn","bs","ca","cmn","cs","cy","da","de","el","en","es","et","eu","fa","fi","fil","fr","ga","gd","gl","gu","he","hi","hr","hu","hy","id","is","it","ja","jv","ka","kk","km","kn","ko","lo","lt","lv","mi","mk","ml","mn","mr","ms","mt","my","nb","ne","nl","no","pa","pl","ps","pt","ro","ru","si","sk","sl","so","sq","sr","su","sv","sw","ta","te","th","tl","tr","uk","ur","uz","vi","yue","zh","zho","zu"]},"title":"Specify language(s)","description":"Specify the language(s) you want to use for the voice.\nYou can specify multiple languages by adding them to the array.\n","type":"array"}],"default":null,"title":"Language"},"voicePreset":{"$ref":"#/components/schemas/CreateBriefFromBodyRequest/properties/brief/properties/voices/items/anyOf/0/properties/voicePreset","default":"standard"},"speed":{"$ref":"#/components/schemas/CreateBriefFromBodyRequest/properties/brief/properties/voices/items/anyOf/0/properties/speed"},"tone":{"oneOf":[{"type":"null","default":null,"title":"Any tone"},{"items":{"$ref":"#/components/schemas/VoiceResponse/properties/tags/items"},"title":"Specify tone(s)","description":"Specify the tone(s) you want to use for the voice.\nYou can specify multiple tones by adding them to the array.\n","type":"array"}],"title":"Tone"}},"title":"VoiceRecommender","type":"object"}]},"minItems":1,"title":"Voices","type":"array"},"sounds":{"additionalProperties":false,"properties":{"soundDesign":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"alias":{"oneOf":[{"type":"null","title":"No sound design"},{"type":"string","title":"Select from the sound library","example":"swords_of_omens"}],"default":null,"title":"Alias"},"useSmartFit":{"default":false,"title":"Use smart fit","description":"Smart fit will automatically cutdown the sound design to fit the ad length.\n","type":"boolean"}},"title":"Pick your own sound design","type":"object"},{"additionalProperties":false,"properties":{"mood":{"oneOf":[{"type":"null","title":"Any mood"},{"items":{"type":"string","title":"Allowed moods","description":"Moods are used to guide sound design recommendation from AudioStack's sound library.","enum":["Chilled","Sad","Dark","Calm","Epic","Scary","Sexy","Uplifting","Aggressive","Happy","Energetic","Ethereal","Romantic"]},"title":"Specify mood(s)","description":"Specify the moods(s) you want to use for the music.\nYou can specify multiple moods by adding them to the array.\n","type":"array"}],"default":null,"title":"Mood"},"useSmartFit":{"default":false,"title":"Use smart fit","description":"Smart fit will automatically cutdown the sound design to fit the ad length.\n","type":"boolean"}},"title":"Get a recommended sound design","type":"object"}]},"type":"array","minItems":1}},"title":"Sound","description":"Define how you want the music in your ad to sound.\n","type":"object"},"production":{"description":"Define how you want your ad to be mixed and mastered.\n","properties":{"mixingPreset":{"description":"Controls the relative loudness of the voice and music. This field was called `masteringPreset` and that will be accepted for backwards compatibility.\n","default":"balanced","type":"string","title":"MasteringPreset","enum":["balanced","voiceenhanced","musicenhanced"]}},"title":"Production settings","type":"object"},"delivery":{"description":"Define how you want your audio to be delivered.\n","properties":{"encoderPreset":{"description":"Controls the output format of the audio.\n","default":"mp3","type":"string","title":"EncoderPreset","enum":["mp3","wav","wav320","ogg","flac","mp3VeryLow","mp3Low","mp3Medium","mp3High","mp3VeryHigh","mp3Alexa","mp3Alexa48br","m4a"]},"loudnessPreset":{"description":"Optimises the loudness of your audio for different platforms.\n","default":"streaming","type":"string","title":"LoudnessPreset","enum":["streaming","radio","radioAdvertising","podcast","applePodcast","youtube","lowVol","podcastDynamic"]},"public":{"default":true,"title":"Set whether the audio is public (shareable) or private (not shareable)","type":"boolean"}},"title":"Delivery settings","type":"object"}},"required":["script"]},"numAds":{"type":"integer","minimum":1,"maximum":5,"description":"Number of audio ads to generate","default":3}},"title":"Submit a new brief","required":["brief"],"description":"Creating ad from a new brief","additionalProperties":false},"CreateBriefFromFileRequest":{"type":"object","properties":{"audioformVersion":{"$ref":"#/components/schemas/audioformVersion"},"fileId":{"type":"string","format":"uuid","description":"A file ID of a valid uploaded brief.","example":"123e4567-e89b-12d3-a456-426614174000"},"numAds":{"type":"integer","minimum":1,"maximum":5,"description":"Number of audio ads to generate.","default":3}},"required":["fileId"],"description":"Creating ad from stored brief file","additionalProperties":false,"title":"Use an already uploaded brief"},"ScriptDetails":{"type":"object","properties":{"tone":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"Tone descriptors for the script","example":["informative"]},{"type":null,"description":"No tone information available for the script."}]},"messages":{"type":"array","items":{"type":"string"},"default":[],"description":"Explanatory messages about the script."}}},"VoiceDetails":{"type":"object","properties":{"voice_reference":{"type":"string","description":"Reference to the voice asset.","example":"voice_for_ad"},"tone":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"Descriptions of the tone with which the voice speaks.","example":["informative","friendly","engaging"]},{"type":null,"description":"No tone information available for the voice."}]},"messages":{"type":"array","items":{"type":"string"},"default":[],"example":[],"description":"Explanatory messages about the voice."}},"required":["voice_reference"]},"AdDetails":{"title":"Ad details","description":"Details about the generated ad.","type":"object","properties":{"script":{"$ref":"#/components/schemas/ScriptDetails"},"voices":{"type":"array","items":{"$ref":"#/components/schemas/VoiceDetails"},"description":"Explanations for each voice used in the ad."}}},"ResponseData":{"type":"object","properties":{"statusCode":{"type":"integer","title":"Status code","description":"Status of the rendering of the audioform (200 - completed, 202 - in progress)","example":202},"audioformId":{"type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000"},"audioform":{"anyOf":[{"$ref":"#/components/schemas/Audioform3/properties/AudioformInput"},{"$ref":"#/components/schemas/Audioform2/properties/AudioformInput"},{"$ref":"#/components/schemas/Audioform1/properties/AudioformInput"}],"title":"Audioform"},"details":{"oneOf":[{"$ref":"#/components/schemas/AdDetails"},{"type":null,"description":"No details available for the ad."}],"description":"Details for the script and voices used in the ad."}},"required":["statusCode","audioformId","audioform","details"],"additionalProperties":false},"CreateBriefResponse":{"allOf":[{"$ref":"#/components/schemas/GetStoryResponse/allOf/0"},{"type":"object","properties":{"data":{"type":"array","minimum":1,"maximum":5,"items":{"$ref":"#/components/schemas/ResponseData"}}},"required":["data"]}],"additionalProperties":false,"title":"Create Brief Response"},"CreateBriefUnprocessableEntityResponse":{"allOf":[{"type":"object","properties":{"meta":{"$ref":"#/components/schemas/GetStoryResponse/allOf/0/properties/meta"},"message":{"type":"string","description":"A message describing the overall error"},"warnings":{"$ref":"#/components/schemas/GetStoryResponse/allOf/0/properties/warnings"},"errors":{"type":"array","items":{"type":"string"},"default":[],"title":"Response errors"}},"required":["meta","message","warnings","errors"]},{"example":{"meta":{"version":"123","requestId":"165e5b01-43b3-45df-b992-75af149f3c3d","creditsUsed":0,"creditsRemaining":999},"message":"Failed to process brief","warnings":[],"errors":["Language of product description could not be detected due to unclear input. Please try to select the language manually."]}}]},"CreateStoryFromBodyRequest":{"type":"object","properties":{"story":{"title":"Story","description":"A story is a collection of chapters that are played sequentially.\nEach chapter is converted to an `audioform` for audio production.\n\nA story is made up of:\n\n- A title\n- A list of voices - your preselected cast of characters\n- A list of sounds - your preselected music and sound effects for your creation\n- A list of chapters - your story is divided into one or more chapters.\n","type":"object","additionalProperties":false,"properties":{"title":{"type":"string","description":"The title of the content you are creating.\n","example":"AudioStack Daily Product Bulletin"},"textSettings":{"additionalProperties":false,"properties":{"language":{"oneOf":[{"type":"null","title":"Autodetect script language","description":"Set to `null` to enable automatic detection of language.\nAutodetction is more reliable with longer scripts.\nYou may get an error if the langauge cannot be confidently detected.\nIn that case, manually specify the language.\n"},{"$ref":"#/components/schemas/CreateBriefFromBodyRequest/properties/brief/properties/voices/items/anyOf/1/properties/lang/oneOf/1/items"}],"default":null,"description":"Set the language of the script.\nWhen omitted or set to null, automated language detection will be used.\n"},"useVoiceIntelligenceLayer":{"default":false,"title":"Use Voice Intelligence Layer","type":"boolean","description":"Define whether to use the voice intelligence layer in the story.\n"}},"title":"Story text settings"},"voices":{"items":{"anyOf":[{"title":"Voice","type":"object","additionalProperties":false,"properties":{"alias":{"title":"Alias","type":"string","example":"isaac"},"speakerIdentifier":{"title":"Speaker","type":"string","example":"narrator","description":"The speakerIdentifier is used to select the voice to read specific text in the `narratives`.\n"},"speed":{"$ref":"#/components/schemas/CreateBriefFromBodyRequest/properties/brief/properties/voices/items/anyOf/0/properties/speed","description":"Set a value to guide the speed for the voice or leave as `null` to use the default speed. \n"},"voicePreset":{"$ref":"#/components/schemas/CreateBriefFromBodyRequest/properties/brief/properties/voices/items/anyOf/0/properties/voicePreset","default":"standard","description":"The voicePreset is used to select the voice to use for the story. The default preset is `standard`. \nYou can use the `expressive` preset to get more emotion in the voice but it may be less stable.\n"}},"required":["alias","speakerIdentifier"]}]},"minItems":1,"title":"Voices","type":"array"},"sounds":{"additionalProperties":false,"properties":{"soundDesigns":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"soundDesignIdentifier":{"title":"Sound Design Identifier","type":"string","example":"background_music"},"type":{"type":"string","enum":["asset"]},"alias":{"title":"Alias","type":"string","example":"swords_of_omens"}},"title":"Sound Design from AudioStack Library","type":"object"},{"additionalProperties":false,"properties":{"soundDesignIdentifier":{"title":"Sound Design Identifier","type":"string","example":"background_music"},"type":{"type":"string","enum":["file"]},"fileId":{"title":"File ID","type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000"}},"title":"Sound Design from Uploaded File","type":"object"}]},"type":"array","minItems":1},"soundEffects":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"soundEffectIdentifier":{"title":"Sound Effect Identifier","type":"string","example":"background_music"},"type":{"type":"string","enum":["asset"]},"alias":{"title":"Alias","type":"string","example":"explosion"}},"title":"Sound Effect from AudioStack Library","type":"object"},{"additionalProperties":false,"properties":{"soundEffectIdentifier":{"title":"Sound Effect Identifier","type":"string","example":"explosion"},"type":{"type":"string","enum":["file"]},"fileId":{"title":"File ID","type":"string","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000"}},"title":"Sound Effect from Uploaded File","type":"object"},{"additionalProperties":false,"properties":{"type":{"type":"string","enum":["recommender"]},"effectType":{"type":"string","title":"Supported values for sound effect type","description":"Types of sound effects available from the AudioStack sound effect library.\n\noneShot: A short, event-driven sound effect.\n","enum":["oneShot"]}},"title":"Sound Effect Recommender","description":"Selects and places sound effects from the AudioStack library into your story.\n","type":"object"}]},"type":"array","minItems":1}},"title":"Sound"},"production":{"$ref":"#/components/schemas/CreateBriefFromBodyRequest/properties/brief/properties/production"},"delivery":{"$ref":"#/components/schemas/CreateBriefFromBodyRequest/properties/brief/properties/delivery"},"chapters":{"items":{"type":"object","title":"Chapter","description":"A chapter is a collection of narrative blocks that are played sequentially.\nEach narrative block is converted to an `audioform` for audio production.\n","additionalProperties":false,"properties":{"title":{"type":"string","description":"The title of the chapter.\n"},"narratives":{"items":{"type":"object","title":"Narrative","description":"Narrative blocks are a helpful way aligning the foreground\nand background speech/music/effects to create the desired\ncreative atmosphere.\n\nA narrative block is made up of:\n- A foreground layer - the prominent layer in the narrative.\n- Two background layers - to support a rich layering of atmosphere\nand music.\n\nLayers consist of sequentially arranged pieces of text-to-speech,\nsound designs and sound effects. \n\nThe duration of narrative is determined by its foreground layer.\nThe foreground layer is the sum of the duration of the items in the layer.\nThe background layers start at the same time as the start of the\nforeground layer and run for the duration of the foreground layer.\n","additionalProperties":false,"properties":{"foreground":{"type":"array","items":{"anyOf":[{"title":"Text-to-speech","type":"object","additionalProperties":false,"properties":{"text":{"type":"string","description":"The text to be spoken.\n"},"speakerIdentifier":{"type":"string","description":"The speaker identifier of the voice to use to read the text.\n"}}},{"title":"Sound design","type":"object","additionalProperties":false,"properties":{"soundDesignIdentifier":{"type":"string","description":"The sound design identifier of the sound design to use.\n","example":"background_music"},"duration":{"type":"number","description":"The duration of the sound design in seconds.\n","example":10},"useSmartFit":{"type":"boolean","description":"Whether to use smart fit for the sound design. Only applicable\nif the sound design is from the AudioStack library.\n","example":true}}},{"title":"Sound effect","type":"object","additionalProperties":false,"properties":{"soundEffectIdentifier":{"type":"string","description":"The sound effect identifier of the sound effect to use.\n","example":"explosion"}}}]},"minItems":1,"title":"Foreground layer","description":"The foreground layer is the prominent layer in the narrative.\nThe items in this layer are arranged sequentially and the\nduration of the foreground layer is the sum of the duration\nof the items in this layer.\n"},"background1":{"type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/CreateStoryFromBodyRequest/properties/story/properties/chapters/items/properties/narratives/items/properties/foreground/items/anyOf/0"},{"$ref":"#/components/schemas/CreateStoryFromBodyRequest/properties/story/properties/chapters/items/properties/narratives/items/properties/foreground/items/anyOf/1"},{"$ref":"#/components/schemas/CreateStoryFromBodyRequest/properties/story/properties/chapters/items/properties/narratives/items/properties/foreground/items/anyOf/2"}]},"minItems":1,"title":"Background layer","description":"Each background layer starts at the same time as the start of\nthe Foreground layer and runs for the duration of the Foreground layer\n"},"background2":{"$ref":"#/components/schemas/CreateStoryFromBodyRequest/properties/story/properties/chapters/items/properties/narratives/items/properties/background1"}},"required":["foreground"]},"minItems":1,"title":"Narrative blocks","type":"array"}},"required":["title","narrative"]},"minItems":1,"title":"Chapters","type":"array"}},"required":["chapters","title"]}},"title":"Submit a new story","required":["story"],"description":"A request to create a new story for longform audio content creation. The story object defines the narrative, voices, sounds, and delivery preferences for the audio content to be generated.","additionalProperties":false},"CreateStoryResponse":{"allOf":[{"$ref":"#/components/schemas/GetStoryResponse/allOf/0"},{"type":"object","properties":{"data":{"type":"object","properties":{"storyId":{"title":"Story ID","type":"string","format":"uuid","example":"0d694352-266c-4a62-b09f-4e910657af11"}},"required":["storyId"],"additionalProperties":false}},"required":["data"]},{"example":{"meta":{"version":"123","requestId":"165e5b01-43b3-45df-b992-75af149f3c3d","creditsUsed":0,"creditsRemaining":999},"message":"Story build request accepted and queued for processing","warnings":[],"data":{"storyId":"0d694352-266c-4a62-b09f-4e910657af11"}}}],"additionalProperties":false,"title":"Create Story Response"},"StoryAcceptedResponse":{"type":"object","description":"Response when the story creation request is still being processed (202). Includes storyId for polling; may include a status message.","allOf":[{"$ref":"#/components/schemas/GetStoryResponse/allOf/0"},{"type":"object","properties":{"message":{"type":"string","description":"Optional message describing the current status (e.g. still processing)."},"data":{"type":"object","properties":{"storyId":{"type":"string","format":"uuid","title":"Story ID","description":"The unique identifier of the story creation request to poll."}},"required":["storyId"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}],"title":"Story Accepted Response"},"CreateStoryUnprocessableEntityResponse":{"allOf":[{"$ref":"#/components/schemas/CreateBriefUnprocessableEntityResponse/allOf/0"},{"example":{"meta":{"version":"123","requestId":"165e5b01-43b3-45df-b992-75af149f3c3d","creditsUsed":0,"creditsRemaining":999},"message":"Failed to process story","warnings":[],"errors":["Invalid value for field `story.sounds.soundEffects.0.file.fileId`: Value error, Sound effect file validation failed: 404 ","Invalid value for field `story.title`: Field required","Invalid value for field `story.voices.0.alias`: Value error, Voice alias validation failed: voice not_found not found","Invalid value for field `story.voices.0.speed`: Input should be greater than or equal to 0.8","Invalid value for field `story.voices.0.voicePreset`: Input should be 'standard' or 'expressive'","Invalid value for field `story.sounds.soundDesigns.0.asset.alias`: Value error, Sound template alias validation failed: The requested sound template was not found.","Invalid value for field `story.delivery.loudnessPreset`: Input should be 'spotify', 'streaming', 'radio', 'radioAdvertising', 'podcast', 'applePodcast', 'youtube', 'lowVol' or 'podcastDynamic'","Invalid value for field `story.delivery.encoderPreset`: Input should be 'mp3', 'wav', 'wav320', 'ogg', 'flac', 'mp3VeryLow', 'mp3Low', 'mp3Medium', 'mp3High', 'mp3VeryHigh', 'mp3Alexa', 'mp3Alexa48br' or 'm4a'","Invalid value for field `story.bad_title_key`: Extra inputs are not permitted","Invalid value for field `story`: Value error, Speaker identifier undefined used in narrative but not found in story voices","Invalid value for field `story`: Value error, Sound design identifier music_undefined used in narrative but not found in story sounds"]}}]},"GetStoryResponse":{"allOf":[{"type":"object","properties":{"meta":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","title":"Request ID"},"version":{"type":"string","enum":["123"],"default":"123","deprecated":true},"creditsUsed":{"type":"number","title":"Credits used","default":0,"deprecated":true},"creditsRemaining":{"type":"number","title":"Credits remaining","default":0,"deprecated":true}}},"warnings":{"type":"array","items":{"type":"string"},"default":[],"title":"Response warnings"}},"required":["meta","warnings"]},{"type":"object","properties":{"message":{"type":"string","description":"Optional. When the job completed with an error, details the problem."},"data":{"type":"object","properties":{"storyId":{"title":"Story ID","type":"string","format":"uuid","example":"0d694352-266c-4a62-b09f-4e910657af11","description":"The unique identifier of the story creation request."},"storyResult":{"title":"Story Result","description":"The final story result (same shape as the Story type). Present when the job produced a story; may be absent or partial on failure.","$ref":"#/components/schemas/CreateStoryFromBodyRequest/properties/story"},"audioforms":{"title":"Audioforms","type":"array","description":"List of generated audioforms when the job completed successfully. Each item is an AudioformResult. Optional; absent or partial on failure.","items":{"anyOf":[{"$ref":"#/components/schemas/AudioformResult3/properties/AudioformResult"}]}}},"required":["storyId"],"additionalProperties":false}},"required":["data"]},{"example":{"meta":{"version":"123","requestId":"165e5b01-43b3-45df-b992-75af149f3c3d","creditsUsed":10,"creditsRemaining":990},"message":"Story build completed successfully","warnings":[],"data":{"storyId":"0d694352-266c-4a62-b09f-4e910657af11","storyResult":{"title":"My Podcast","chapters":[],"voices":[],"sounds":{},"production":{},"delivery":{}},"audioforms":[]}}}],"additionalProperties":false,"title":"Get Story Response"},"AccessControl":{"type":"string","enum":["public","private"],"title":"AccessControl"},"CopyFilePayload":{"properties":{"fileId":{"type":"string","format":"uuid","title":"Fileid"},"currentFolderId":{"type":"string","format":"uuid","title":"Currentfolderid"},"newFolderId":{"type":"string","format":"uuid","title":"Newfolderid"}},"type":"object","required":["fileId","currentFolderId","newFolderId"],"title":"CopyFilePayload"},"CreateFolderPayload":{"properties":{"folderName":{"type":"string","title":"Foldername"},"parentFolderId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parentfolderid"}},"type":"object","required":["folderName"],"title":"CreateFolderPayload"},"CreateProjectPayload":{"properties":{"projectName":{"type":"string","title":"Projectname"}},"type":"object","required":["projectName"],"title":"CreateProjectPayload"},"CreateUploadUrlResponse":{"properties":{"uploadUrl":{"type":"string","title":"Uploadurl"},"fileName":{"type":"string","title":"Filename"},"fileId":{"type":"string","format":"uuid","title":"Fileid"},"folderId":{"type":"string","format":"uuid","title":"Folderid"},"mimeType":{"type":"string","title":"Mimetype"}},"type":"object","required":["uploadUrl","fileName","fileId","folderId","mimeType"],"title":"CreateUploadUrlResponse"},"DeleteFileResponse":{"properties":{"message":{"type":"string","title":"Message"},"fileId":{"type":"string","format":"uuid","title":"Fileid"},"folderId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folderid"}},"type":"object","required":["message","fileId"],"title":"DeleteFileResponse"},"ErrorDetail":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"ErrorDetail"},"FileCategoriesResponse":{"properties":{"fileTypes":{"items":{"$ref":"#/components/schemas/FileType"},"type":"array","title":"Filetypes"}},"type":"object","required":["fileTypes"],"title":"FileCategoriesResponse"},"FileCategory":{"properties":{"categoryId":{"type":"string","format":"uuid","title":"Categoryid"},"name":{"type":"string","title":"Name"}},"type":"object","required":["categoryId","name"],"title":"FileCategory"},"FileCategoryCount":{"properties":{"categoryId":{"type":"string","format":"uuid","title":"Categoryid"},"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["categoryId","name","count"],"title":"FileCategoryCount"},"FileCategoryResponse":{"properties":{"fileCategoryId":{"type":"string","format":"uuid","title":"Filecategoryid"},"name":{"type":"string","title":"Name"}},"type":"object","required":["fileCategoryId","name"],"title":"FileCategoryResponse"},"FileResponseV2":{"properties":{"fileId":{"type":"string","format":"uuid","title":"Fileid"},"fileName":{"type":"string","title":"Filename"},"folderId":{"type":"string","format":"uuid","title":"Folderid"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"createdBy":{"type":"string","title":"Createdby"},"updatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updatedat"},"updatedBy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updatedby"},"fileType":{"$ref":"#/components/schemas/FileTypeResponse"},"fileCategory":{"anyOf":[{"$ref":"#/components/schemas/FileCategoryResponse"},{"type":"null"}]},"size":{"type":"integer","title":"Size"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"status":{"type":"string","title":"Status"},"accessControl":{"$ref":"#/components/schemas/AccessControl"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"}},"type":"object","required":["fileId","fileName","folderId","createdBy","fileType","size","createdAt","status","accessControl"],"title":"FileResponseV2"},"FileType":{"properties":{"fileTypeId":{"type":"string","format":"uuid","title":"Filetypeid"},"name":{"type":"string","title":"Name"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"fileCategories":{"items":{"$ref":"#/components/schemas/FileCategory"},"type":"array","title":"Filecategories"}},"type":"object","required":["fileTypeId","name","createdAt","fileCategories"],"title":"FileType"},"FileTypeCount":{"properties":{"fileTypeId":{"type":"string","format":"uuid","title":"Filetypeid"},"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count"},"fileCategories":{"items":{"$ref":"#/components/schemas/FileCategoryCount"},"type":"array","title":"Filecategories"}},"type":"object","required":["fileTypeId","name","count","fileCategories"],"title":"FileTypeCount"},"FileTypeResponse":{"properties":{"fileTypeId":{"type":"string","format":"uuid","title":"Filetypeid"},"name":{"type":"string","title":"Name"}},"type":"object","required":["fileTypeId","name"],"title":"FileTypeResponse"},"FolderResponseV2":{"properties":{"folderId":{"type":"string","format":"uuid","title":"Folderid"},"folderName":{"type":"string","title":"Foldername"},"parentFolderId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parentfolderid"},"createdBy":{"type":"string","title":"Createdby"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updatedat"},"updatedBy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updatedby"}},"type":"object","required":["folderId","folderName","createdBy","createdAt"],"title":"FolderResponseV2"},"GenerateUploadUrlPayload":{"properties":{"fileName":{"type":"string","title":"Filename"},"folderId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folderid"}},"type":"object","required":["fileName"],"title":"GenerateUploadUrlPayload"},"ListFolderResponseV2":{"properties":{"folders":{"items":{"$ref":"#/components/schemas/FolderResponseV2"},"type":"array","title":"Folders"},"files":{"items":{"$ref":"#/components/schemas/FileResponseV2"},"type":"array","title":"Files"},"currentPathChain":{"anyOf":[{"items":{"$ref":"#/components/schemas/FolderResponseV2"},"type":"array"},{"type":"null"}],"title":"Currentpathchain"}},"type":"object","required":["folders","files"],"title":"ListFolderResponseV2"},"ModifyFolderPayload":{"properties":{"folderName":{"type":"string","title":"Foldername"}},"type":"object","required":["folderName"],"title":"ModifyFolderPayload"},"PaginatedResponse_ListFolderResponseV2_":{"properties":{"data":{"$ref":"#/components/schemas/ListFolderResponseV2"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[ListFolderResponseV2]"},"PaginatedResponse_list_FileResponseV2__":{"properties":{"data":{"items":{"$ref":"#/components/schemas/FileResponseV2"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[list[FileResponseV2]]"},"Pagination":{"properties":{"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["limit","offset"],"title":"Pagination"},"PatchFilePayload":{"properties":{"fileName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename"},"categoryId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Categoryid"},"categoryName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Categoryname"},"accessControl":{"anyOf":[{"$ref":"#/components/schemas/AccessControl"},{"type":"null"}]}},"type":"object","title":"PatchFilePayload"},"AnalyticsUsageResponse":{"type":"object","properties":{"metadata":{"type":"object","properties":{"request_id":{"type":"string","description":"Unique identifier for the request"},"version":{"type":"string","description":"API version"},"credit_used":{"type":"number","description":"Credits used for this request"},"credits_remaining":{"type":"number","description":"Credits remaining"}}},"warnings":{"type":"array","items":{"type":"string"},"default":[]},"message":{"type":"string","description":"Success message","example":"Events usage report generated successfully."},"data":{"type":"object","properties":{"totalUsage":{"type":"object","properties":{"productionSecondsCreated":{"type":"number","description":"Total seconds of production audio created in the date range"},"audioformsCreated":{"type":"integer","description":"Total number of audioforms created in the date range"}}}}}},"required":["metadata","warnings","message","data"]},"AnalyticsValidationError":{"type":"object","properties":{"detail":{"type":"object","properties":{"error":{"type":"string","description":"Error type","example":"Validation error occurred"},"message":{"type":"string","description":"Detailed validation error message","examples":{"invalidDate":"date_to: Input should be a valid datetime or date, day value is outside expected range","dateOrder":"date_to: Value error, date_to must be after date_from"}}}}},"required":["detail"]},"SortValues":{"type":"string","enum":["alias"],"description":"Field to sort results by. If omitted, results are sorted by AudioStack's internal priority."},"PostVoicesQueryRequest":{"type":"object","description":"Request body for voice query endpoint.","properties":{"query":{"type":"string","default":"","example":"serious","title":"Search query","description":"Free text search query passed to the search engine. This is used to search for voices with some fuzzy matching.\n"},"filters":{"type":"array","title":"Filters","description":"Filters to apply. Each item is an object with one operator key (e.g. \"in\")\nand a value object with one filter field and its values.\n","items":{"type":"object","title":"Filter","description":"Filter object.","properties":{"in":{"oneOf":[{"type":"object","title":"Accent filter","required":["accent"],"additionalProperties":false,"properties":{"accent":{"type":"array","items":{"$ref":"#/components/schemas/VoiceResponse/properties/accent"},"title":"Specify accent filter condition","description":"Specify the accent filter condition. You can specify multiple accepted values by adding them to the array.\n"}}},{"type":"object","title":"Age bracket filter","required":["ageBracket"],"additionalProperties":false,"properties":{"ageBracket":{"type":"array","items":{"$ref":"#/components/schemas/VoiceResponse/properties/ageBracket"},"title":"Specify age bracket filter condition","description":"Specify the age bracket filter condition. You can specify multiple accepted values by adding them to the array.\n"}}},{"type":"object","title":"Alias filter","required":["alias"],"additionalProperties":false,"properties":{"alias":{"type":"array","items":{"type":"string"},"title":"Specify alias filter condition","description":"Specify the alias filter condition. You can specify multiple accepted values by adding them to the array.\n"}}},{"type":"object","title":"Gender filter","required":["gender"],"additionalProperties":false,"properties":{"gender":{"type":"array","items":{"$ref":"#/components/schemas/VoiceResponse/properties/gender"},"title":"Specify gender filter condition","description":"Specify the gender filter condition. You can specify multiple accepted values by adding them to the array.\n"}}},{"type":"object","title":"Language filter","required":["language"],"additionalProperties":false,"properties":{"language":{"type":"array","items":{"$ref":"#/components/schemas/VoiceResponse/properties/supportedLanguages/items"},"title":"Specify language filter condition","description":"Specify the language filter condition. You can specify multiple accepted values by adding them to the array.\n"}}},{"type":"object","title":"Provider filter","required":["provider"],"additionalProperties":false,"properties":{"provider":{"type":"array","items":{"$ref":"#/components/schemas/VoiceResponse/properties/provider"},"title":"Specify provider filter condition","description":"Specify the provider filter condition. You can specify multiple accepted values by adding them to the array.\n"}}}]}}},"example":[{"in":{"gender":["male","female"]}},{"in":{"accent":["irish","australian"]}}]},"forceApplyFilters":{"title":"Force apply filters","type":"boolean","default":true,"description":"When true, applies filters strictly even with few results. In instances where the filters\nare overly restrictive, you may get fewer results than desired.\n"},"minimumNumberOfResults":{"type":"integer","default":3,"title":"Minimum number of results","description":"In instances where you want to ensure a minimum number of results, you can set this parameter.\nYou must also set forceApplyFilters to false. Filter conditions will be relaxed to attempt to\nreturn the minimum number of results.\n"},"sort":{"title":"Sort field","$ref":"#/components/schemas/SortValues"},"page":{"type":"integer","minimum":1,"default":1,"title":"Page number","description":"Page number to return (1-indexed)."},"pageLimit":{"type":"integer","minimum":1,"default":1000,"title":"Page limit","description":"Number of items per page."}}},"VoiceMeta":{"type":"object","title":"Voice metadata","description":"Additional optional metadata for a voice.","properties":{"category":{"type":"string","default":""},"createdAt":{"type":"integer","default":0},"technologies":{"type":"array","description":"TTS = voices that support text-to-speech; STS = voices that support speech-to-speech.","items":{"type":"string","enum":["TTS","STS"]}}}},"VoiceResponse":{"type":"object","description":"Voice item in the query response.","properties":{"accent":{"type":"string","title":"Voice accents","description":"Voice accent currently supported by AudioStack's voice library.","enum":["afghan","albanian","algerian","american","arabic","argentinian","armenian","australian","austrian","azerbaijani","bahraini","belgian","bolivian","bosnian and herzegovinian","brazilian","british","british_birmingham","british_cardiff","british_cockney","british_lancashire","british_liverpool","british_london","british_manchester","british_newcastle","british_norfolk","british_welsh","british_west_country","british_yorkshire","bulgarian","burmese","cambodian","canadian","chilean","chinese","colombian","costa rican","croatian","cuban","czech","danish","dominican","dutch","ecuadorian","egyptian","emirati","equatorial guinean","estonian","ethiopian","filipino","finnish","french","georgian","german","greek","guatemalan","honduran","hong kong","hungarian","icelandic","indian","indonesian","iranian","iraqi","irish","israeli","italian","japanese","jordanian","kazakhstani","kenyan","korean","kuwaiti","laotian","latin american","latvian","lebanese","libyan","lithuanian","macedonian","malaysian","maltese","mexican","mongolian","moroccan","multilingual","nepalese","new zealand","nicaraguan","nigerian","norwegian","omani","pakistani","panamanian","paraguayan","peruvian","polish","portuguese","puerto rican","qatari","romanian","russian","salvadoran","saudi arabian","scottish","scottish_east_coast","scottish_edinburgh","scottish_glaswegian","scottish_highlands","serbian","singaporean","slovak","slovenian","somali","south african","south korean","spanish","sri lankan","swedish","swiss","syrian","taiwanese","tanzanian","thai","tunisian","turkish","ukrainian","unknown","uruguayan","uzbekistani","venezuelan","vietnamese","yemeni"]},"ageBracket":{"type":"string","title":"Age brackets","description":"Age bracket of the voice.","enum":["adult","young adult","child","senior"]},"alias":{"type":"string","example":"wren"},"audioSample":{"type":"string","example":"https://file.audiostack.ai/voice-samples/wren_multilingual2024-09-17.mp3"},"charsPerSecond":{"type":"number","format":"float","example":"18.26"},"gender":{"type":"string","title":"Supported values for gender","description":"Specifying gender will guide voice recommendation from AudioStack's voice library.","enum":["male","female","character","unknown"]},"meta":{"$ref":"#/components/schemas/VoiceMeta"},"picture":{"type":"string","example":"https://file.audiostack.ai/image-samples/wren.jpg"},"provider":{"type":"string","title":"Providers","description":"Supported text-to-speech and speech-to-speech providers.","enum":["azure","cartesia","cerevoice","elevenlabs","google","hume","ibm","minimax","narakeet","openai","polly","resemble","respeecher","speechify","user","voice_engine_2","voice_engine_3","wellsaid"]},"supportedLanguages":{"type":"array","items":{"type":"string","title":"Supported languages","description":"Languages supported by voices in AudioStack's voice library.","enum":["afrikaans","albanian","amharic","arabic","armenian","azerbaijani","bangla","basque","belarusian","bengali","bosnian","bulgarian","burmese","cantonese","catalan","chinese","croatian","czech","danish","dutch","english","estonian","filipino","finnish","french","galician","georgian","german","greek","gujarati","hebrew","hindi","hungarian","icelandic","indonesian","irish","italian","javanese","japanese","kannada","kazakh","khmer","korean","lao","latvian","lithuanian","macedonian","malay","malayalam","malayam","malaysian","maltese","mandarin","maori","marathi","mongolian","multilingual","nepali","norwegian","norwegian bokmål","pashto","persian","polish","portuguese","punjabi","romanian","russian","scottish gaelic","serbian","sinhala","slovak","slovakian","slovene","slovenian","somali","spanish","sundanese","swahili","swedish","tagalog","taiwanese","taiwanese mandarin","tamil","telugu","thai","turkish","ukrainian","unknown","urdu","uzbek","vietnamese","welsh","zulu"]}},"tags":{"type":"array","items":{"type":"string","title":"Allowed tones","description":"Tones are used to guide voice recommendation from AudioStack's voice library.","enum":["fast","upbeat","low pitched","steady","flat","confident","storytelling","serious","thin","slow","balanced","calm","tense","raspy","sad","deep","energetic","high pitched","fun","whispering","formal","informative"]}},"type":{"type":"string","title":"Voice types","description":"Voice visibility in the library (public or private).","enum":["public","private"]}}},"PostVoicesQueryResponse":{"allOf":[{"$ref":"#/components/schemas/GetStoryResponse/allOf/0"},{"type":"object","properties":{"message":{"type":"string","description":"Success message.","example":"Fetched voices"},"data":{"type":"object","required":["voices","pageInfo"],"properties":{"voices":{"minItems":0,"type":"array","items":{"$ref":"#/components/schemas/VoiceResponse"}},"pageInfo":{"type":"object","description":"Pagination information for list endpoints.","properties":{"page":{"type":"integer","description":"Current page number (1-indexed)."},"pageItemsCount":{"type":"integer","description":"Number of items on this page."},"itemsTotal":{"type":"integer","description":"Total number of items across all pages."},"pagesTotal":{"type":"integer","description":"Total number of pages."},"pageLimit":{"type":"integer","description":"Maximum items per page."}},"required":["page","pageItemsCount","itemsTotal","pagesTotal","pageLimit"]}}}},"required":["message","data"]}]},"PostQueryUnprocessableEntityResponse":{"type":"object","description":"Error response when voice query fails (e.g. search service error).","properties":{"message":{"type":"string","example":"1 validation error for VoiceQueryPayload. Field required [type=missing, input_value={'gender': ['invalid']}, input_type=dict]\n    For further information visit https://errors.pydantic.dev/2.11/v/missing\nfilters.0.in.GenderTypeFilter.gender.0\n  Input should be 'character', 'female', 'male' or 'unknown' [type=enum, input_value='invalid', input_type=str]"},"errors":{"type":"array","example":["Validation error"],"items":{"type":"string"}}}}}}}