本文へスキップ

MiniMax Speech 2.8 Turbo は速度とコストを重視した text-to-speech で、台本を 472 種のシステムボイスから選び、感情を指定して読み上げます。既定は 32 kHz モノラルの MP3 で、速度・ピッチ・音量と (sighs) などのサウンドタグに対応します。

最低価格 $0.072/1,000 文字

プレイグラウンド

リクエストを送信

クイックスタート

例は、選択中のエンドポイントの公開パラメーター定義から作っています。API キーとサンプル素材を差し替えて、ご自身のサーバーから送信してください。

SDK・連携
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

API 認証

API キーはサーバーの環境変数 SPICY_API_KEY に保存します。Bearer 認証を使用し、JSON リクエストには 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-turbo/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"

このモデルの入力スキーマから生成した例です。API はどのリクエストも、同じスキーマで検証します。

入力パラメーター

これらのフィールドは、リクエスト本文の input オブジェクトに指定します。名前と型は API と一致します。デフォルト値の指定がない項目に、デフォルト値があると想定しないでください。

textstring必須

実際に話す言葉を、書いたとおりに指定します。(sighs) や (laughs) のようなかっこ付きのサウンドタグは、音として演じられ、読み上げられることはありません。スペースや句読点を含む 1,000 文字ごとに課金されます。最大 5,000 文字まで対応します。

デフォルト値
指定なし
制約
minLength:1
maxLength:5000
pronunciation_dictarray<object>任意

{alias, pronunciation} の組を最大 100 個まで指定します。text 中の alias はすべて pronunciation として読まれます。普通の単語 (Omg → Oh my god) でも、(rɪˈzjuːm) のように括弧で囲んだ IPA でも指定できます。alias にスラッシュは使えません。料金は変わらず、課金対象は text だけです。

デフォルト値
指定なし
制約
maxItems:100
english_normalizationboolean任意

オンにすると、英語テキスト中の数字・日付・略語を人が読むとおりに読み上げます (1990 を「nineteen ninety」と読むなど)。既定はオフです。料金は変わりません。

デフォルト値
false
audio_channelsstring任意

出力のチャンネルです。mono (既定) か stereo を選びます。料金は変わりません。

デフォルト値
指定なし
使用可能な値
"mono""stereo"
bitrateinteger任意

MP3 のビットレート (ビット/秒) です。32000、64000、128000、256000 から選べます。既定値は 128000 で、output_format が mp3 のときだけ有効です。料金は変わりません。

デフォルト値
指定なし
使用可能な値
3200064000128000256000
sample_rateinteger任意

音声のサンプリングレート (Hz) です。8000、16000、22050、24000、32000、44100 から選べます。既定値は 32000 です。料金は変わりません。

デフォルト値
指定なし
使用可能な値
80001600022050240003200044100
output_formatstring任意

ファイル形式です。mp3 (既定)、wav、flac、pcm から選べます。pcm はヘッダーのない 16 ビット・リトルエンディアンの生サンプルで、指定した sample_rate と audio_channels で出力されます。ブラウザーでは pcm を再生できないため、同じサンプルを再生できるファイルで受け取るなら wav を選んでください。料金は変わりません。

デフォルト値
"mp3"
使用可能な値
"mp3""wav""flac""pcm"
languagestring任意

40 言語のいずれかについて発音を改善するヒントです。既定値は auto で、台本から言語を自動検出します。

デフォルト値
"auto"
使用可能な値
"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"
volumenumber任意

音量の倍率を 0.1 から 10 の範囲で指定します。1 が標準の音量です。料金は変わりません。

デフォルト値
1
制約
minimum:0.1
maximum:10
pitchinteger任意

音の高さを半音単位で -12 から 12 の範囲でずらします。0 で声本来の高さのままです。料金は変わりません。

デフォルト値
0
制約
minimum:-12
maximum:12
speednumber任意

話す速さを 0.5 (遅い) から 2 (速い) の範囲で指定します。1 が声の標準の速さです。料金は変わりません。

デフォルト値
1
制約
minimum:0.5
maximum:2
emotionstring任意

7 種類の固定された感情 (neutral、happy、sad、angry、fearful、disgusted、surprised) のいずれかを、読み上げ全体に適用します。既定値は neutral です。

デフォルト値
"neutral"
使用可能な値
"neutral""happy""sad""angry""fearful""disgusted""surprised"
voice_idstring任意

472 種類のシステムボイスのいずれかを指定します。既定値は Calm_Woman です。クローンや参照音声のアップロードは提供していません。

デフォルト値
"Calm_Woman"
使用可能な値
"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"

タスクを追跡

HTTP 202 はタスクを受け付けたという意味で、生成が終わったという意味ではありません。返ってきた taskId を保存し、そのタスクの状態を問い合わせてください。結果を待っている間に、同じ内容でタスクを作り直さないでください。

受理レスポンス
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"
  }
}

受理レスポンスには今回の概算料金が含まれるため、アプリのタスク履歴と請求画面に同じ金額を表示できます。

タスクを取得する
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
  --data-urlencode "taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

ポーリングは約 2 秒間隔から始め、徐々に間隔を延ばします。終了状態になったら止めてください。通信が切れたときも、元の taskId で状態を確認します。作成をやり直すときは、同じ冪等キーと同じ本文をそのまま使い回してください。

あるいは、コールバックに知らせてもらう
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);
});

タスク作成時に callBackUrl を渡せば、完了したレコードが POST で届きます——ポーリングは一切不要です。配信には毎回 X-Webhook-Timestamp、X-Webhook-Signature、X-Webhook-Payload-Version が付きます。署名は taskId.timestamp.sha256(body) に対する HMAC-SHA256(base64)なので、生のバイト列で検証してください。JSON を解析して再度文字列化するとバイト列が変わり、検証は必ず失敗します。失敗した配信は再送されるため同じ taskId が二度届くことがあります。ハンドラーは冪等に。まず 2xx を返し、処理はその後で——応答が遅いと配信失敗として扱われます。

結果を取得

output を読むのは、state が succeeded のときだけにしてください。失敗したときは errorCode、errorMessage、request_id を手がかりに調べます。例に出ている料金や状態は、実際の請求ではありません。

完了レスポンスの例
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "minimax/speech-2.8-turbo/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"
  }
}

利用可能なファイルは assets[].url からそのまま開くか、ダウンロードできます。API の Authorization ヘッダーは不要です。署名付き URL は expiresAt で失効しますが、保存期間内であればタスクを再取得することで更新できます。処理中または利用できないファイルに URL はありません。署名付き URL は非公開情報として扱ってください。

SDK・連携

アプリ、ターミナル、AI アシスタント、ビジュアルワークフローで SpicyAPI を活用。接続ガイドを選んでください。

ComfyUI で使う

ComfyUI Manager か下のコマンドで SpicyAPI ノードをインストールしたら、キャンバスで MiniMax Speech 2.8 Turbo · Text to Speech を検索してください。このノードにはこのページと同じオプションがあり、実行前に価格が表示されます。

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