# auray-serverless/minimax/speech-2-8 `POST https://queue.auray.run/auray-serverless/minimax/speech-2-8` submits; the response carries a `request_id` and the three URLs to use next. `POST https://auray.run/auray-serverless/minimax/speech-2-8` is the same request run synchronously: the connection is held and the response is the model's OUTPUT, the same document the result URL would have answered. A request that usually takes longer than a run may hold its connection is refused `400 model_not_synchronous` there before anything is charged, naming `expected_seconds` and `wait_ceiling_seconds` — submit it to the queue instead. Past the deadline a run is `504 run_timed_out` with `X-Auray-Request-Timeout-Type: user` — the request is still alive, running and charged or, while it waits to start, not yet charged (`charged` says which) — so poll `status_url` rather than resending, or resend with the same `idempotency_key` to be handed this request again instead of a second one. A run holds one of the connections this platform, this product and your account may keep waiting; with all of them in use it is refused `429 wait_capacity` with `Retry-After` before anything is charged (`charged: false`), and retrying after that pause is safe. One of Auray's catalogue models, billed once in credits. Whether it runs right now is `GET /v1/catalogue`'s `addresses` (no key needed): `connected` runs; `described` answers `501 model_not_connected` and `paused` `503 model_disabled`, both before anything is charged. Price: Credits per character of text (counted as `#speech.text`): 0.0093. From 74 to 50000 characters a request. Quoted when you submit, at the most the request can cost; the charge settles to what the job cost and never above the quote. Fields as published for this model. Every error code is explained at https://auray.ai/docs/api/errors. Address: auray-serverless/minimax/speech-2-8 Servers: https://queue.auray.run · https://auray.run Scope: audio:write Auth: Authorization: Bearer auray_sk_… API enabled: yes ## Input - audioSettings.bitrate (integer, optional, default: 128, one of: 32, 64, 128, 256) — Target audio bitrate in kbps. Constraints depend on the output format. Documented range: 1 or more. - audioSettings.sampleRate (integer, optional, default: 32000, one of: 8000, 16000, 22050, 24000, 32000, 44100) — Audio sample rate in Hz. Documented range: 1,000 or more. - audioSettings.channels (integer, optional, default: 2, one of: 1, 2) — Number of audio channels in the generated output (1 for Mono, 2 for Stereo). - speech.text (string, required) — Text to convert to speech. Documented range: up to 50,000 characters. - speech.voice (string, required, one of: "English_expressive_narrator", "English_radiant_girl", "English_magnetic_voiced_man", "English_compelling_lady1", "English_Aussie_Bloke", "English_captivating_female1", "English_Upbeat_Woman", "English_Trustworth_Man", "English_CalmWoman", "English_UpsetGirl", "English_Gentle-voiced_man", "English_Whispering_girl", "English_Diligent_Man", "English_Graceful_Lady", "English_ReservedYoungMan", "English_PlayfulGirl", "English_ManWithDeepVoice", "English_MaturePartner", "English_FriendlyPerson", "English_MatureBoss", "English_Debator", "English_LovelyGirl", "English_Steadymentor", "English_Deep-VoicedGentleman", "English_Wiselady", "English_CaptivatingStoryteller", "English_DecentYoungMan", "English_SentimentalLady", "English_ImposingManner", "English_SadTeen", "English_PassionateWarrior", "English_WiseScholar", "English_Soft-spokenGirl", "English_SereneWoman", "English_ConfidentWoman", "English_PatientMan", "English_Comedian", "English_BossyLeader", "English_Strong-WilledBoy", "English_StressedLady", "English_AssertiveQueen", "English_AnimeCharacter", "English_Jovialman", "English_WhimsicalGirl", "English_Kind-heartedGirl", "Chinese (Mandarin)_Reliable_Executive", "Chinese (Mandarin)_News_Anchor", "Chinese (Mandarin)_Unrestrained_Young_Man", "Chinese (Mandarin)_Mature_Woman", "Arrogant_Miss", "Robot_Armor", "Chinese (Mandarin)_Kind-hearted_Antie", "Chinese (Mandarin)_HK_Flight_Attendant", "Chinese (Mandarin)_Humorous_Elder", "Chinese (Mandarin)_Gentleman", "Chinese (Mandarin)_Warm_Bestie", "Chinese (Mandarin)_Stubborn_Friend", "Chinese (Mandarin)_Sweet_Lady", "Chinese (Mandarin)_Southern_Young_Man", "Chinese (Mandarin)_Wise_Women", "Chinese (Mandarin)_Gentle_Youth", "Chinese (Mandarin)_Warm_Girl", "Chinese (Mandarin)_Male_Announcer", "Chinese (Mandarin)_Kind-hearted_Elder", "Chinese (Mandarin)_Cute_Spirit", "Chinese (Mandarin)_Radio_Host", "Chinese (Mandarin)_Lyrical_Voice", "Chinese (Mandarin)_Straightforward_Boy", "Chinese (Mandarin)_Sincere_Adult", "Chinese (Mandarin)_Gentle_Senior", "Chinese (Mandarin)_Crisp_Girl", "Chinese (Mandarin)_Pure-hearted_Boy", "Chinese (Mandarin)_Soft_Girl", "Chinese (Mandarin)_IntellectualGirl", "Chinese (Mandarin)_Warm_HeartedGirl", "Chinese (Mandarin)_Laid_BackGirl", "Chinese (Mandarin)_ExplorativeGirl", "Chinese (Mandarin)_Warm-HeartedAunt", "Chinese (Mandarin)_BashfulGirl", "Japanese_IntellectualSenior", "Japanese_DecisivePrincess", "Japanese_LoyalKnight", "Japanese_DominantMan", "Japanese_SeriousCommander", "Japanese_ColdQueen", "Japanese_DependableWoman", "Japanese_GentleButler", "Japanese_KindLady", "Japanese_CalmLady", "Japanese_OptimisticYouth", "Japanese_GenerousIzakayaOwner", "Japanese_SportyStudent", "Japanese_InnocentBoy", "Japanese_GracefulMaiden", "Cantonese_ProfessionalHost (F)", "Cantonese_GentleLady", "Cantonese_ProfessionalHost (M)", "Cantonese_PlayfulMan", "Cantonese_CuteGirl", "Cantonese_KindWoman", "Korean_AirheadedGirl", "Korean_AthleticGirl", "Korean_AthleticStudent", "Korean_BraveAdventurer", "Korean_BraveFemaleWarrior", "Korean_BraveYouth", "Korean_CalmGentleman", "Korean_CalmLady", "Korean_CaringWoman", "Korean_CharmingElderSister", "Korean_CharmingSister", "Korean_CheerfulBoyfriend", "Korean_CheerfulCoolJunior", "Korean_CheerfulLittleSister", "Korean_ChildhoodFriendGirl", "Korean_CockyGuy", "Korean_ColdGirl", "Korean_ColdYoungMan", "Korean_ConfidentBoss", "Korean_ConsiderateSenior", "Korean_DecisiveQueen", "Korean_DominantMan", "Korean_ElegantPrincess", "Korean_EnchantingSister", "Korean_EnthusiasticTeen", "Korean_FriendlyBigSister", "Korean_GentleBoss", "Korean_GentleWoman", "Korean_HaughtyLady", "Korean_InnocentBoy", "Korean_IntellectualMan", "Korean_IntellectualSenior", "Korean_LonelyWarrior", "Korean_MatureLady", "Korean_MysteriousGirl", "Korean_OptimisticYouth", "Korean_PlayboyCharmer", "Korean_PossessiveMan", "Korean_QuirkyGirl", "Korean_ReliableSister", "Korean_ReliableYouth", "Korean_SassyGirl", "Korean_ShyGirl", "Korean_SoothingLady", "Korean_StrictBoss", "Korean_SweetGirl", "Korean_ThoughtfulWoman", "Korean_WiseElf", "Korean_WiseTeacher", "Spanish_SereneWoman", "Spanish_MaturePartner", "Spanish_CaptivatingStoryteller", "Spanish_Narrator", "Spanish_WiseScholar", "Spanish_Kind-heartedGirl", "Spanish_DeterminedManager", "Spanish_BossyLeader", "Spanish_ReservedYoungMan", "Spanish_ConfidentWoman", "Spanish_ThoughtfulMan", "Spanish_Strong-WilledBoy", "Spanish_SophisticatedLady", "Spanish_RationalMan", "Spanish_AnimeCharacter", "Spanish_Deep-tonedMan", "Spanish_Fussyhostess", "Spanish_SincereTeen", "Spanish_FrankLady", "Spanish_Comedian", "Spanish_Debator", "Spanish_ToughBoss", "Spanish_Wiselady", "Spanish_Steadymentor", "Spanish_Jovialman", "Spanish_SantaClaus", "Spanish_Rudolph", "Spanish_Intonategirl", "Spanish_Arnold", "Spanish_Ghost", "Spanish_HumorousElder", "Spanish_EnergeticBoy", "Spanish_WhimsicalGirl", "Spanish_StrictBoss", "Spanish_ReliableMan", "Spanish_SereneElder", "Spanish_AngryMan", "Spanish_AssertiveQueen", "Spanish_CaringGirlfriend", "Spanish_PowerfulSoldier", "Spanish_PassionateWarrior", "Spanish_ChattyGirl", "Spanish_RomanticHusband", "Spanish_CompellingGirl", "Spanish_PowerfulVeteran", "Spanish_SensibleManager", "Spanish_ThoughtfulLady", "Portuguese_SentimentalLady", "Portuguese_BossyLeader", "Portuguese_Wiselady", "Portuguese_Strong-WilledBoy", "Portuguese_Deep-VoicedGentleman", "Portuguese_UpsetGirl", "Portuguese_PassionateWarrior", "Portuguese_AnimeCharacter", "Portuguese_ConfidentWoman", "Portuguese_AngryMan", "Portuguese_CaptivatingStoryteller", "Portuguese_Godfather", "Portuguese_ReservedYoungMan", "Portuguese_SmartYoungGirl", "Portuguese_Kind-heartedGirl", "Portuguese_Pompouslady", "Portuguese_Grinch", "Portuguese_Debator", "Portuguese_SweetGirl", "Portuguese_AttractiveGirl", "Portuguese_ThoughtfulMan", "Portuguese_PlayfulGirl", "Portuguese_GorgeousLady", "Portuguese_LovelyLady", "Portuguese_SereneWoman", "Portuguese_SadTeen", "Portuguese_MaturePartner", "Portuguese_Comedian", "Portuguese_NaughtySchoolgirl", "Portuguese_Narrator", "Portuguese_ToughBoss", "Portuguese_Fussyhostess", "Portuguese_Dramatist", "Portuguese_Steadymentor", "Portuguese_Jovialman", "Portuguese_CharmingQueen", "Portuguese_SantaClaus", "Portuguese_Rudolph", "Portuguese_Arnold", "Portuguese_CharmingSanta", "Portuguese_CharmingLady", "Portuguese_Ghost", "Portuguese_HumorousElder", "Portuguese_CalmLeader", "Portuguese_GentleTeacher", "Portuguese_EnergeticBoy", "Portuguese_ReliableMan", "Portuguese_SereneElder", "Portuguese_GrimReaper", "Portuguese_AssertiveQueen", "Portuguese_WhimsicalGirl", "Portuguese_StressedLady", "Portuguese_FriendlyNeighbor", "Portuguese_CaringGirlfriend", "Portuguese_PowerfulSoldier", "Portuguese_FascinatingBoy", "Portuguese_RomanticHusband", "Portuguese_StrictBoss", "Portuguese_InspiringLady", "Portuguese_PlayfulSpirit", "Portuguese_ElegantGirl", "Portuguese_CompellingGirl", "Portuguese_PowerfulVeteran", "Portuguese_SensibleManager", "Portuguese_ThoughtfulLady", "Portuguese_TheatricalActor", "Portuguese_FragileBoy", "Portuguese_ChattyGirl", "Portuguese_Conscientiousinstructor", "Portuguese_RationalMan", "Portuguese_WiseScholar", "Portuguese_FrankLady", "Portuguese_DeterminedManager", "French_Male_Speech_New", "French_Female_News Anchor", "French_CasualMan", "French_MovieLeadFemale", "French_FemaleAnchor", "French_MaleNarrator", "Indonesian_SweetGirl", "Indonesian_ReservedYoungMan", "Indonesian_CharmingGirl", "Indonesian_CalmWoman", "Indonesian_ConfidentWoman", "Indonesian_CaringMan", "Indonesian_BossyLeader", "Indonesian_DeterminedBoy", "Indonesian_GentleGirl", "German_FriendlyMan", "German_SweetLady", "German_PlayfulMan", "Russian_HandsomeChildhoodFriend", "Russian_BrightHeroine", "Russian_AmbitiousWoman", "Russian_ReliableMan", "Russian_CrazyQueen", "Russian_PessimisticGirl", "Russian_AttractiveGuy", "Russian_Bad-temperedBoy", "Italian_BraveHeroine", "Italian_Narrator", "Italian_WanderingSorcerer", "Italian_DiligentLeader", "Dutch_kindhearted_girl", "Dutch_bossy_leader", "Vietnamese_kindhearted_girl", "Arabic_CalmWoman", "Arabic_FriendlyGuy", "Turkish_CalmWoman", "Turkish_Trustworthyman", "Ukrainian_CalmWoman", "Ukrainian_WiseScholar", "Thai_male_1_sample8", "Thai_male_2_sample2", "Thai_female_1_sample1", "Thai_female_2_sample2", "Polish_male_1_sample4", "Polish_male_2_sample3", "Polish_female_1_sample1", "Polish_female_2_sample3", "Romanian_male_1_sample2", "Romanian_male_2_sample1", "Romanian_female_1_sample4", "Romanian_female_2_sample1", "greek_male_1a_v1", "Greek_female_1_sample1", "Greek_female_2_sample3", "czech_male_1_v1", "czech_female_5_v7", "czech_female_2_v2", "finnish_male_3_v1", "finnish_male_1_v2", "finnish_female_4_v1", "hindi_male_1_v2", "hindi_female_2_v1", "hindi_female_1_v2") — Voice identifier from the Minimax voice library. - settings.languageBoost (string, optional, default: "auto", one of: "zh", "yue", "en", "ar", "ru", "es", "fr", "pt", "de", "tr", "nl", "uk", "vi", "id", "ja", "it", "ko", "th", "pl", "ro", "el", "cs", "fi", "hi", "bg", "da", "he", "ms", "fa", "sk", "sv", "hr", "fil", "hu", "no", "sl", "ca", "nn", "ta", "af", "auto") — Language detection and override for Speech synthesis. - settings.turbo (boolean, optional) — Enable faster generation with potentially reduced quality. - outputType (string, optional, default: "URL", one of: "URL") — Audio output type. - outputFormat (string, optional, default: "MP3", one of: "MP3", "WAV", "FLAC", "OGG") — Specifies the file format of the generated output. The available values depend on the task type and the specific model's capabilities. - \`JPG\`: Best for photorealistic images with smaller file sizes (no transparency). - \`PNG\`: Lossless compression, supports high quality and transparency (alpha channel). - \`WEBP\`: Modern format providing superior compression and transparency support. - \`MP4\`: Widely supported video container (H.264), recommended for general use. - \`WEBM\`: Optimized for web delivery. - \`MOV\`: QuickTime format, common in professional workflows (Apple ecosystem). - \`GIF\`: Animated image format (no audio), suitable for short loops or previews. - \`MP3\`: Compressed audio, smaller file size. - \`WAV\`: Uncompressed, high-quality audio. - \`FLAC\`: Lossless compression. - \`OGG\`: Open-source compressed audio format (Vorbis codec). - \`SVG\`: Scalable Vector Graphics. - \`TIFF\`: High-quality output supporting layers. - \`GLB\`: Binary glTF format for 3D models, including geometry, textures, and PBR materials. > [!NOTE] > \*\*Transparency\*\*: If you are using features like background removal or LayerDiffuse that require transparency, you must select a format that supports an alpha channel (e.g., \`PNG\`, \`WEBP\`, \`TIFF\`). \`JPG\` does not support transparency. - idempotency_key (string, optional) — Your own name for this request. Send the same one twice and the second call is answered with the first request rather than charged again. `Idempotency-Key:` as a header is accepted as an alias — that is the spelling a retrying proxy replays, and the one to use when running a model on `auray.run`, where a request that outlives its connection is answered 504 and recovered by replay. Omit it and the platform mints one. ## Rules Across fields, as the model's documentation states them; judged before any charge, and warned (Deprecation) until enforcement starts. - When `outputFormat` is one of "WAV", "FLAC", do not send `audioSettings`. - When `outputFormat` is "MP3", when `audioSettings.sampleRate` is one of 16000, 22050, 24000, `audioSettings.bitrate` must be between 8 and 160. When `outputFormat` is "MP3", when `audioSettings.sampleRate` is one of 8000, `audioSettings.bitrate` must be between 8 and 64. - When `outputFormat` is "OGG", `audioSettings.sampleRate` must be one of 8000, 16000, 24000. When `outputFormat` is "OGG", when `audioSettings.sampleRate` is 8000 and `audioSettings.channels` is 2, `audioSettings.bitrate` must be between 16 and 80. When `outputFormat` is "OGG", when `audioSettings.sampleRate` is 16000 and `audioSettings.channels` is 1, `audioSettings.bitrate` must be between 16 and 96. When `outputFormat` is "OGG", when `audioSettings.sampleRate` is 16000 and `audioSettings.channels` is 2, `audioSettings.bitrate` must be between 24 and 192. When `outputFormat` is "OGG", when `audioSettings.sampleRate` is 24000 and `audioSettings.channels` is 1, `audioSettings.bitrate` must be between 16 and 80. When `outputFormat` is "OGG", when `audioSettings.sampleRate` is 24000 and `audioSettings.channels` is 2, `audioSettings.bitrate` must be between 32 and 160. When `outputFormat` is "OGG", when `audioSettings.sampleRate` is 8000 and `audioSettings.channels` is 1, `audioSettings.bitrate` must be between 8 and 40. ## Response A submit answers the status document (`status`: IN_QUEUE, IN_PROGRESS or COMPLETED; `request_id`; `queue_position` while queued; `logs`; `metrics`) and then, beside it: - product (string) — Which of this platform's products ran it. - provider_job_id (string) — The id the job runs under, once it has been handed to its model — possibly while still `queued`; null before. Quote it to support. - model (string) — The address that ran it, echoed back. - engine (string) — The service's own name for the model that ran, where it reports one — a catalogue model's is its `id` on GET /v1/models; null otherwise. What `model` carried before it carried the address. - attribution (string) — The credit line the model's licence requires you to show; null where none is required. - credits_charged (integer) — What this job cost. 0 on a replay, or when a pass or a promotion paid for it (`coverage` says which). - credits_quoted (integer) — What this job costs, in credits: the price it was quoted at submit. Equal to `credits_charged` once it has been charged; while it waits in the queue to start, `credits_charged` is 0 and this is what it will be charged when it starts (a cancel before then costs nothing) — and a replay of a job still waiting quotes the body that job was queued with, which is the one it runs, not the replay's. For a catalogue model it is the hold, and the settle may give part of it back — a settled read's `credits_charged` says what it finally cost. - coverage (object) — Present when a pass or a promotion paid for this job — `{"by": "pass", "pass": "seedance-2-5"}` or `{"by": "promotion"}`, and `credits_charged` is 0 — or when you hold a pass for this model that did not cover this job: `{"by": null, "miss": {"pass": "video", "why": "door"}}`, `why` being `door` (the pass does not work here) or `shape` (it does not cover this kind of job). Absent otherwise. Send `X-Auray-Covered-Only: 1` to run a job only if a pass or a promotion pays for it. - credits_remaining (integer) — The balance after it. - expected_seconds (integer) — A rough render time, for a progress bar; 0 where nothing is published. - give_up_after_seconds (integer) — The longest this job may take from its submit: the longest it may wait to start (your X-Auray-Request-Timeout, or the product's queue deadline) plus the longest it may run before it is stopped and refunded. Waiting longer is waiting for nothing; the official clients wait this long by default. For a catalogue model the part it may run is its own reap as its registry row states it (`lifecycle.stall_ceiling_seconds` on GET /v1/models); otherwise these are the published limits: we may lengthen them during an incident, never shorten them. - replayed (boolean) — `true` when your `idempotency_key` matched a job this platform already had. Nothing was charged and nothing was rendered twice. - waited (boolean) — Present when `wait` was asked for. The rest of this group comes with it. - timed_out (boolean) — The wait ran out before the job settled. Still a 2xx, never a 408 or 504 — a library that retries on those would resubmit and you would pay twice. Poll `status_url`. - wait_declined (string) — No seat was free to hold the connection with, so the request was answered at once. `platform_busy`: no product would have helped. `product_busy`: another product's queue might. `account_busy`: you are already waiting on every seat your plan's lanes allow. The job is running either way; poll it. - status_url (string) — Poll this. - response_url (string) — Fetch the result from this once the status is COMPLETED. - cancel_url (string) — `PUT` to this to ask for a cancellation. Poll `status_url`, fetch `response_url` once COMPLETED, `PUT` `cancel_url` to stop it. ## Price Price: Credits per character of text (counted as `#speech.text`): 0.0093. From 74 to 50000 characters a request. Quoted when you submit, at the most the request can cost; the charge settles to what the job cost and never above the quote. ## Paths POST https://queue.auray.run/auray-serverless/minimax/speech-2-8 Run auray-serverless/minimax/speech-2-8 GET https://queue.auray.run/auray-serverless/minimax/speech-2-8/requests/{request_id} The result GET https://queue.auray.run/auray-serverless/minimax/speech-2-8/requests/{request_id}/status The status PUT https://queue.auray.run/auray-serverless/minimax/speech-2-8/requests/{request_id}/cancel Ask for a cancellation ## Example ```bash curl -X POST https://queue.auray.run/auray-serverless/minimax/speech-2-8 \ -H 'Authorization: Bearer auray_sk_…' \ -H 'Content-Type: application/json' \ -d '{"speech":{"text":"a brass orrery on a walnut desk, morning light from a window to the left","voice":"English_expressive_narrator"}}' ``` ## Full contract https://api.auray.ai/v1/models/auray-serverless/minimax/speech-2-8/openapi.json