{"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":{"/health":{"get":{"tags":["Health"],"summary":"Check health of the AudiostackAPI and your authentication","description":"Returns a 200 status code if the API is healthy and your authentication is working.\n","operationId":"getHealth","responses":{"200":{"description":"API is healthy and authentication is working","content":{"application/json":{"schema":{"type":"string","example":"OK"}}}},"403":{"description":"Authentication error - invalid API key or authentication token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessDeniedError"}}}}}}},"/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":["5","4","3","2","1"],"title":"Version","description":"The version of the audioform to use in the returned audioforms. We recommend using the latest version to take advantage of latest features.\n\nResults are converted to the version you ask for. Requesting an older version maps the preset names back to their nearest equivalent, which is not always exact — request `'5'` to see the presets a v5 build actually used.\n","example":"5"}}],"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 such as:\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/PostVoicesQueryUnprocessableEntityResponse"}}}}}}},"/assets/sound-templates/query":{"post":{"tags":["Assets - Sound Templates"],"summary":"Search AudioStack's music library for the right music for your audio.","description":"Enables you to search AudioStack's music 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. \"christmas\"\n\nYou can defined a complex filter to narrow down the results such as:\n\nFind all matches for\n  * `classical` or `blues` genre\n  * include `bells` in the instrument\n  * BPM greater than or equal to `95`\n","operationId":"postSoundTemplatesQuery","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSoundTemplatesQueryRequest"}}}},"responses":{"200":{"description":"Sound templates successfully queried","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSoundTemplatesQueryResponse"}}}},"422":{"description":"Invalid request cannot be processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSoundTemplatesQueryUnprocessableEntityResponse"}}}}}}},"/assets/sound-effects/query":{"post":{"tags":["Assets - Sound Effects"],"summary":"Search AudioStack's sound effect library for the right sound effect(s) for your audio.","description":"Enables you to search AudioStack's sound effects 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. \"footsteps\"\n\nYou can define a complex filter to narrow down the results such as:\n\nFind all matches for\n  * `oneShot` sound effect types\n  * the `FIREWORKS` category\n  * duration less than or equal to `10`\n","operationId":"postSoundEffectsQuery","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSoundEffectsQueryRequest"}}}},"responses":{"200":{"description":"Sound effects successfully queried","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSoundEffectsQueryResponse"}}}},"422":{"description":"Invalid request cannot be processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSoundEffectsQueryUnprocessableEntityResponse"}}}}}}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key"},"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"AccessDeniedError":{"type":"object","properties":{"message":{"type":"string","description":"Error description","example":"Access denied. Could not validate credentials"}},"required":["message"]},"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/Audioform4/properties/AudioformInput"},{"$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/Audioform4/properties/AudioformInput"},{"$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/AudioformResult5/properties/AudioformResult"},{"$ref":"#/components/schemas/AudioformResult4/properties/AudioformResult"},{"$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/Audioform5/properties/AudioformInput"},{"$ref":"#/components/schemas/Audioform4/properties/AudioformInput"},{"$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"},"Audioform4":{"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-groupTargetDurationDescription":"Asks the system to match the targeted assets to a certain time. The duration is shared across **all** assets listed in the constraint, so it acts as a group budget. The system might not be able to match this exact duration but will try its best, applying time-stretching across the assets within the configured speed-up / slow-down limits.\n","type":"object","properties":{"Alignment":{"type":"string","enum":["start","end","middle"],"title":"Alignment"},"ArrangementInput":{"properties":{"sections":{"items":{"$ref":"#/components/schemas/Audioform4/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/Audioform4/properties/Header"},"assets":{"additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/Audioform4/properties/TTS"},{"$ref":"#/components/schemas/Audioform4/properties/STS"},{"$ref":"#/components/schemas/Audioform4/properties/Speech"},{"$ref":"#/components/schemas/Audioform4/properties/Media"},{"$ref":"#/components/schemas/Audioform4/properties/Voice"},{"$ref":"#/components/schemas/Audioform4/properties/SoundTemplate"},{"$ref":"#/components/schemas/Audioform4/properties/SoundTemplateSnippet"},{"$ref":"#/components/schemas/Audioform4/properties/SoundEffect"}]},"type":"object","title":"Assets"},"production":{"$ref":"#/components/schemas/Audioform4/properties/ProductionInput"},"delivery":{"$ref":"#/components/schemas/Audioform4/properties/Delivery"}},"type":"object","required":["header","assets","production","delivery"],"title":"Audioform v4"},"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","minimum":-24,"maximum":24,"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,"description":"[optional, defaults to `false`]. When `true`, this clip is the base over which other `blendElement` clips in the same layer are blended. At most one clip per layer can be `blendBase = true`. A clip cannot be both `blendBase` and `blendElement`.\n"},"blendElement":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blendelement","default":false,"description":"[optional, defaults to `false`]. When `true`, this clip is blended on top of the layer's `blendBase` clip. A clip cannot be both `blendBase` and `blendElement`.\n"},"placement":{"$ref":"#/components/schemas/Audioform4/properties/Placement","default":"foreground","description":"[optional, defaults to `foreground`]. Whether this clip is to be treated as foreground or background content by the mixing engine.\n"}},"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/Audioform4/properties/LoudnessPreset"},"encoderPreset":{"$ref":"#/components/schemas/Audioform4/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":"4","title":"Version"}},"type":"object","required":["version"],"title":"Header"},"Layer":{"properties":{"clips":{"items":{"$ref":"#/components/schemas/Audioform4/properties/Clip"},"type":"array","title":"Clips","minItems":1,"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/Audioform4/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"},"smartFit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Smart-fit feature enabled","description":"[optional] defaults to `false`. If set to `true` the media will be edited so that it combines the begin and the end of the file in a smart way so the audio always sounds great and natural for the requested `targetDuration`.\n\nWhen `smartFit` is `true`, `targetDuration` must be set and greater than `0`, and `category` must be `\"music\"`.\n"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds","description":"[optional]. Only used in conjunction with `smartFit = true`. Specifies the duration of the resulting media after smart-fit editing.\n\nMust be omitted (or `null`) when `smartFit` is `false` or absent.\n"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media category","description":"[optional] free-form category of the media file. Must be `\"music\"` when `smartFit` is `true`.\n"}},"type":"object","required":["type","fileId"],"title":"Media"},"MixingPreset":{"type":"string","enum":["balanced","voiceenhanced","musicenhanced","singlevoiceonly","multivoiceonly","story","voiceonly"],"title":"Mixing preset","description":"The mixing preset to be used for the production.\n\n- `balanced`, `voiceenhanced`, `musicenhanced` — general-purpose mixing presets that adjust the relative loudness of voice vs. music.\n- `singlevoiceonly`, `multivoiceonly` — presets optimised for productions containing only voices.\n- `story` — preset optimised for narrative / spoken-word productions.\n- `voiceonly` — kept for legacy support.\n\nRefer to the general documentation for more details on the mixing presets.\n"},"Placement":{"type":"string","enum":["background","foreground"],"title":"Placement","description":"Indicates whether a clip is treated as foreground or background content by the mixing engine.\n"},"ProductionInput":{"properties":{"constraints":{"type":"array","items":{"$ref":"#/components/schemas/Audioform4/properties/TimeConstraint"},"title":"Constraints","default":[],"description":"Optional list of production-level constraints applied across one or more assets. Currently the only constraint type is `timeConstraint`, which lets you specify a shared duration budget for a group of `tts`, `sts` or `speech` assets. Each asset can be referenced by **at most one** constraint.\n"},"arrangement":{"$ref":"#/components/schemas/Audioform4/properties/ArrangementInput"},"mixingPreset":{"$ref":"#/components/schemas/Audioform4/properties/MixingPreset"}},"type":"object","required":["arrangement","mixingPreset"],"title":"Production"},"SectionInput":{"properties":{"layers":{"items":{"$ref":"#/components/schemas/Audioform4/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":"Required. The duration in seconds of the snippet to be generated from the sound template.\n"},"smartFit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"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."},"Speech":{"properties":{"type":{"type":"string","const":"speech","title":"Type"},"speechId":{"type":"string","format":"uuid","title":"Speech UUID","description":"The UUID of a previously generated Speech asset (e.g. produced by the Speech service). Used to embed an existing Speech result inside the audioform.\n"},"sectionId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Section UUID","description":"[optional] If the source Speech contains multiple sections, the UUID of the specific section to be embedded.\n"}},"type":"object","required":["type","speechId"],"title":"Speech","description":"References a previously generated Speech asset by its `speechId`. Unlike TTS, Speech assets are pre-generated outside of the audioform request.\n"},"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"}},"type":"object","required":["type","mediaRef","voiceRef"],"title":"STS","description":"Speech-to-speech: re-renders the source `mediaRef` recording with the voice referenced by `voiceRef`. To enforce a target duration, add a `timeConstraint` in `production.constraints`.\n"},"TimeConstraint":{"properties":{"type":{"type":"string","const":"timeConstraint","title":"Type"},"assets":{"type":"array","items":{"type":"string"},"minItems":1,"title":"Assets","description":"Asset references that share this duration budget. Each asset must exist in the audioform's `assets` map and must be of type `tts`, `sts` or `speech`. An asset can be referenced by **at most one** constraint.\n"},"groupTargetDuration":{"type":"number","exclusiveMinimum":0,"title":"Group target duration in seconds","description":"Asks the system to match the targeted assets to a certain time. The duration is shared across **all** assets listed in the constraint, so it acts as a group budget. The system might not be able to match this exact duration but will try its best, applying time-stretching across the assets within the configured speed-up / slow-down limits.\n"},"targetDurationSpeedUpLimit":{"type":"number","minimum":1,"maximum":4,"default":1.2,"title":"Target duration speed-up limit","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","minimum":1,"default":1.2,"title":"Target duration slow-down limit","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","assets","groupTargetDuration"],"title":"Time Constraint","description":"Production-level constraint that applies a shared duration budget to a group of one or more `tts`, `sts` or `speech` assets. Replaces the per-asset `targetDuration` fields that existed in Audioform v3.\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"},"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","description":"Text-to-speech generation using the voice referenced by `voiceRef`. To enforce a target duration, add a `timeConstraint` in `production.constraints`.\n"},"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","minimum":0.8,"maximum":1.2,"default":1,"description":"[optional], defaults to `1`. Adjust the speed of the voice from `0.8` to `1.2`.\n"},"voicePreset":{"$ref":"#/components/schemas/Audioform4/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","standard.normalised.beta","expressive.normalised.beta"],"title":"VoicePreset"}},"title":"Audioform4 Schemas"},"Audioform5":{"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-groupTargetDurationDescription":"Asks the system to match the targeted assets to a certain time. The duration is shared across **all** assets listed in the constraint, so it acts as a group budget. The system might not be able to match this exact duration but will try its best, applying time-stretching across the assets within the configured speed-up / slow-down limits.\n","type":"object","properties":{"Alignment":{"type":"string","enum":["start","end","middle"],"title":"Alignment"},"ArrangementInput":{"properties":{"sections":{"items":{"$ref":"#/components/schemas/Audioform5/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/Audioform5/properties/Header"},"assets":{"additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/Audioform5/properties/TTS"},{"$ref":"#/components/schemas/Audioform5/properties/STS"},{"$ref":"#/components/schemas/Audioform5/properties/Speech"},{"$ref":"#/components/schemas/Audioform5/properties/Media"},{"$ref":"#/components/schemas/Audioform5/properties/Voice"},{"$ref":"#/components/schemas/Audioform5/properties/SoundTemplate"},{"$ref":"#/components/schemas/Audioform5/properties/SoundTemplateSnippet"},{"$ref":"#/components/schemas/Audioform5/properties/SoundEffect"}]},"type":"object","title":"Assets"},"production":{"$ref":"#/components/schemas/Audioform5/properties/ProductionInput"},"delivery":{"$ref":"#/components/schemas/Audioform5/properties/Delivery"}},"type":"object","required":["header","assets","production","delivery"],"title":"Audioform v5"},"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","minimum":-24,"maximum":24,"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,"description":"[optional, defaults to `false`]. When `true`, this clip is the base over which other `blendElement` clips in the same layer are blended. At most one clip per layer can be `blendBase = true`. A clip cannot be both `blendBase` and `blendElement`.\n"},"blendElement":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blendelement","default":false,"description":"[optional, defaults to `false`]. When `true`, this clip is blended on top of the layer's `blendBase` clip. A clip cannot be both `blendBase` and `blendElement`.\n"},"placement":{"$ref":"#/components/schemas/Audioform5/properties/Placement","default":"foreground","description":"[optional, defaults to `foreground`]. Whether this clip is to be treated as foreground or background content by the mixing engine.\n"}},"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":{"anyOf":[{"$ref":"#/components/schemas/Audioform5/properties/LoudnessPreset"},{"type":"null"}],"description":"[optional] — defaults to `digitalPlatform` when omitted. There is no loudness recommender.\n"},"encoderPreset":{"$ref":"#/components/schemas/Audioform5/properties/EncoderPreset"},"public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Public","description":"Should the delivery audiofile be publicly available or private."}},"type":"object","required":["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":"5","title":"Version"}},"type":"object","required":["version"],"title":"Header"},"Layer":{"properties":{"clips":{"items":{"$ref":"#/components/schemas/Audioform5/properties/Clip"},"type":"array","title":"Clips","minItems":1,"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/Audioform5/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":["broadcast","digitalPlatform","longFormContent"],"title":"Loudness preset","description":"How loud should it be in term of LUFS and compression.\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"},"smartFit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Smart-fit feature enabled","description":"[optional] defaults to `false`. If set to `true` the media will be edited so that it combines the begin and the end of the file in a smart way so the audio always sounds great and natural for the requested `targetDuration`.\n\nWhen `smartFit` is `true`, `targetDuration` must be set and greater than `0`, and `category` must be `\"music\"`.\n"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds","description":"[optional]. Only used in conjunction with `smartFit = true`. Specifies the duration of the resulting media after smart-fit editing.\n\nMust be omitted (or `null`) when `smartFit` is `false` or absent.\n"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media category","description":"[optional] free-form category of the media file. Must be `\"music\"` when `smartFit` is `true`.\n"}},"type":"object","required":["type","fileId"],"title":"Media"},"MixingPreset":{"type":"string","enum":["neutral","speechDominant","musicDominant","dynamic","compressed","noProcessing"],"title":"Mixing preset","description":"The mixing preset to be used for the production.\n\n- `neutral`, `speechDominant`, `musicDominant` — general-purpose mixing presets that adjust the relative loudness of voice vs. music.\n- `dynamic` — preset optimised for narrative / spoken-word productions.\n- `compressed` — dense, loud treatment. Only set it if agreed with support.\n- `noProcessing` — preset optimised for productions containing only voices. Applies no processing and no ducking.\n\nRefer to the general documentation for more details on the mixing presets.\n"},"Placement":{"type":"string","enum":["background","foreground"],"title":"Placement","description":"Indicates whether a clip is treated as foreground or background content by the mixing engine.\n"},"ProductionInput":{"properties":{"constraints":{"type":"array","items":{"$ref":"#/components/schemas/Audioform5/properties/TimeConstraint"},"title":"Constraints","default":[],"description":"Optional list of production-level constraints applied across one or more assets. Currently the only constraint type is `timeConstraint`, which lets you specify a shared duration budget for a group of `tts`, `sts` or `speech` assets. Each asset can be referenced by **at most one** constraint.\n"},"arrangement":{"$ref":"#/components/schemas/Audioform5/properties/ArrangementInput"},"mixingPreset":{"anyOf":[{"$ref":"#/components/schemas/Audioform5/properties/MixingPreset"},{"type":"null"}],"description":"[optional] — if omitted, the recommender selects the appropriate preset at build time based on the rendered arrangement.\n"}},"type":"object","required":["arrangement"],"title":"Production"},"SectionInput":{"properties":{"layers":{"items":{"$ref":"#/components/schemas/Audioform5/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"}},"type":"object","required":["type","soundTemplateAlias"],"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":"Required. The duration in seconds of the snippet to be generated from the sound template.\n"},"smartFit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"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."},"Speech":{"properties":{"type":{"type":"string","const":"speech","title":"Type"},"speechId":{"type":"string","format":"uuid","title":"Speech UUID","description":"The UUID of a previously generated Speech asset (e.g. produced by the Speech service). Used to embed an existing Speech result inside the audioform.\n"},"sectionId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Section UUID","description":"[optional] If the source Speech contains multiple sections, the UUID of the specific section to be embedded.\n"}},"type":"object","required":["type","speechId"],"title":"Speech","description":"References a previously generated Speech asset by its `speechId`. Unlike TTS, Speech assets are pre-generated outside of the audioform request.\n"},"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"}},"type":"object","required":["type","mediaRef","voiceRef"],"title":"STS","description":"Speech-to-speech: re-renders the source `mediaRef` recording with the voice referenced by `voiceRef`. To enforce a target duration, add a `timeConstraint` in `production.constraints`.\n"},"TimeConstraint":{"properties":{"type":{"type":"string","const":"timeConstraint","title":"Type"},"assets":{"type":"array","items":{"type":"string"},"minItems":1,"title":"Assets","description":"Asset references that share this duration budget. Each asset must exist in the audioform's `assets` map and must be of type `tts`, `sts` or `speech`. An asset can be referenced by **at most one** constraint.\n"},"groupTargetDuration":{"type":"number","exclusiveMinimum":0,"title":"Group target duration in seconds","description":"Asks the system to match the targeted assets to a certain time. The duration is shared across **all** assets listed in the constraint, so it acts as a group budget. The system might not be able to match this exact duration but will try its best, applying time-stretching across the assets within the configured speed-up / slow-down limits.\n"},"targetDurationSpeedUpLimit":{"type":"number","minimum":1,"maximum":4,"default":1.2,"title":"Target duration speed-up limit","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","minimum":1,"default":1.2,"title":"Target duration slow-down limit","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","assets","groupTargetDuration"],"title":"Time Constraint","description":"Production-level constraint that applies a shared duration budget to a group of one or more `tts`, `sts` or `speech` assets. Replaces the per-asset `targetDuration` fields that existed in Audioform v3.\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"},"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","description":"Text-to-speech generation using the voice referenced by `voiceRef`. To enforce a target duration, add a `timeConstraint` in `production.constraints`.\n"},"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","minimum":0.8,"maximum":1.2,"default":1,"description":"[optional], defaults to `1`. Adjust the speed of the voice from `0.8` to `1.2`.\n"},"voicePreset":{"$ref":"#/components/schemas/Audioform5/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","standard.normalised.beta","expressive.normalised.beta"],"title":"VoicePreset"}},"title":"Audioform5 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"},"AudioformResult4":{"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","type":"object","properties":{"Alignment":{"type":"string","enum":["start","end","middle"],"title":"Alignment"},"AlgorithmUsed":{"type":"string","enum":["trim_only","standard_speed_up","standard_slow_down","smart_speed_up","smart_slow_down"],"title":"Algorithm used","description":"The time-stretching algorithm that was actually applied to the asset.\n"},"ArrangementResult":{"properties":{"sections":{"items":{"$ref":"#/components/schemas/AudioformResult4/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/AudioformResult4/properties/HeaderResult"},"assets":{"additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/AudioformResult4/properties/TTSResult"},{"$ref":"#/components/schemas/AudioformResult4/properties/STSResult"},{"$ref":"#/components/schemas/AudioformResult4/properties/SpeechResult"},{"$ref":"#/components/schemas/AudioformResult4/properties/MediaResult"},{"$ref":"#/components/schemas/Audioform4/properties/Voice"},{"$ref":"#/components/schemas/AudioformResult4/properties/SoundTemplateResult"},{"$ref":"#/components/schemas/AudioformResult4/properties/SoundTemplateSnippetResult"},{"$ref":"#/components/schemas/AudioformResult4/properties/SoundEffectResult"}]},"type":"object","title":"Assets"},"production":{"$ref":"#/components/schemas/AudioformResult4/properties/ProductionResult"},"delivery":{"$ref":"#/components/schemas/AudioformResult4/properties/DeliveryResult"}},"type":"object","required":["header","assets","production","delivery"],"title":"AudioformResult version 4"},"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","minimum":-24,"maximum":24,"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"},"placement":{"$ref":"#/components/schemas/AudioformResult4/properties/Placement","default":"foreground"},"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/AudioformResult4/properties/LoudnessPreset"},"encoderPreset":{"$ref":"#/components/schemas/AudioformResult4/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":"4","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/AudioformResult4/properties/ClipResult"},"type":"array","minItems":1,"title":"Clips"},"alignment":{"anyOf":[{"$ref":"#/components/schemas/AudioformResult4/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"},"smartFit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Smart-fit feature enabled"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media category"},"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"},"MixingPreset":{"type":"string","enum":["balanced","voiceenhanced","musicenhanced","singlevoiceonly","multivoiceonly","story","voiceonly"],"title":"Mixing preset"},"Placement":{"type":"string","enum":["background","foreground"],"title":"Placement"},"ProcessRequired":{"type":"string","enum":["trim_only","speed_up","slow_down"],"title":"Process required","description":"The kind of duration processing that the time-stretching engine determined was required to meet the constraint.\n"},"ProductionResult":{"properties":{"constraints":{"type":"array","items":{"$ref":"#/components/schemas/AudioformResult4/properties/TimeConstraintResult"},"title":"Constraints","default":[],"description":"Per-asset outcomes for every asset that was covered by a `timeConstraint` in the input. Note that the input has at most one constraint **per asset**, but the result has one entry **per asset**: a single input constraint over N assets becomes N entries in this list.\n"},"arrangement":{"$ref":"#/components/schemas/AudioformResult4/properties/ArrangementResult"},"mixingPreset":{"type":"string","title":"Mixing preset","description":"The mixing preset that was applied to the production. Echoes the value supplied in the request.\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"},"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/AudioformResult4/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"},"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"},"SpeechResult":{"properties":{"type":{"type":"string","const":"speech","title":"Type"},"speechId":{"type":"string","format":"uuid","title":"Speech UUID"},"sectionId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Section UUID"},"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","speechId","duration","uri"],"title":"Speech Result"},"TimeConstraintResult":{"properties":{"assetRef":{"type":"string","title":"Asset reference","description":"The specific asset (one of `tts`, `sts`, or `speech`) that this constraint result applies to.\n"},"groupTargetDuration":{"type":"number","exclusiveMinimum":0,"title":"Group target duration in seconds","description":"The shared target duration that was supplied for this constraint group in the request.\n"},"assignedTargetDuration":{"type":"number","minimum":0,"title":"Assigned target duration in seconds","description":"The portion of the group target duration that the engine allocated to this specific asset at runtime.\n"},"targetDurationSpeedUpLimit":{"type":"number","minimum":1,"default":1.2,"title":"Target duration speed-up limit"},"targetDurationSlowDownLimit":{"type":"number","minimum":1,"default":1.2,"title":"Target duration slow-down limit"},"duration":{"type":"number","minimum":0,"title":"Final duration of the asset","description":"The final duration of the rendered asset after the constraint has been applied.\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the constraint-processed asset audio file. If it is not public you will need to be authenticated to download it.\n"},"timestretchSummary":{"anyOf":[{"$ref":"#/components/schemas/AudioformResult4/properties/TimeStretchSummary"},{"type":"null"}],"title":"Time-stretch summary","description":"Optional summary describing how time-stretching was applied to satisfy the constraint. Absent if no time-stretch was needed or if the engine could not satisfy the constraint.\n"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Optional error message present when the constraint could not be satisfied for this asset.\n"}},"type":"object","required":["assetRef","groupTargetDuration","assignedTargetDuration","duration","uri"],"title":"Time Constraint Result","description":"Per-asset outcome of a `timeConstraint` applied during production. There is one entry per asset that was covered by a constraint, regardless of how many assets shared that constraint.\n"},"TimeStretchSummary":{"properties":{"originalProviderDuration":{"type":"number","title":"Original provider duration","description":"Duration in seconds of the asset as originally produced by the provider, before any time-stretching or trimming.\n"},"targetDuration":{"type":"number","title":"Target duration"},"postTrimDuration":{"type":"number","title":"Post-trim duration","description":"Duration after silence trimming has been applied but before any time-stretching.\n"},"slowDownLimit":{"type":"number","title":"Slow-down limit"},"speedUpLimit":{"type":"number","title":"Speed-up limit"},"smartSpeedUpEnabled":{"type":"boolean","title":"Smart speed-up enabled"},"smartSlowDownEnabled":{"type":"boolean","title":"Smart slow-down enabled"},"processRequired":{"$ref":"#/components/schemas/AudioformResult4/properties/ProcessRequired"},"requestedRatio":{"type":"number","title":"Requested ratio","description":"The time-stretch ratio that was requested before clamping was applied.\n"},"withoutWordStretchSeconds":{"type":"number","default":0,"title":"Without-word-stretch seconds"},"wordStretchSecondsApplied":{"type":"number","default":0,"title":"Word-stretch seconds applied"},"clampedRatioApplied":{"type":"number","title":"Clamped ratio applied","description":"The time-stretch ratio actually applied after clamping to the speed-up / slow-down limits.\n"},"clampedTargetDuration":{"type":"number","title":"Clamped target duration"},"finalDuration":{"type":"number","title":"Final duration"},"algorithmUsed":{"$ref":"#/components/schemas/AudioformResult4/properties/AlgorithmUsed","default":"trim_only"},"earlyExit":{"type":"boolean","default":false,"title":"Early exit","description":"`true` if the time-stretching engine exited early because no further processing was required.\n"}},"type":"object","required":["originalProviderDuration","targetDuration","postTrimDuration","slowDownLimit","speedUpLimit","smartSpeedUpEnabled","smartSlowDownEnabled","processRequired","requestedRatio","clampedRatioApplied","clampedTargetDuration","finalDuration"],"title":"Time Stretch Summary"},"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"},"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","standard.normalised.beta","expressive.normalised.beta"],"title":"VoicePreset"}},"title":"AudioformResult4 Schemas"},"AudioformResult5":{"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","type":"object","properties":{"Alignment":{"type":"string","enum":["start","end","middle"],"title":"Alignment"},"AlgorithmUsed":{"type":"string","enum":["trim_only","standard_speed_up","standard_slow_down","smart_speed_up","smart_slow_down"],"title":"Algorithm used","description":"The time-stretching algorithm that was actually applied to the asset.\n"},"ArrangementResult":{"properties":{"sections":{"items":{"$ref":"#/components/schemas/AudioformResult5/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/AudioformResult5/properties/HeaderResult"},"assets":{"additionalProperties":{"anyOf":[{"$ref":"#/components/schemas/AudioformResult5/properties/TTSResult"},{"$ref":"#/components/schemas/AudioformResult5/properties/STSResult"},{"$ref":"#/components/schemas/AudioformResult5/properties/SpeechResult"},{"$ref":"#/components/schemas/AudioformResult5/properties/MediaResult"},{"$ref":"#/components/schemas/Audioform4/properties/Voice"},{"$ref":"#/components/schemas/AudioformResult5/properties/SoundTemplateResult"},{"$ref":"#/components/schemas/AudioformResult5/properties/SoundTemplateSnippetResult"},{"$ref":"#/components/schemas/AudioformResult5/properties/SoundEffectResult"}]},"type":"object","title":"Assets"},"production":{"$ref":"#/components/schemas/AudioformResult5/properties/ProductionResult"},"delivery":{"$ref":"#/components/schemas/AudioformResult5/properties/DeliveryResult"}},"type":"object","required":["header","assets","production","delivery"],"title":"AudioformResult version 5"},"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","minimum":-24,"maximum":24,"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"},"placement":{"$ref":"#/components/schemas/AudioformResult5/properties/Placement","default":"foreground"},"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/AudioformResult5/properties/LoudnessPreset","description":"The loudness preset that was applied at encode time. Always present, even when the request omitted `loudnessPreset` — in that case it is the default, `digitalPlatform`.\n"},"encoderPreset":{"$ref":"#/components/schemas/AudioformResult5/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":"5","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/AudioformResult5/properties/ClipResult"},"type":"array","minItems":1,"title":"Clips"},"alignment":{"anyOf":[{"$ref":"#/components/schemas/AudioformResult5/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":["broadcast","digitalPlatform","longFormContent"],"title":"LoudnessPreset"},"MediaResult":{"properties":{"type":{"type":"string","const":"media","title":"Type"},"fileId":{"type":"string","title":"Fileid"},"smartFit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Smart-fit feature enabled"},"targetDuration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target duration in seconds"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media category"},"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"},"MixingPreset":{"type":"string","enum":["neutral","speechDominant","musicDominant","dynamic","compressed","noProcessing"],"title":"Mixing preset"},"Placement":{"type":"string","enum":["background","foreground"],"title":"Placement"},"ProcessRequired":{"type":"string","enum":["trim_only","speed_up","slow_down"],"title":"Process required","description":"The kind of duration processing that the time-stretching engine determined was required to meet the constraint.\n"},"ProductionResult":{"properties":{"constraints":{"type":"array","items":{"$ref":"#/components/schemas/AudioformResult5/properties/TimeConstraintResult"},"title":"Constraints","default":[],"description":"Per-asset outcomes for every asset that was covered by a `timeConstraint` in the input. Note that the input has at most one constraint **per asset**, but the result has one entry **per asset**: a single input constraint over N assets becomes N entries in this list.\n"},"arrangement":{"$ref":"#/components/schemas/AudioformResult5/properties/ArrangementResult"},"mixingPreset":{"$ref":"#/components/schemas/AudioformResult5/properties/MixingPreset","description":"The mixing preset that was applied to the production. Always present: it echoes the value supplied in the request, or — when the request omitted `mixingPreset` — the value the recommender selected at build time.\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"},"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/AudioformResult5/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"},"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","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"},"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"},"SpeechResult":{"properties":{"type":{"type":"string","const":"speech","title":"Type"},"speechId":{"type":"string","format":"uuid","title":"Speech UUID"},"sectionId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Section UUID"},"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","speechId","duration","uri"],"title":"Speech Result"},"TimeConstraintResult":{"properties":{"assetRef":{"type":"string","title":"Asset reference","description":"The specific asset (one of `tts`, `sts`, or `speech`) that this constraint result applies to.\n"},"groupTargetDuration":{"type":"number","exclusiveMinimum":0,"title":"Group target duration in seconds","description":"The shared target duration that was supplied for this constraint group in the request.\n"},"assignedTargetDuration":{"type":"number","minimum":0,"title":"Assigned target duration in seconds","description":"The portion of the group target duration that the engine allocated to this specific asset at runtime.\n"},"targetDurationSpeedUpLimit":{"type":"number","minimum":1,"default":1.2,"title":"Target duration speed-up limit"},"targetDurationSlowDownLimit":{"type":"number","minimum":1,"default":1.2,"title":"Target duration slow-down limit"},"duration":{"type":"number","minimum":0,"title":"Final duration of the asset","description":"The final duration of the rendered asset after the constraint has been applied.\n"},"uri":{"type":"string","minLength":1,"format":"uri","title":"Uri","description":"The download URI of the constraint-processed asset audio file. If it is not public you will need to be authenticated to download it.\n"},"timestretchSummary":{"anyOf":[{"$ref":"#/components/schemas/AudioformResult5/properties/TimeStretchSummary"},{"type":"null"}],"title":"Time-stretch summary","description":"Optional summary describing how time-stretching was applied to satisfy the constraint. Absent if no time-stretch was needed or if the engine could not satisfy the constraint.\n"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Optional error message present when the constraint could not be satisfied for this asset.\n"}},"type":"object","required":["assetRef","groupTargetDuration","assignedTargetDuration","duration","uri"],"title":"Time Constraint Result","description":"Per-asset outcome of a `timeConstraint` applied during production. There is one entry per asset that was covered by a constraint, regardless of how many assets shared that constraint.\n"},"TimeStretchSummary":{"properties":{"originalProviderDuration":{"type":"number","title":"Original provider duration","description":"Duration in seconds of the asset as originally produced by the provider, before any time-stretching or trimming.\n"},"targetDuration":{"type":"number","title":"Target duration"},"postTrimDuration":{"type":"number","title":"Post-trim duration","description":"Duration after silence trimming has been applied but before any time-stretching.\n"},"slowDownLimit":{"type":"number","title":"Slow-down limit"},"speedUpLimit":{"type":"number","title":"Speed-up limit"},"smartSpeedUpEnabled":{"type":"boolean","title":"Smart speed-up enabled"},"smartSlowDownEnabled":{"type":"boolean","title":"Smart slow-down enabled"},"processRequired":{"$ref":"#/components/schemas/AudioformResult5/properties/ProcessRequired"},"requestedRatio":{"type":"number","title":"Requested ratio","description":"The time-stretch ratio that was requested before clamping was applied.\n"},"withoutWordStretchSeconds":{"type":"number","default":0,"title":"Without-word-stretch seconds"},"wordStretchSecondsApplied":{"type":"number","default":0,"title":"Word-stretch seconds applied"},"clampedRatioApplied":{"type":"number","title":"Clamped ratio applied","description":"The time-stretch ratio actually applied after clamping to the speed-up / slow-down limits.\n"},"clampedTargetDuration":{"type":"number","title":"Clamped target duration"},"finalDuration":{"type":"number","title":"Final duration"},"algorithmUsed":{"$ref":"#/components/schemas/AudioformResult5/properties/AlgorithmUsed","default":"trim_only"},"earlyExit":{"type":"boolean","default":false,"title":"Early exit","description":"`true` if the time-stretching engine exited early because no further processing was required.\n"}},"type":"object","required":["originalProviderDuration","targetDuration","postTrimDuration","slowDownLimit","speedUpLimit","smartSpeedUpEnabled","smartSlowDownEnabled","processRequired","requestedRatio","clampedRatioApplied","clampedTargetDuration","finalDuration"],"title":"Time Stretch Summary"},"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"},"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","standard.normalised.beta","expressive.normalised.beta"],"title":"VoicePreset"}},"title":"AudioformResult5 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/Audioform5/properties/AudioformInput"},{"$ref":"#/components/schemas/Audioform4/properties/AudioformInput"},{"$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/AudioformResult5/properties/AudioformResult"},{"$ref":"#/components/schemas/AudioformResult4/properties/AudioformResult"},{"$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":{"$ref":"#/components/schemas/SoundTemplateResponse/properties/meta/properties/mood/items"},"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 how voice, music, SFX, and media assets are blended together. Accepts v4 and v5 preset names; v4 values are mapped to v5 at build time. Defaults to `recommended`, which omits mixing on the v5 audioform so the build-time recommender runs. Explicit values are never overridden.\n","default":"recommended","type":"string","title":"MixingPreset","enum":["balanced","voiceenhanced","musicenhanced","singlevoiceonly","multivoiceonly","story","voiceonly","recommended","neutral","speechDominant","musicDominant","dynamic","compressed","noProcessing"]}},"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":"Controls the final integrated loudness of your audio. Accepts v4 and v5 preset names; v4 values are mapped to v5 at build time. Defaults to `streaming`. There is no loudness recommender.\n","default":"streaming","type":"string","title":"LoudnessPreset","enum":["streaming","spotify","radio","radioAdvertising","podcast","applePodcast","youtube","lowVol","podcastDynamic","broadcast","digitalPlatform","longFormContent"]},"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/Audioform5/properties/AudioformInput"},{"$ref":"#/components/schemas/Audioform4/properties/AudioformInput"},{"$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":{"description":"Story production settings. Differs from Brief: omit `mixingPreset` to default to `dynamic` at build time.\n","properties":{"mixingPreset":{"description":"Controls how voice, music, SFX, and media assets are blended together. Omit to default to `dynamic`. Set to `recommended` to omit mixing on the v5 audioform and let the build-time recommender run. Explicit v4 values are mapped to v5 and never overridden.\n","$ref":"#/components/schemas/CreateBriefFromBodyRequest/properties/brief/properties/production/properties/mixingPreset"}},"title":"Story production settings","type":"object"},"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', 'podcastDynamic', 'broadcast', 'digitalPlatform' or 'longFormContent'","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":"00000000-0000-0000-0000-000000000000","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"}]}},"output":{"title":"Output","description":"Audio output details when the job completed successfully. Present on success; absent on failure.","type":"object","properties":{"audioformUris":{"title":"Audioform URIs","type":"array","description":"List of delivery URIs for the individual audioforms.","items":{"type":"string","format":"uri"}},"public":{"title":"Public","type":"boolean","description":"Whether the generated audio files are publicly accessible."},"singleAudioFileUri":{"title":"Single Audio File URI","type":"string","format":"uri","description":"URI for a single merged audio file combining all audioforms."},"extension":{"type":"string","title":"Extension","enum":["mp3","wav","ogg","flac","m4a"]}},"required":["audioformUris","public","extension"],"additionalProperties":false}},"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":[],"output":{"audioformUris":["https://v2.api.audio/public-file/aaaaaaaa-0000-0000-0000-000000000001","https://v2.api.audio/public-file/aaaaaaaa-0000-0000-0000-000000000002"],"public":true,"singleAudioFileUri":"https://v2.api.audio/public-file/aaaaaaaa-0000-0000-0000-000000000003","extension":"mp3"}}}}],"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"]},"VoicesSortValues":{"type":"string","enum":["alias"],"description":"Field to sort results by. If omitted, results are sorted by AudioStack's internal priority."},"SoundTemplatesSortValues":{"type":"string","enum":["alias"],"description":"Field to sort results by. If omitted, results are sorted by AudioStack's internal sorting."},"SoundEffectsSortValues":{"type":"string","enum":["alias"],"description":"Field to sort results by. If omitted, results are sorted by AudioStack's internal sorting."},"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":"Voices 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"}}},{"type":"object","title":"Type filter","required":["type"],"additionalProperties":false,"properties":{"type":{"type":"array","items":{"$ref":"#/components/schemas/VoiceResponse/properties/type"},"title":"Specify type filter condition","description":"Specify the type 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/VoicesSortValues"},"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"]}]},"PostVoicesQueryUnprocessableEntityResponse":{"type":"object","description":"Error response when voice query fails","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"}}}},"PostSoundTemplatesQueryRequest":{"type":"object","description":"Request body for sound-templates query endpoint.","properties":{"query":{"type":"string","default":"","example":"christmas","title":"Search query","description":"Free text search query passed to the search engine. This is used to search for sound templates 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":"Sound templates filter","description":"Filter object for sound template queries.","properties":{"in":{"oneOf":[{"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":"Energy filter","required":["energy"],"additionalProperties":false,"properties":{"energy":{"type":"array","items":{"$ref":"#/components/schemas/SoundTemplateResponse/properties/meta/properties/energy/items"},"title":"Specify energy filter condition","description":"Specify the energy filter condition. You can specify multiple accepted values by adding them to the array.\n"}}},{"type":"object","title":"Genre filter","required":["genre"],"additionalProperties":false,"properties":{"genre":{"type":"array","items":{"$ref":"#/components/schemas/SoundTemplateResponse/properties/meta/properties/genre/items"},"title":"Specify genre filter condition","description":"Specify the genre filter condition. You can specify multiple accepted values by adding them to the array.\n"}}},{"type":"object","title":"Instrument filter","required":["instrument"],"additionalProperties":false,"properties":{"instrument":{"type":"array","items":{"$ref":"#/components/schemas/SoundTemplateResponse/properties/meta/properties/instrument/items"},"title":"Specify instrument filter condition","description":"Specify the instrument filter condition. You can specify multiple accepted values by adding them to the array.\n"}}},{"type":"object","title":"Key filter","required":["key"],"additionalProperties":false,"properties":{"key":{"type":"array","items":{"$ref":"#/components/schemas/SoundTemplateResponse/properties/meta/properties/key/items"},"title":"Specify key filter condition","description":"Specify the key filter condition. You can specify multiple accepted values by adding them to the array.\n"}}},{"type":"object","title":"Mood filter","required":["mood"],"additionalProperties":false,"properties":{"mood":{"type":"array","items":{"$ref":"#/components/schemas/SoundTemplateResponse/properties/meta/properties/mood/items"},"title":"Specify mood filter condition","description":"Specify the mood filter condition. You can specify multiple accepted values by adding them to the array.\n"}}},{"type":"object","title":"Tempo filter","required":["tempo"],"additionalProperties":false,"properties":{"tempo":{"type":"array","items":{"$ref":"#/components/schemas/SoundTemplateResponse/properties/meta/properties/tempo/items"},"title":"Specify tempo filter condition","description":"Specify the tempo filter condition. You can specify multiple accepted values by adding them to the array.\n"}}},{"type":"object","title":"Holidays filter","required":["holidays"],"additionalProperties":false,"properties":{"holidays":{"type":"array","items":{"$ref":"#/components/schemas/SoundTemplateResponse/properties/meta/properties/holidays/items"},"title":"Specify holidays filter condition","description":"Specify the holidays filter condition. You can specify multiple accepted values by adding them to the array.\n"}}},{"type":"object","title":"Type filter","required":["type"],"additionalProperties":false,"properties":{"type":{"type":"array","items":{"$ref":"#/components/schemas/SoundTemplateResponse/properties/type/oneOf/0"},"title":"Specify type filter condition","description":"Specify the type filter condition. You can specify multiple accepted values by adding them to the array.\n"}}}]},"greaterThanOrEquals":{"oneOf":[{"type":"object","title":"BPM filter","required":["bpm"],"additionalProperties":false,"properties":{"bpm":{"type":"integer","title":"Specify BPM filter condition","description":"Specify the BPM filter condition as an integer value.\n"}}}]},"lessThanOrEquals":{"oneOf":[{"type":"object","title":"BPM filter","required":["bpm"],"additionalProperties":false,"properties":{"bpm":{"type":"integer","title":"Specify BPM filter condition","description":"Specify the BPM filter condition as an integer value.\n"}}}]}}},"example":[{"in":{"genre":["classical","blues"]}},{"in":{"instrument":["bells"]}},{"greaterThanOrEquals":{"bpm":95}}]},"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/SoundTemplatesSortValues"},"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."}}},"PostSoundEffectsQueryRequest":{"type":"object","description":"Request body for sound effects query endpoint.","properties":{"query":{"type":"string","default":"","example":"footsteps","title":"Search query","description":"Free text search query passed to the search engine. This is used to search for sound effects 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":"Sound effects filter","description":"Filter object for sound effect queries.","properties":{"in":{"oneOf":[{"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":"Sound effect type filter","required":["soundEffectType"],"additionalProperties":false,"properties":{"soundEffectType":{"type":"array","items":{"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.\natmosphere: A longer, ambient background sound.\n","enum":["oneShot","atmosphere"]},"title":"Specify sound effect type filter condition","description":"Specify the sound effect type filter condition. You can specify multiple accepted values (e.g. oneShot, atmosphere).\n"}}},{"type":"object","title":"Category filter","required":["category"],"additionalProperties":false,"properties":{"category":{"type":"array","items":{"$ref":"#/components/schemas/SoundEffectResponse/properties/meta/properties/category/items"},"title":"Specify category filter condition","description":"Specify the UCS category filter condition. You can specify multiple accepted values by adding them to the array.\n"}}},{"type":"object","title":"Subcategory filter","required":["subcategory"],"additionalProperties":false,"properties":{"subcategory":{"type":"array","items":{"$ref":"#/components/schemas/SoundEffectResponse/properties/meta/properties/subcategory/items"},"title":"Specify subcategory filter condition","description":"Specify the UCS subcategory filter condition. You can specify multiple accepted values by adding them to the array.\n"}}}]},"greaterThanOrEquals":{"oneOf":[{"type":"object","title":"Duration filter","required":["duration"],"additionalProperties":false,"properties":{"duration":{"type":"number","title":"Specify duration filter condition","description":"Specify the duration filter condition as a float value.\n"}}}]},"lessThanOrEquals":{"oneOf":[{"type":"object","title":"Duration filter","required":["duration"],"additionalProperties":false,"properties":{"duration":{"type":"number","title":"Specify duration filter condition","description":"Specify the duration filter condition as a float value.\n"}}}]}}},"example":[{"in":{"soundEffectType":["oneShot"]}},{"in":{"category":["FIREWORKS"]}},{"lessThanOrEquals":{"duration":10}}]},"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/SoundEffectsSortValues"},"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."}}},"SoundTemplateResponse":{"type":"object","description":"Sound template item in the query response.","required":["alias","name","soundTemplateId","audioSample","duration","type","meta"],"properties":{"alias":{"type":"string","example":"dusty_jeans","title":"Sound template alias","description":"The alias of the sound template.\n"},"name":{"type":"string","example":"Dusty Jeans","title":"Sound template name","description":"The name of the sound template.\n"},"soundTemplateId":{"type":"string","example":"fe7d1e45-bb7d-4150-93c5-f17f8ce232b8","title":"Sound template ID","description":"The ID of the sound template.\n"},"segmentNames":{"type":"array","items":{"type":"string"},"example":["main"],"title":"Segment names","description":"The names of the segments in the sound template. Currently used by audioform but will be deprecated in the future.\n"},"audioSample":{"type":"string","format":"uri","example":"https://file.api.audio/template-samples-prod/dusty_jeans.mp3","title":"Audio sample","description":"The audio sample of the sound template.\n"},"duration":{"type":"number","format":"float","example":"112.7","title":"Duration in seconds","description":"The duration of the sound template in seconds.\n"},"type":{"oneOf":[{"type":"string","title":"Sound template types","description":"Sound template visibility in the library (public or private).","enum":["public","private"]},{"type":"string","title":"Non-standard sound template types","description":"Non-standard sound template types."}],"example":"public","title":"Type","description":"The type of the sound template. Most templates are either `public` or `private`.\n"},"meta":{"type":"object","title":"Metadata","description":"Additional metadata for the sound template.\n","properties":{"bpm":{"type":"integer","example":115,"title":"BPM","description":"The beats per minute of the sound template.\n"},"genre":{"type":"array","items":{"type":"string","title":"Genre","description":"Allowed values for sound-template genre.","enum":["afro","ambient","arab","asian","blues","childrenJingle","classical","electronicDance","folkCountry","funkSoul","indian","jazz","latin","metal","pop","rapHipHop","reggae","rnb","rock","singerSongwriters","sound","soundtrack","spokenWord"]},"title":"Genre","description":"The genres of the sound template.\n","example":["classical","blues"]},"instrument":{"type":"array","items":{"type":"string","title":"Instrument","description":"Allowed values for instruments.","enum":["accordion","acousticGuitar","africanPercussion","asianFlute","asianStrings","banjo","bass","bassGuitar","bells","bongoConga","brass","cello","celeste","churchOrgan","clarinet","doubleBass","drumKit","electricGuitar","electricOrgan","electricPiano","electronicDrums","flute","frenchHorn","glockenspiel","harp","harpsichord","luteOud","mandolin","marimba","oboe","percussion","piano","pizzicato","sax","sitar","steelDrums","strings","synth","tabla","taiko","trumpet","tuba","ukulele","vibraphone","violin","woodwinds","xylophone"]},"title":"Instrument","description":"The instruments used in the sound template.\n","example":["piano","strings"]},"energy":{"type":"array","items":{"type":"string","title":"Energy","description":"Allowed values for sound-template energy.","enum":["high","medium","low","variable"]},"title":"Energy","description":"The energy of the sound template.\n","example":["low"]},"key":{"type":"array","items":{"type":"string","title":"Musical Key","description":"Allowed values for sound-template key.","enum":["abMajor","aMajor","aMinor","bbMajor","bbMinor","bMajor","bMinor","cMajor","cMinor","csMinor","dbMajor","dMajor","dMinor","dsMinor","ebMajor","eMajor","eMinor","fMajor","fMinor","fsMajor","fsMinor","gMajor","gMinor","gsMinor"]},"title":"Key","description":"The key of the sound template.\n","example":["aMajor"]},"mood":{"type":"array","items":{"type":"string","title":"Allowed moods","description":"Moods are used to guide sound design recommendation from AudioStack's sound library.","enum":["aggressive","calm","chilled","dark","energetic","epic","ethereal","happy","romantic","sad","scary","sexy","uplifting"]},"title":"Mood","description":"The moods of the sound template.\n","example":["calm"]},"tempo":{"type":"array","items":{"type":"string","title":"Tempo","description":"Allowed values for sound-template tempo.","enum":["slow","medium","fast"]},"title":"Tempo","description":"The tempo of the sound template.\n","example":["medium"]},"holidays":{"type":"array","items":{"type":"string","title":"Holidays","description":"The holidays for which the sound template is applicable.","enum":["Christmas","Valentines","Summer","Easter","Halloween","Other"]},"title":"Holidays","description":"The holidays for which the sound template is applicable.\n","example":["Christmas"]}}}}},"SoundEffectResponse":{"type":"object","description":"Sound effect item in the query response.","properties":{"alias":{"type":"string","example":"horse_coughing","title":"Alias","description":"The alias of the sound effect.\n"},"name":{"type":"string","example":"Horse Coughing","title":"Name","description":"The name of the sound effect.\n"},"type":{"example":"public","title":"Type","description":"The type of the sound effect. All sound effects are currently `public`.\n","type":"string","enum":["public"]},"duration":{"type":"number","format":"float","example":8.9,"title":"Duration in seconds","description":"The duration of the sound effect in seconds.\n"},"audioSample":{"type":"string","format":"uri","example":"https://file.api.audio/sound-effect-samples/example.mp3","title":"Audio sample","description":"URL of the audio sample for the sound effect.\n"},"soundEffectType":{"example":"oneShot","$ref":"#/components/schemas/PostSoundEffectsQueryRequest/properties/filters/items/properties/in/oneOf/1/properties/soundEffectType/items"},"description":{"type":"string","title":"Description","description":"Free text description of the sound effect.\n","example":"A deep, throaty cough sound from a horse, suitable for equestrian scenes or animal soundscapes."},"meta":{"type":"object","title":"Metadata","description":"Additional metadata for the sound effect.\n","properties":{"category":{"type":"array","items":{"type":"string","title":"Sound effect category (follows UCS categories)","description":"Allowed values for sound effect category.","enum":["AIR","AIRCRAFT","ALARMS","AMBIENCE","ANIMALS","ARCHIVED","BEEPS","BELLS","BIRDS","BOATS","BULLETS","CARTOON","CERAMICS","CHAINS","CHEMICALS","CLOCKS","CLOTH","COMMUNICATIONS","COMPUTERS","CREATURES","CROWDS","DESIGNED","DESTRUCTION","DIRT & SAND","DOORS","DRAWERS","ELECTRICITY","EQUIPMENT","EXPLOSIONS","FARTS","FIGHT","FIRE","FIREWORKS","FOLEY","FOOD & DRINK","FOOTSTEPS","GAMES","GEOTHERMAL","GLASS","GORE","GUNS","HORNS","HUMAN","ICE","LASERS","LEATHER","LIQUID & MUD","MACHINES","MAGIC","MECHANICAL","METAL","MOTORS","MOVEMENT","MUSICAL","NATURAL DISASTER","OBJECTS","PAPER","PLASTIC","RAIN","ROBOTS","ROCKS","ROPE","RUBBER","SCIFI","SNOW","SPORTS","SWOOSHES","TOOLS","TOYS","TRAINS","USER INTERFACE","VEGETATION","VEHICLES","VOICES","WATER","WEAPONS","WEATHER","WHISTLES","WIND","WINDOWS","WINGS","WOOD"]},"example":["ANIMALS"]},"subcategory":{"type":"array","items":{"type":"string","title":"Sound effect subcategory (follows UCS subcategories)","description":"Allowed values for sound effect subcategory.","enum":["ACID","ACTIVITY","ADR","AIR","AIR BOAT","AIR POWERED","ALARM","ALERT","ALIEN","ALPINE","AMPHIBIAN","AMUSEMENT","ANGELIC","ANGRY","ANIMAL","ANTIQUE","APPLAUSE","APPLIANCE","AQUATIC","ARC","ARCADE","ARMOR","ARROW","ARTILLERY","ASSET","ATV","AUDIO VISUAL","AUTOMATIC","AVALANCHE","AVIAN","AXE","BABY","BAG","BASS DIVE","BAT","BATTLE","BEAM","BEAST","BEEP","BELL","BELLS","BICYCLE","BIRD","BIRD OF PREY","BIRDSONG","BLOB","BLOOD","BLOW","BLUNT","BOARD","BODYFALL","BOING","BONE","BOOK","BOOM","BOUNCE","BOW","BOW WASH","BRAAM","BRAKE","BRASS","BREAK","BREATH","BRIDLE & TACK","BUBBLES","BURN","BURNING","BURP","BURST","BUS","BUZZ & HUM","BUZZER","BY","CABINET","CAMERA","CANNON","CAR","CASINO","CAT DOMESTIC","CAT WILD","CELEBRATION","CELLPHONE","CHEER","CHEERING","CHILD","CHILDREN","CHIME","CHORAL","CLACK","CLANG","CLICK","CLOCK","CLOTH","COIN","COLLAPSE","COMBUSTION","COMMERCIAL","COMPOSITE","COMPUTER","CONCRETE","CONSTRUCTION","CONTAINER","CONVERSATION","COOKING","COUGH","COURT","COVERING","CRACKLE","CRASH & DEBRIS","CREAK","CREATURE","CROW","CROWD","CRYING","DATA","DESERT","DESIGNED","DIESEL","DINOSAUR","DISTORTION","DOG","DOG WILD","DOOR","DOORBELL","DRAGON","DRAIN","DRINKING","DRIP","DRONE","DUNGEON","DUST","EARTHQUAKE","EATING","EERIE","EFFORTS","ELECTRIC","ELECTROMAGNETIC","ELECTRONIC","ELEMENTAL","ELEVATOR","EMERGENCY","ENERGY","ESCALATOR","ETHEREAL","EVIL","EXPERIMENTAL","FAN","FANTASY","FARM","FASHION","FEET","FEMALE","FIELD","FISHING","FIZZ","FLAP","FLESH","FLOW","FLUTTER","FOREST","FOUNTAIN","FOWL","FREIGHT","FRICTION","FUMAROLE","FURNITURE","FUTZED","GARDEN","GAS","GATE","GEARS","GENERAL","GENERIC BY","GEYSER","GLASS","GLASSWARE","GLITCH","GONG","GRAB","GRANULAR","GRASS","GRASSLAND","GUN","GUST","GYM","HAIL","HAND","HANDBELL","HANDLE","HANDS","HARD DRIVE","HARDWARE","HEARTBEAT","HELICOPTER","HIGH SPEED","HISS","HISTORICAL","HITECH","HORN","HORSE","HOSPITAL","HOUSEHOLD","HUMAN","HUMANOID","HVAC","HYDRAULIC & PNEUMATIC","IGNITE","IMPACT","IMPULSE RESPONSE","INDOOR","INDUSTRIAL","INGREDIENTS","INSECT","INSECTOID","INSTRUMENT","INTERIOR","JALOPY","JET","JEWELRY","KEYBOARD & MOUSE","KEYED","KEYS","KISS","KITCHENWARE","KNIFE","KNOCK","LAKESIDE","LAP","LARGE","LATCH","LAUGH","LAUGHTER","LAVA","LEAVES","LEVER","LOCK","LOFI","LOOP","LOOP GROUP","LUGGAGE","MACHINE","MALE","MARKET","MECHANICAL","MECHANICS","MECHANISM","MEDICAL","METAL","MICROPHONE","MILITARY","MISC","MIX","MONSTER","MORPH","MOTION","MOTORBOAT","MOTORCYCLE","MOVEMENT","MUD POTS","MUSICAL","NAUTICAL","OFFICE","OOZE","PACKAGING","PANIC","PARK","PEE","PERCUSSION","PERCUSSION TUNED","PERFORMANCE","PFX","PHONOGRAPH","PISTOL","PLASTIC","PLUCK","PLUCKED","PLUMBING","PNEUMATIC","POLEARM","POOF","POP","POUR","POWER","PRESENCE","PRIMATE","PRISON","PRODUCTION","PROP","PROTEST","PUBLIC PLACE","PULLEY","PUMP","QUIET","RACING","RADIO","RADIO CONTROLLED","RATCHET","RAW","REACTION","REAL","RECREATIONAL","REFERENCE","RELAY","RELIGIOUS","REPTILE","REPTILIAN","RESIDENTIAL","RESTAURANT & BAR","RETRO","REVOLVING","RHYTHMIC","RICOCHET","RIFLE","RIP","RISER","ROCKET","RODENT","ROLLER","ROOM TONE","ROWBOAT","RUMBLE","RURAL","SAILBOAT","SAMPLE","SCENE","SCHOOL","SCIFI","SCREAM","SEA","SEASIDE","SERVO","SHAKE","SHAKEN","SHELL","SHIMMER","SHIP","SHOTGUN","SIEGE","SINGING","SIREN","SIZZLE","SKATE","SKID","SKIN","SLIDING","SMALL","SNEEZE","SNIFF","SNORE","SONG & PHRASE","SONGBIRD","SOURCE","SPACESHIP","SPARKS","SPELL","SPIT","SPLASH","SPLAT","SPORT","SPRAY","SQUEAK","SQUISH","STAB","STATIC","STEAM","STINGER","STONE","STORM","STRETCH","STRINGED","SUBMARINE","SUBURBAN","SUBWAY","SUCTION","SUPPRESSED","SURF","SUSPENSION","SWAMP","SWINGING","SWISH","SWITCH","SWORD","SYNTHESIZED","SYNTHETIC","TABLEWARE","TACTICAL","TAPE","TELEMETRY","TELEPHONE","TELEVISION","TEST TONE","THUNDER","TICK","TIMER","TIRE","TONAL","TORCH","TORNADO","TOWN","TOY","TRACK & FIELD","TRADEMARKED","TRADITIONAL","TRAFFIC","TRAM","TRANSCEIVER","TRANSPORTATION","TREE","TROPICAL","TRUCK VAN & SUV","TSUNAMI","TUNDRA","TURBINE","TURBULENT","TWANG","TYPEWRITER","TYPHOON","UMBRELLA","UNDERGROUND","UNDERWATER","URBAN","UTILITY","VEGETATION","VEHICLE","VIDEO","VOCAL","VOLCANO","VOMIT","WADING","WAGON","WALLA","WARBLE","WARFARE","WATER","WATERFALL","WAVE","WEAPON","WHEELED","WHIP","WHISPER","WHISTLE","WHOOSH","WILD","WINDOW","WINTER","WOOD","WOODWIND","WORK IN PROGRESS","WRITING","WTF","ZAP","ZIP","ZIPPER"]},"example":["HORSE"]}}}}},"PostSoundTemplatesQueryResponse":{"allOf":[{"$ref":"#/components/schemas/GetStoryResponse/allOf/0"},{"type":"object","properties":{"message":{"type":"string","description":"Success message.","example":"Fetched sound templates"},"data":{"type":"object","required":["soundTemplates","pageInfo"],"properties":{"soundTemplates":{"minItems":0,"type":"array","items":{"$ref":"#/components/schemas/SoundTemplateResponse"}},"pageInfo":{"$ref":"#/components/schemas/PostVoicesQueryResponse/allOf/1/properties/data/properties/pageInfo"}}}},"required":["message","data"]}]},"PostSoundTemplatesQueryUnprocessableEntityResponse":{"type":"object","description":"Error response when sound template query fails (e.g. search service error).","properties":{"message":{"type":"string","example":"1 validation error for SoundTemplateQueryPayload. Field required [type=missing, input_value={'energy': ['invalid']}, input_type=dict]\n    For further information visit https://errors.pydantic.dev/2.11/v/missing\nfilters.0.in.EnergyFilter.energy.0\n  Input should be 'variable', 'low', 'medium' or 'high' [type=enum, input_value='invalid', input_type=str]"},"errors":{"type":"array","example":["Validation error"],"items":{"type":"string"}}}},"PostSoundEffectsQueryResponse":{"allOf":[{"$ref":"#/components/schemas/GetStoryResponse/allOf/0"},{"type":"object","properties":{"message":{"type":"string","description":"Success message.","example":"Fetched sound effects"},"data":{"type":"object","required":["soundEffects","pageInfo"],"properties":{"soundEffects":{"minItems":0,"type":"array","items":{"$ref":"#/components/schemas/SoundEffectResponse"}},"pageInfo":{"$ref":"#/components/schemas/PostVoicesQueryResponse/allOf/1/properties/data/properties/pageInfo"}}}},"required":["message","data"]}]},"PostSoundEffectsQueryUnprocessableEntityResponse":{"type":"object","description":"Error response when sound effect query fails (e.g. validation or search service error).","properties":{"message":{"type":"string","example":"1 validation error for SoundEffectQueryPayload. Field required [type=missing, input_value={'soundEffectType': ['invalid']}, input_type=dict]"},"errors":{"type":"array","example":["Validation error"],"items":{"type":"string"}}}}}}}