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), and this month’s usage. Being listed IS being offered to donors - the per-voice enable/disable calls add a voice to and remove it from this list. Voice ids are stable (voi_...). 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:
platformownshared401Missing 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"
}
]
}{
"error": "string",
"code": "string"
}{
"error": "string",
"code": "string",
"required_scope": "string"
}{
"error": "string",
"code": "string"
}{
"error": "string"
}