Getting LiveKit TTS returned error: Provider deepg...
# ask-ai
m
Getting LiveKit TTS returned error: Provider deepgram error (status 403): Authentication/authorization error - retryable: false but only with deepgram TTS provider using it as instructed in the docs
Copy code
tts: new inference.TTS({
  model: "deepgram/aura-2",
  voice: "apollo",
  language: "en",
}),
✅ 1
t
Thanks for reaching out, Karan. I'm an AI assistant and I'm here to help. Give me a moment while I research this topic.
Thanks — I’m sorry you’re hitting that 403 with Deepgram TTS. I’m responding to your error message: "Provider deepgram error (status 403): Authentication/authorization error - retryable: false" when using the
inference.TTS
construct. Quick summary of the important fact: when you use
inference.TTS
with the Deepgram model through LiveKit, LiveKit handles authentication and billing for Deepgram. That means you do not need (and should not need) a separate Deepgram API key — the LiveKit API key/secret and project must be valid and have Inference enabled. Please try the following checks — they cover the most common causes of a non-retryable 403 in this flow: 1. Verify LiveKit credentials ◦ Ensure
LIVEKIT_API_KEY
,
LIVEKIT_API_SECRET
, and
LIVEKIT_URL
are set correctly in the environment where your code runs. ◦ Confirm those credentials belong to the LiveKit Cloud project you expect. 1. Confirm Inference is enabled for the project ◦ Make sure the LiveKit project tied to your credentials has Inference enabled. If Inference is not enabled, calls to TTS will be denied. 1. Check account/billing status ◦ Verify your LiveKit project has available credits or active billing. Authorization can be denied if the project is restricted for billing reasons. 1. Verify permission scope (if applicable) ◦ If your project uses scoped API keys or role-based restrictions, confirm the key in use has permission to call Inference/TTS. 1. Reproduce with minimal code and logs ◦ Run a small reproducible snippet (the same snippet you posted is fine) and capture the full LiveKit error response / server logs — if there are more fields in the error payload they can help pinpoint whether it’s an invalid key, disabled feature, or billing denial. If you prefer, tell me: • Which environment you’re running this from (local machine, serverless, container, etc.). • Whether you set
LIVEKIT_API_KEY
and
LIVEKIT_API_SECRET
as environment variables, and whether they’re from the same project as
LIVEKIT_URL
. • Any additional error fields or logs you see (copy/paste the full error object if available). With that info I can help narrow this down step‑by‑step. Sources: Deepgram TTS | LiveKit Documentation | Build Your First AI Voice Agent in Python: Complete Tutorial | LiveKit | Introducing LiveKit Inference: A unified model interface for voice AI | Liv..., with interactive elements
m
Inference is on, it works for some providers like elevenlabs/inworld but not any of the others
t
Thanks — that helps. I’m responding to your note that Inference works for some providers (ElevenLabs, Inworld) but Deepgram TTS returns a 403. Because other providers work, we can rule out a global LiveKit credential or Inference-disabled project problem. The likely causes to check next are small configuration differences for Deepgram or a provider-specific access/billing restriction. Please try these targeted checks and share the results: 1. Confirm the exact model/voice string you’re sending ◦ Use the documented model/voice format for Deepgram:
model: "deepgram/aura-2"
and a supported voice such as
"athena"
(some docs show
athena
for examples). If you used
apollo
in your original snippet, try
athena
or the exact voice name documented for
aura-2
. 1. Try the minimal reproducible snippet and capture the full error ◦ Run the same code in a minimal environment and paste the full error object/response (not just the message). The full JSON or server log often includes a provider error code or reason field that points to whether it’s a permission, region, or billing denial. 1. Confirm language/voice combinations are supported ◦ Deepgram TTS via Inference supports
en
and
es
. If you requested a voice/language combo not supported by the chosen model, that could trigger an authorization-like denial. 1. Compare request differences between a working provider and Deepgram ◦ Compare headers, model strings, and any additional fields you send. If you’re programmatically switching providers, a small typo or extra field might cause the Deepgram path to fail. 1. Check project billing/quotas with provider-level granularity ◦ Your project-level billing can still block specific downstream providers in some account setups. Confirm there aren’t provider-specific usage restrictions on Deepgram for your LiveKit project. If you can, please provide: • The exact
inference.TTS
call you’re running (copy/paste). • The full error object or server log for the 403. • The environment (local, Docker, serverless) where you’re running this. With those details I can point to the precise next step — for example, whether to change the voice string, adjust language, or inspect a particular error field in the logs. Sources: LiveKit Inference | LiveKit Documentation | Deepgram STT | LiveKit Documentation | Text-to-speech (TTS) models overview | LiveKit Documentation | Deepgram TTS | LiveKit Documentation, with interactive elements