Troubleshooting: voice-model credential rejected
This page owns the422 VOICE_CREDENTIAL_PROVIDER_REJECTED response on the
voice-model credential write surface — both PUT /api/v1/voice/voice-provider-credential/{kind}
(register) and POST /api/v1/voice/voice-provider-credential/{kind}/rotate
(rotate). The code fires when the upstream TTS or STT provider refuses the
credential you submitted before Orbit persists it.
Why registration returns a 422
Both register and rotate probe the credential live against the provider you named. If the provider answers with a 401, 403, or any other refusal that means “this key is not valid,” the call returnsVOICE_CREDENTIAL_PROVIDER_REJECTED
and nothing is written — the bad key never reaches your organization
settings, never becomes active, and never gets enforced. This is deliberate:
a credential that downstream services (STT playground comparisons, on-call
transcription, TTS synthesis) would reject on every use is caught at the
control plane instead.
The supported providers per kind are:
Cause table
Fix the credential
- Open the provider dashboard where the key was created (Cartesia for TTS, Deepgram for STT).
- Confirm the key is active and has the required permissions for the kind you are registering.
- If the key is revoked, expired, or scope-restricted, create a replacement key there.
- Re-copy the key directly from the provider dashboard — avoid pasting through a chat window or document, which can add whitespace.
- Retry the registration or rotation in Settings → Voice or through the API.
Retry-safety
Do not retry the same payload in a loop.VOICE_CREDENTIAL_PROVIDER_REJECTED
is a deterministic provider verdict — the provider will refuse the same
credential every time until you replace it. Fix or replace the key first, then
submit once.
Envelope sample
Ticket checklist
Only escalate after you have replaced or revoked the key and the same call still returnsVOICE_CREDENTIAL_PROVIDER_REJECTED:
- The code (
VOICE_CREDENTIAL_PROVIDER_REJECTED) and the endpoint (PUT /api/v1/voice/voice-provider-credential/{kind}orPOST /api/v1/voice/voice-provider-credential/{kind}/rotate). - The
kindandproviderfromerror.details. - The provider HTTP status (
error.details.provider_status) — 401, 403, or another value. - Your organization ID.
See also
- Frequently asked questions — the voice section covers the STT → LLM → TTS pipeline and how BYO voice-model credentials fit in.
- Transcription, synthesis, and deepfake failures —
runtime failures after a credential is active, including
STT_CREDENTIAL_REJECTEDon the STT Playground. - Error codes reference — the full error-code catalog.