most-furniture-64179
03/17/2026, 11:45 PMtts: new inference.TTS({
model: "deepgram/aura-2",
voice: "apollo",
language: "en",
}),tall-airline-16756
03/17/2026, 11:45 PMtall-airline-16756
03/17/2026, 11:46 PMinference.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 elementsmost-furniture-64179
03/17/2026, 11:48 PMtall-airline-16756
03/17/2026, 11:48 PMmodel: "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