List AI voices
The feature’s current state, every voice this account can offer (TipPage’s own, the ones this streamer cloned, and voices other streamers published) with per-voice enabled flags, and this month’s usage. Voice ids are stable (voi_...) - use them with the per-voice toggles. min_amount is the tip amount that unlocks AI voices on the tip page. Requires ai_voices:manage. Closed beta: answers 404 unless AI voices are enabled for your account.
GET
/ai-voicesAuthorization
AuthorizationBearer token (tp_live_... or tpat_...) · headerrequiredA TipPage API key (`tp_live_...`, created in Dashboard → Settings → Developer) or an OAuth 2.0 access token (`tpat_...`, see the OAuth guide). Both carry the same scopes and are accepted on every endpoint.
Responses
200Feature state, catalog, and usage.
enabledbooleanThe master switch - whether donors are offered AI voices.
modestring`optional` keeps the standard voice as the default; `exclusive` makes every tip message use an AI voice.
Allowed:
optionalexclusivemin_amountnumberMinimum tip amount that unlocks AI voices.
usageobjectThis month's generation, for information only - there is no monthly allowance to spend down.
Show propertiesHide properties
monthstringcharacters_spokenintegerseconds_generatednumbergenerationsintegervoicesobject[]Show propertiesHide properties
Array of
objectidstringlabelstringhintstringgenderstringAllowed:
mfxsample_urlstringA short sample clip of the voice.
reference_secondsintegerSeconds of reference audio behind the voice. A message is spoken in one generation and every voice in it shares that generation's budget, so these add up.
sourcestring`platform` is a TipPage voice, `own` one this streamer cloned, `shared` one another streamer published.
Allowed:
platformownsharedenabledbooleanWhether donors can currently pick this voice.
401Missing or invalid credential (`missing_api_key` / `invalid_api_key`, or `invalid_token` for an expired/revoked OAuth access token).
errorstringrequiredHuman-readable message.
codestringMachine-readable code (e.g. `missing_scope`, `not_in_queue`).
403The key lacks the required scope (`missing_scope`).
errorstringrequiredHuman-readable message.
codestringMachine-readable code (e.g. `missing_scope`, `not_in_queue`).
required_scopestring404No such resource.
errorstringrequiredHuman-readable message.
codestringMachine-readable code (e.g. `missing_scope`, `not_in_queue`).
429Rate limit exceeded - check the `RateLimit-*` headers.
errorstringRequest
curl -X GET "https://api.tippage.com/v1/ai-voices" \
-H "Authorization: Bearer YOUR_TOKEN"const response = await fetch("https://api.tippage.com/v1/ai-voices", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_TOKEN"
}
});import requests
response = requests.get(
"https://api.tippage.com/v1/ai-voices",
headers={
"Authorization": "Bearer YOUR_TOKEN"
},
)Response
{
"enabled": true,
"mode": "optional",
"min_amount": 0,
"usage": {
"month": "2026-09",
"characters_spoken": 0,
"seconds_generated": 0,
"generations": 0
},
"voices": [
{
"id": "voi_9c1f0a2b7d4e5f60",
"label": "Narrator",
"hint": "Warm documentary read",
"gender": "m",
"sample_url": "string",
"reference_seconds": 0,
"source": "platform",
"enabled": true
}
]
}{
"error": "string",
"code": "string"
}{
"error": "string",
"code": "string",
"required_scope": "string"
}{
"error": "string",
"code": "string"
}{
"error": "string"
}