custom voice and doesn't work custom LLM
Hey team 
I’m working with a Custom Voice + Custom LLM setup.
I found two related issues that look like an internal mismatch in how Vapi handles streaming when using custom providers:
When using my custom voice, the first message never plays unless I use a recorded URL workaround.
Even with firstMessageMode: "assistant-speaks-first", Vapi doesn’t send the text to my TTS endpoint on the first turn.
Now, I’ve noticed that when my custom LLM streams via SSE, Vapi sometimes calls it with Accept: application/json instead of text/event-stream, even during voice calls with stream: true.
→ When this happens, my LLM returns JSON fine, but Vapi stays silent (no logs, no voice, nothing) and streaming doesn`t work also.
So basically, Vapi sometimes:
• Calls the LLM expecting SSE but doesn’t send the correct Accept header.
• Or calls the voice endpoint in JSON mode when it should be streaming.
Both issues break the real-time flow between my Custom LLM and Custom Voice.
Environment:
• Custom Voice → Cloud Run (SSE streaming implemented)
• Custom LLM → Cloud Functions (SSE streaming implemented)
• Region: europe-southwest1
Could you confirm if Vapi internally switches between JSON and SSE depending on the voice provider?
And if there’s a way to force Vapi to always request Accept: text/event-stream for telephony or streaming assistants?
The call id is: 0199ca2a-abd0-7cc4-93a7-f0640665c9da
Thanks!

I’m working with a Custom Voice + Custom LLM setup.
I found two related issues that look like an internal mismatch in how Vapi handles streaming when using custom providers:
Even with firstMessageMode: "assistant-speaks-first", Vapi doesn’t send the text to my TTS endpoint on the first turn.
→ When this happens, my LLM returns JSON fine, but Vapi stays silent (no logs, no voice, nothing) and streaming doesn`t work also.
So basically, Vapi sometimes:
• Calls the LLM expecting SSE but doesn’t send the correct Accept header.
• Or calls the voice endpoint in JSON mode when it should be streaming.
Both issues break the real-time flow between my Custom LLM and Custom Voice.
Environment:
• Custom Voice → Cloud Run (SSE streaming implemented)
• Custom LLM → Cloud Functions (SSE streaming implemented)
• Region: europe-southwest1
Could you confirm if Vapi internally switches between JSON and SSE depending on the voice provider?
And if there’s a way to force Vapi to always request Accept: text/event-stream for telephony or streaming assistants?
The call id is: 0199ca2a-abd0-7cc4-93a7-f0640665c9da
Thanks!