Поставьте "stream": true — и аудио поедет кусочками (Transfer-Encoding: chunked), как только будут готовы первые байты. Так задержка до первого звука минимальна — идеально для длинных текстов и живого воспроизведения.
curl -N -X POST https://tryaxolotl.ru/v1/speech \
  -H "Authorization: Bearer $AXOLOTL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Длинный текст для потоковой озвучки...","stream":true}' \
  --output stream.mp3

Node.js

import { writeFile } from "node:fs/promises";

const res = await fetch("https://tryaxolotl.ru/v1/speech", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.AXOLOTL_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ text: "Привет из стрима!", stream: true }),
});

if (!res.ok) throw new Error(`Ошибка ${res.status}: ${await res.text()}`);

const chunks = [];
for await (const chunk of res.body) {
  // Тут можно сразу проигрывать/пересылать кусок. Мы просто копим.
  chunks.push(chunk);
}
await writeFile("stream.mp3", Buffer.concat(chunks));

Python

import os, requests

with requests.post(
    "https://tryaxolotl.ru/v1/speech",
    headers={"Authorization": f"Bearer {os.environ['AXOLOTL_API_KEY']}"},
    json={"text": "Привет из стрима!", "stream": True},
    stream=True,
) as res:
    res.raise_for_status()
    with open("stream.mp3", "wb") as f:
        for chunk in res.iter_content(chunk_size=4096):
            f.write(chunk)
При ошибке потоковый ответ может прийти вообще без аудио. Всегда проверяйте HTTP-статус (res.ok) перед тем, как сохранять тело в файл.