Content-Type (for example audio/mpeg).
TrustGate does not wrap the body in JSON.
Transcriptions are multipart, same host and key:
X-AG-Gateway-Slug as in the chat snippets.
GET is rejected with 400. /v1/audio/translations and extra path tails are 404.
OpenAI SDKs use the same consumer base URL: client.audio.speech.create() and
client.audio.transcriptions.create().
Providers
Mistral speech uses
voice_id upstream. If the client sends OpenAI voice, TrustGate copies
it to voice_id. Mistral’s JSON {audio_data} (base64) is unwrapped to raw bytes so the
gateway response stays OpenAI-shaped.
xAI voice is a different wire (/v1/tts, /v1/stt). Anthropic, Gemini / Vertex, Bedrock,
Cohere, DeepSeek, Cerebras, and other chat-only providers do not expose these routes. They
are left out of the candidate pool.
Chat input_audio parts are a different surface.
The JSON model field is allowlisted as usual. For multipart transcriptions, TrustGate
reads the form model field for allowlists, Azure deployment names, and @provider/model
pins. It does not rewrite the multipart body.
Routing
- The consumer’s registries are filtered to those that advertise the matching capability
(
audio_speechoraudio_transcription). - Model resolution and load balancing run on that pool.
- Pinning a registry that cannot serve that audio path is a 400, not a failover — including
@provider/modelin a multipartmodelfield. - An empty capable pool is a 503.
Related
- Registries
- Consumers — Connect tab
- Embeddings
- Images
- Files
- Models
- Quickstart