Dashboard
Model Gateway

Fish Audio

Fish Audio text-to-speech through HALO.

Fish Audio-compatible text-to-speech requests use the HALO/fish-audio/v1/tts endpoint. Send the project-scoped HALO key as a bearer token and select the TTS model with themodel header.

#Make a request

curl https://api.agihalo.com/fish-audio/v1/tts \
  -H "Authorization: Bearer $HALO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "model: s2.1-pro" \
  -d '{
    "text": "Hello from HALO. This response is streamed as MP3 audio.",
    "reference_id": "your-voice-model-id",
    "format": "mp3",
    "latency": "normal"
  }' \
  --output halo-fish-audio.mp3

#Models

ModelUse
s2.1-proRecommended S2.1 Pro synthesis
s2-proS2 Pro synthesis
s1Previous-generation S1 synthesis

HALO validates the model header before dispatch and never allows Fish Audio's upstream fallback behavior to silently change the requested model. The upstream free developer-tier model is not part of the HALO shared platform catalog.

#Audio response

Successful responses stream the provider's binary audio body and content type. Supported request formats are mp3,wav, pcm, and opus. Use an output file or an HTTP client that consumes bytes rather than JSON.

#Billing

Before dispatch, HALO selects a platform key and reserves the exact adjusted price from the UTF-8 byte length of text. All three production models use a base rate of $15.00 per 1 million UTF-8 bytes, and each platform key may apply its own buyer price adjustment. A rate-limited retry releases the previous hold and creates a new hold using the newly selected key's price. A 2xx upstream response finalizes the hold before audio bytes are streamed; a rejected request releases it. The usage record stores the canonical input byte count even though the shared ledger column retains its historical token-oriented name.

#Restrictions

  • Only JSON TTS requests are currently available through HALO.
  • MessagePack, ASR, voice-model management, voice design, timestamp SSE, and WebSocket live streaming are not proxied by this route.
  • Unknown request fields and unpriced models fail before dispatch.
  • The JSON body and input text are capped at 8 MB.

See Fish Audio's upstream TTS API reference for parameter semantics.