HeyPuter/puter · error · HttpError

errText || `Speechify TTS request failed

Error message

errText || `Speechify TTS request failed (status ${response.status})`

What it means

Error "errText || `Speechify TTS request failed (status ${response.status})`" thrown in HeyPuter/puter.

Solutions

  1. Check the Speechify API key and request parameters, then retry.
  2. Inspect the upstream status code and error text for the underlying cause.

When it happens

Trigger: Thrown at src/backend/drivers/ai-tts/providers/speechify/SpeechifyTTSProvider.ts:211 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of HeyPuter/puter@908ec23eda (2026-08-12). Data as JSON: /api/errors/fd38cb5ef5e6b628. Report an issue: GitHub.

Appendix: source

Thrown at src/backend/drivers/ai-tts/providers/speechify/SpeechifyTTSProvider.ts:211

            // Map upstream status to an `upstream_*` HttpError so the
            // alarm gate skips it. Mirrors ElevenLabs/xAI's translator —
            // 4xx and 5xx both surface as 400 to the client (with the
            // appropriate legacyCode), 429 stays 429, auth stays 500.
            const legacyCode =
                response.status >= 500
                    ? 'upstream_provider_unavailable'
                    : response.status === 401 || response.status === 403
                      ? 'upstream_auth_failed'
                      : response.status === 429
                        ? 'upstream_rate_limited'
                        : 'upstream_bad_request';
            const exposedStatus =
                legacyCode === 'upstream_rate_limited'
                    ? 429
                    : legacyCode === 'upstream_auth_failed'
                      ? 500
                      : 400;
            throw new HttpError(
                exposedStatus,
                errText ||
                    `Speechify TTS request failed (status ${response.status})`,
                {
                    legacyCode,
                    fields: {
                        provider: 'speechify',
                        upstreamStatus: response.status,
                    },
                },
            );
        }

        // eslint-disable-next-line @typescript-eslint/no-explicit-any
        const data: any = await response.json();
        if (!data?.audio_data) {
            throw new HttpError(
                400,

View on GitHub (pinned to 908ec23eda)