Vai al contenuto principale

MiniMax Speech 2.8 HD text-to-speech, la variante a maggiore fedeltà, legge un testo con una di 472 voci di sistema e un’emozione a scelta. Restituisce di default un MP3 mono a 32 kHz, con velocità, tono, volume e tag sonori come (sighs).

Da $0.12/1.000 caratteri

Playground

Invia una richiesta

Guida rapida

Gli esempi usano le definizioni pubbliche dei parametri dell’endpoint selezionato. Sostituisci la chiave API e i media di esempio, poi invia la richiesta dal tuo server.

SDK e integrazioni
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

Autenticazione dell’API

Tieni la chiave API nella variabile d’ambiente del server SPICY_API_KEY. Per le richieste JSON usa l’autenticazione Bearer e Content-Type: application/json.

Authorization: Bearer $SPICY_API_KEY
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
  -d '{
  "model": "minimax/speech-2.8-hd/text-to-speech",
  "input": {
    "text": "Welcome back. Your files finished rendering a minute ago and are ready to download.",
    "emotion": "neutral",
    "language": "auto",
    "voice_id": "Calm_Woman",
    "output_format": "mp3"
  }
}'

# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Generato dallo schema di input di questo modello, lo stesso su cui l’API valida ogni richiesta.

Parametri di input

Metti questi campi dentro l’oggetto input del corpo della richiesta. Nomi e tipi corrispondono all’API. Quando un valore predefinito non è indicato, non darlo per scontato.

textstringObbligatorio

Le parole da pronunciare, esattamente come sono scritte. I tag sonori tra parentesi come (sighs) o (laughs) vengono interpretati come suoni, non letti ad alta voce. Fatturato ogni 1.000 caratteri, inclusi spazi e punteggiatura. Fino a 5.000 caratteri.

Predefinito
Non specificato
Vincoli
minLength:1
maxLength:5000
pronunciation_dictarray<object>Facoltativo

Fino a 100 coppie {alias, pronunciation}. Ogni occorrenza di alias in text viene letta come pronunciation: parole normali (Omg → Oh my god) oppure IPA tra parentesi come (rɪˈzjuːm). alias non può contenere una barra. Non cambia il prezzo; si paga solo text.

Predefinito
Non specificato
Vincoli
maxItems:100
english_normalizationbooleanFacoltativo

Se attivo, numeri, date e abbreviazioni nel testo inglese vengono letti come li direbbe una persona, per esempio 1990 come “nineteen ninety”. Disattivato per impostazione predefinita. Non cambia il prezzo.

Predefinito
false
audio_channelsstringFacoltativo

Canali in uscita: mono (predefinito) o stereo. Non cambia il prezzo.

Predefinito
Non specificato
Valori ammessi
"mono""stereo"
bitrateintegerFacoltativo

Bitrate dell'MP3 in bit al secondo: 32000, 64000, 128000 o 256000. Valore predefinito: 128000; vale solo quando output_format è mp3. Non cambia il prezzo.

Predefinito
Non specificato
Valori ammessi
3200064000128000256000
sample_rateintegerFacoltativo

Frequenza di campionamento dell'audio in Hz: 8000, 16000, 22050, 24000, 32000, 44100. Valore predefinito: 32000. Non cambia il prezzo.

Predefinito
Non specificato
Valori ammessi
80001600022050240003200044100
output_formatstringFacoltativo

Formato del file: mp3 (predefinito), wav, flac oppure pcm, cioè campioni grezzi a 16 bit little-endian senza intestazione, al sample_rate e con gli audio_channels scelti. I browser non riproducono il pcm; scegli wav per avere gli stessi campioni in un file riproducibile. Non cambia il prezzo.

Predefinito
"mp3"
Valori ammessi
"mp3""wav""flac""pcm"
languagestringFacoltativo

Un'indicazione che migliora la pronuncia per una delle 40 lingue. Valore predefinito: auto, che rileva la lingua dallo script.

Predefinito
"auto"
Valori ammessi
"auto""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"
volumenumberFacoltativo

Moltiplicatore del volume da 0,1 a 10; 1 è il livello normale. Non cambia il prezzo.

Predefinito
1
Vincoli
minimum:0.1
maximum:10
pitchintegerFacoltativo

Spostamento dell'intonazione in semitoni, da -12 a 12; 0 mantiene l'altezza naturale della voce. Non cambia il prezzo.

Predefinito
0
Vincoli
minimum:-12
maximum:12
speednumberFacoltativo

Velocità del parlato da 0,5 (più lenta) a 2 (più veloce); 1 è il ritmo normale della voce. Non cambia il prezzo.

Predefinito
1
Vincoli
minimum:0.5
maximum:2
emotionstringFacoltativo

Una delle sette emozioni fisse — neutral, happy, sad, angry, fearful, disgusted o surprised — applicata all'intera lettura. Valore predefinito: neutral.

Predefinito
"neutral"
Valori ammessi
"neutral""happy""sad""angry""fearful""disgusted""surprised"
voice_idstringFacoltativo

Una delle 472 voci di sistema. Valore predefinito: Calm_Woman. Non è previsto alcun clonaggio né il caricamento di una voce di riferimento.

Predefinito
"Calm_Woman"
Valori ammessi
"Wise_Woman""Friendly_Person""Inspirational_girl""Deep_Voice_Man""Calm_Woman""Casual_Guy""Lively_Girl""Patient_Man""Young_Knight""Determined_Man""Lovely_Girl""Decent_Boy""Imposing_Manner""Elegant_Man""Abbess""Sweet_Girl_2""Exuberant_Girl""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_v3""English_Diligent_Man""English_Graceful_Lady""English_Husky_MetalHead""English_ReservedYoungMan""English_PlayfulGirl""English_ManWithDeepVoice""English_GentleTeacher""English_MaturePartner""English_FriendlyPerson""English_MatureBoss""English_Debator""whisper_man""English_Abbess""English_LovelyGirl""whisper_woman_1""English_Steadymentor""English_Deep-VoicedGentleman""English_DeterminedMan""English_Wiselady""English_CaptivatingStoryteller""English_AttractiveGirl""English_DecentYoungMan""English_SentimentalLady""English_ImposingManner""English_SadTeen""English_ThoughtfulMan""English_PassionateWarrior""English_DecentBoy""English_WiseScholar""English_Soft-spokenGirl""English_SereneWoman""English_ConfidentWoman""English_PatientMan""English_Comedian""English_GorgeousLady""English_BossyLeader""English_LovelyLady""English_Strong-WilledBoy""English_Deep-tonedMan""English_StressedLady""English_AssertiveQueen""English_AnimeCharacter""English_Jovialman""English_WhimsicalGirl""English_CharmingQueen""English_Kind-heartedGirl""English_FriendlyNeighbor""English_Sweet_Female_4""English_Magnetic_Male_2""English_Lively_Male_11""English_Friendly_Female_3""English_Steady_Female_1""English_Lively_Male_10""English_Magnetic_Male_12""English_Steady_Female_5""English_Insightful_Speaker""English_patient_man_v1""English_Persuasive_Man""English_Explanatory_Man""English_intellect_female_1""English_energetic_male_1""English_witty_female_1""English_Lucky_Robot""English_Cute_Girl""English_Sharp_Commentator""English_Honest_Man""angry_pirate_1""massive_kind_troll""movie_trailer_deep""peace_and_ease""moss_audio_6dc281eb-713c-11f0-a447-9613c873494c""moss_audio_c12a59b9-7115-11f0-a447-9613c873494c""moss_audio_076697ad-7144-11f0-a447-9613c873494c""moss_audio_737a299c-734a-11f0-918f-4e0486034804""moss_audio_19dbb103-7350-11f0-ad20-f2bc95e89150""moss_audio_7c7e7ae2-7356-11f0-9540-7ef9b4b62566""moss_audio_570551b1-735c-11f0-b236-0adeeecad052""moss_audio_ad5baf92-735f-11f0-8263-fe5a2fe98ec8""moss_audio_cedfd4d2-736d-11f0-99be-fe40dd2a5fe8""moss_audio_a0d611da-737c-11f0-ad20-f2bc95e89150""moss_audio_4f4172f4-737b-11f0-9540-7ef9b4b62566""moss_audio_62ca20b0-7380-11f0-99be-fe40dd2a5fe8""conversational_female_1_v1""conversational_female_2_v1""socialmedia_female_1_v1""BritishChild_male_1_v1""BritishChild_female_1_v1""Chinese (Mandarin)_Reliable_Executive""Chinese (Mandarin)_News_Anchor""Chinese (Mandarin)_Unrestrained_Young_Man""Chinese (Mandarin)_Mature_Woman""Arrogant_Miss""Chinese (Mandarin)_Kind-hearted_Antie""Robot_Armor""hunyin_6""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""Arabic_CalmWoman""Arabic_FriendlyGuy""Cantonese_ProfessionalHost(F)""Cantonese_GentleLady""Cantonese_ProfessionalHost(M)""Cantonese_PlayfulMan""Cantonese_CuteGirl""Cantonese_KindWoman""Cantonese_Narrator""Cantonese_WiselProfessor""Cantonese_IndifferentStaff""Dutch_kindhearted_girl""Dutch_bossy_leader""French_Male_Speech_New""French_Female_News Anchor""French_CasualMan""French_MovieLeadFemale""French_FemaleAnchor""French_MaleNarrator""French_Female Journalist""French_Female_Speech_New""German_FriendlyMan""German_SweetLady""German_PlayfulMan""Indonesian_SweetGirl""Indonesian_ReservedYoungMan""Indonesian_CharmingGirl""Indonesian_CalmWoman""Indonesian_ConfidentWoman""Indonesian_CaringMan""Indonesian_BossyLeader""Indonesian_DeterminedBoy""Indonesian_GentleGirl""Italian_BraveHeroine""Italian_Narrator""Italian_WanderingSorcerer""Italian_DiligentLeader""Italian_ReliableMan""Italian_AthleticStudent""Italian_ArrogantPrincess""Japanese_Whisper_Belle""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""Korean_PowerfulGirl""Korean_BossyMan""Korean_SweetGirl""Korean_CheerfulBoyfriend""Korean_EnchantingSister""Korean_ShyGirl""Korean_ReliableSister""Korean_StrictBoss""Korean_SassyGirl""Korean_ChildhoodFriendGirl""Korean_PlayboyCharmer""Korean_ElegantPrincess""Korean_BraveFemaleWarrior""Korean_BraveYouth""Korean_CalmLady""Korean_EnthusiasticTeen""Korean_SoothingLady""Korean_IntellectualSenior""Korean_LonelyWarrior""Korean_MatureLady""Korean_InnocentBoy""Korean_CharmingSister""Korean_AthleticStudent""Korean_BraveAdventurer""Korean_CalmGentleman""Korean_WiseElf""Korean_CheerfulCoolJunior""Korean_DecisiveQueen""Korean_ColdYoungMan""Korean_MysteriousGirl""Korean_QuirkyGirl""Korean_ConsiderateSenior""Korean_CheerfulLittleSister""Korean_DominantMan""Korean_AirheadedGirl""Korean_ReliableYouth""Korean_FriendlyBigSister""Korean_GentleBoss""Korean_ColdGirl""Korean_HaughtyLady""Korean_CharmingElderSister""Korean_IntellectualMan""Korean_CaringWoman""Korean_WiseTeacher""Korean_ConfidentBoss""Korean_AthleticGirl""Korean_PossessiveMan""Korean_GentleWoman""Korean_CockyGuy""Korean_ThoughtfulWoman""Korean_OptimisticYouth""Portuguese_AnxiousMan""Portuguese_Matureresearcher""Portuguese_Optimisticyouth""Portuguese_CuteElf""Portuguese_EnergeticGirl""Portuguese_FunnyGuy""Portuguese_Nuttylady""Portuguese_Deep-tonedMan""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_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""Portuguese_CharmingLady""Russian_HandsomeChildhoodFriend""Russian_BrightHeroine""Russian_AmbitiousWoman""Russian_ReliableMan""Russian_CrazyQueen""Russian_PessimisticGirl""Russian_AttractiveGuy""Russian_Bad-temperedBoy""Spanish_FriendlyNeighbor""Spanish_FragileBoy""Spanish_UpsetGirl""Spanish_Soft-spokenGirl""Spanish_CharmingQueen""Spanish_Nuttylady""Spanish_ElegantGirl""Spanish_FascinatingBoy""Spanish_FunnyGuy""Spanish_PlayfulSpirit""Spanish_TheatricalActor""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""Turkish_CalmWoman""Turkish_Trustworthyman""Ukrainian_CalmWoman""Ukrainian_WiseScholar""Vietnamese_Serene_Man""Vietnamese_female_4_v1""Vietnamese_male_1_v2""Vietnamese_kindhearted_girl""Thai_Optimistic_girl""Thai_male_1_sample8""Thai_Tender_Woman""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_female_1_sample1""greek_male_1a_v1""Greek_female_2_sample3""czech_male_1_v1""czech_female_5_v7""czech_female_2_v2""finnish_male_3_v1""finnish_female_4_v1""finnish_male_1_v2""hindi_male_1_v2""hindi_female_2_v1""hindi_female_1_v2""Bulgarian_male_2_v1""Bulgarian_female_1_v1""Danish_male_1_v1""Danish_female_1_v1""Hebrew_male_1_v1""Hebrew_female_1_v1""Malay_male_1_v1""Malay_female_1_v1""Malay_female_2_v1""Persian_male_1_v1""Persian_female_1_v1""Slovak_male_1_v1""Slovak_female_1_v1""Swedish_male_1_v1""Swedish_female_1_v1""Croatian_male_1_v1""Croatian_female_1_v1""Filipino_male_1_v1""Filipino_female_1_v1""Hungarian_male_1_v1""Hungarian_female_1_v1""Norwegian_male_1_v1""Norwegian_female_1_v1""Slovenian_male_1_v1""Slovenian_female_1_v2""Catalan_male_1_v1""Catalan_female_1_v1""Nynorsk_male_1_v1""Nynorsk_female_1_v1""Tamil_male_1_v1""Tamil_female_1_v1""Afrikaans_male_1_v1""Afrikaans_female_1_v1"

Segui l’attività

HTTP 202 significa che l’attività è stata accettata, non che sia finita. Salva il taskId restituito e interroga quell’attività. Non crearne un’altra mentre aspetti il risultato.

Risposta di accettazione
HTTP/1.1 202 Accepted
Location: /api/v1/jobs/recordInfo?taskId=job_01k3m8x9q2z4v7n5p6r8s0t1w3

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_create",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued",
    "estimatedCost": "0.750000"
  }
}

La risposta di accettazione include la stima, così la tua applicazione può mostrare lo stesso importo nella cronologia delle attività e nella fatturazione.

Leggi l’attività
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
  --data-urlencode "taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Comincia a interrogare ogni 2 secondi circa e allunga l’intervallo man mano. Fermati a uno stato terminale. Dopo una caduta di connessione, interroga il taskId originale. Ripeti la creazione solo con la chiave di idempotenza e il corpo originali.

Oppure lascia che sia la callback a trovarti
import { verifyWebhook } from "@spicyapi/sdk";

// express.raw keeps the bytes we signed; express.json never matches.
app.post("/hooks/spicy", express.raw({ type: "application/json" }), (req, res) => {
  const { payload } = verifyWebhook({
    rawBody: req.body,
    timestamp: req.header("X-Webhook-Timestamp"),
    signature: req.header("X-Webhook-Signature"),
    payloadVersion: Number(req.header("X-Webhook-Payload-Version")),
    secret: process.env.SPICY_WEBHOOK_SECRET,
  });
  res.status(200).end();
  void handleFinishedTask(payload);
});

Passa callBackUrl quando crei l’attività e il record finito ti arriva via POST: nessun ciclo di polling. Ogni consegna porta X-Webhook-Timestamp, X-Webhook-Signature e X-Webhook-Payload-Version. La firma è un HMAC-SHA256 in base64 su taskId.timestamp.sha256(body), quindi va verificata sui byte grezzi: se analizzi il JSON e lo riserializzi i byte cambiano e la verifica fallisce. Le consegne fallite vengono ritentate, quindi lo stesso taskId può arrivare due volte: rendi idempotente il gestore. Rispondi prima con un 2xx e fai il lavoro dopo; un gestore lento viene trattato come una consegna fallita.

Leggi il risultato

Usa l’output solo quando lo stato è succeeded. In caso di fallimento, indaga con errorCode, errorMessage e request_id. Costi e stati degli esempi non rappresentano un addebito reale.

Esempio di risposta completata
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "minimax/speech-2.8-hd/text-to-speech",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "key": "tasks/2026/08/28/job_01k3m8x9q2z4v7n5p6r8s0t1w3/3f7a1c9e5b2d48f0a6c1e3d5b7f9a1c3.mp3",
          "mime": "audio/mpeg",
          "url": "https://example.r2.cloudflarestorage.com/results/job_01k3m8x9q2z4v7n5p6r8s0t1w3/result.mp3?X-Amz-Signature=SIGNATURE_FROM_RESPONSE",
          "expiresAt": "2026-08-28T12:20:08.000Z"
        }
      ]
    },
    "cost": "0.750000",
    "settled": true,
    "createdAt": "2026-08-28T12:00:00Z",
    "completedAt": "2026-08-28T12:00:30Z"
  }
}

Per ogni asset disponibile, apri o scarica assets[].url direttamente, senza l’header Authorization dell’API. L’URL firmato scade a expiresAt; interroga di nuovo l’attività per rinnovarlo finché l’asset resta entro il periodo di conservazione. Un asset in attesa o non disponibile non ha URL. Tratta gli URL firmati come privati.

SDK e integrazioni

Usa SpicyAPI nella tua app, nel terminale, con un assistente IA o in un workflow visivo. Scegli una guida di configurazione.

Usalo in ComfyUI

Installa i nodi SpicyAPI da ComfyUI Manager o con il comando qui sotto, poi cerca MiniMax Speech 2.8 HD · Text to Speech sulla tela. Il nodo ha le stesse opzioni di questa pagina e mostra il prezzo prima dell’esecuzione.

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi