Text in, speech out. One endpoint, an API key, and you're done.
Grab an API key from your dashboard, then POST some text.
curl https://voices.plink.com/v1/speech \ -H "Authorization: Bearer vr_your_api_key" \ -H "Content-Type: application/json" \ -d '{"text": "Hello from Voices.", "voice": "atlas"}' \ --output hello.mp3
Send your API key as a bearer token on every request. Keys look like vr_... and live in your dashboard, where you can rotate them anytime.
Authorization: Bearer vr_your_api_key
POST /v1/speech — returns raw audio bytes (audio/mpeg or audio/wav).
| Field | Type | Notes |
|---|---|---|
text | string | Required. Up to 5,000 characters. |
voice | string | A voice name. Defaults to aria. |
format | string | mp3 (default) or wav. |
speed | number | 0.5–2.0. Standard voices only. |
Every response includes X-Credits-Charged and X-Credits-Remaining headers.
import httpx r = httpx.post("https://voices.plink.com/v1/speech", headers={"Authorization": "Bearer vr_your_api_key"}, json={"text": "Hello.", "voice": "atlas"}) open("out.mp3", "wb").write(r.content)
GET /v1/voices — returns every available voice, its engine, accent, and whether it's premium.
Billing is simple: 1 credit = 1 character. A 500 character paragraph costs 500 credits. Standard and premium voices cost the same per character. Free accounts get 20,000 credits a month and standard voices; a paid plan or any credit pack unlocks the premium voices.
| Code | Meaning |
|---|---|
401 | Missing or invalid API key. |
402 | Out of credits, or premium voice without a paid plan. |
413 | Text over 5,000 characters. |
429 | Rate limited (demo endpoint only). |