Puter
Speak with a Speechify voice from puter.ai.txt2speech() — the key stays server-side in your Puter instance.
Overview
Puter is an open-source internet OS with a serverless SDK, puter.js, that gives web apps auth, storage, and AI from a single script tag. Its text-to-speech call, puter.ai.txt2speech(), includes a native Speechify provider: you configure your Speechify API key once on the Puter instance, and every page served against that instance can pass provider: 'speechify' — the key never reaches the client.
SpeechifyAI Agents — our own voice-agent platform
SpeechifyAI ships its own voice-agents platform powered by Simba 3.2, which ranks #1 on the Artificial Analysis TTS leaderboard as of July 2026. See SpeechifyAI Agents if you want an end-to-end voice-agent stack instead of speech synthesis in a web app.
Prerequisites
- Speechify API key (platform.speechify.ai/api-keys)
- A Puter instance running a build that includes the Speechify TTS provider (Node 24+,
npm install && npm start) - A Puter account on that instance (
txt2speechprompts sign-in on the first call; the first boot prints admin credentials)
Enable the provider on your instance
Create config.json in the Puter repo root (or point PUTER_CONFIG_PATH at a config file) with your key under providers.speechify:
The instance registers the provider at boot — without this entry, provider: 'speechify' is not available, so restart after adding it. The key stays in the instance’s server-side config; pages calling puter.ai.txt2speech() never see it, and synthesis is billed to the Speechify account the key belongs to.
Use the Speechify provider
puter.js is JavaScript-only, so there are no Python or cURL variants of this integration — the whole point is calling TTS straight from the page.
txt2speech resolves to an HTMLAudioElement, ready to play(). With no other options, the Speechify provider defaults to the simba-3.2 model and the geffen_32 voice.
puter.js targets the instance that serves the page. For a standalone page against your own instance, open it with the puter.api_origin query parameter (e.g. ?puter.api_origin=http://api.puter.localhost:4100) — puter.js reads it at load time.
Options
Input text is limited to 3,000 characters per call (a Puter-side limit). Pick model and voice together: simba-3.2 voices carry the _32 suffix, while simba-english and simba-multilingual accept the broader catalog — see Models for the compatibility matrix.
Test without hitting the API
Pass test_mode: true (or the testMode positional argument) while developing: