# Troubleshooting

## Real-time translation

### GET /v1/session returns 401 or 403

- `401` — missing or invalid API key. Check the `Authorization: Bearer …` header and confirm the key in the [Developer Portal](https://portal.startpinch.com/dashboard/developers).
- `403` — the key is valid but isn’t entitled to real-time translation. Reach out to [support@startpinch.com](mailto:support@startpinch.com).

### GET /v1/session returns 503

Capacity is temporarily exhausted. Retry with a short backoff (e.g. 1 s, then 2 s). If you see this persistently, let us know at [support@startpinch.com](mailto:support@startpinch.com) so we can provision more capacity.

### WebSocket closes with code 4401

The pre-signed `ws_url` token has expired. Tokens are valid for 60 seconds after `GET /v1/session`; open the socket promptly. On `4401`, reallocate a new session.

### WebSocket closes with code 4503

The session ended on the server side. Reallocate a new session via `GET /v1/session`.

### I sent audio but never got ready

`ready` is the first frame from the server. Don’t send audio before it arrives. If `ready` never arrives, the `ws_url` may have expired — reallocating.

### No transcripts coming back

- Check you’re sending **PCM16 little-endian, mono, 16 kHz** on the binary channel.
- Check frames aren’t empty or silence-only — VAD needs some voiced audio to kick off ASR.
- Check the `sourceLanguage` is actually the language being spoken.

### Last sentence doesn’t finalize (push-to-talk)

If you stop sending audio the instant the user releases a key, the server never sees enough trailing silence to finalize the segment. Send ~300 ms of silence (PCM16 zeros) after the user releases push-to-talk.

### Translated audio sounds garbled or slowed

Usually the same root cause as “last sentence doesn’t finalize” — segments stuck in a continuation state get rendered at a slower rate. Send the 300 ms of trailing silence described above.

### error frame — targetLanguage='xx' is not supported

The target language you requested isn’t in the speech output set. Either pick a supported output language (see [Supported languages](/content/docs/supported-languages/index.html)) or pass `audioOutputEnabled=false` to get transcripts only.

### error frame — voiceType='clone' is not supported yet

`clone` is not available on the real-time API. Use `male` or `female`.

## Dubbing

### Job stuck in processing

Dubbing jobs scale with audio duration. A 1-hour file typically finishes in under 15 minutes; longer waits usually mean the upstream media couldn’t be fetched. Check the job’s `error` field and confirm the `source_url` is publicly reachable.

### 400 from POST /api/dubbing/jobs

Most commonly: `source_url` can’t be fetched, unsupported media container, or the source language isn’t supported. The response body names the specific field.

## Still stuck?

Email [support@startpinch.com](mailto:support@startpinch.com) with your `session_id` (for real-time) or job ID (for dubbing) and a short description of what you’re seeing.
