List cloned voices
May 15, 2025
Table of contents
This endpoint retrieves a list of cloned voices that you’ve previously created using POST music/cloned-voices. These cloned voices can be used in music generation with POST music/song.
https://api.useapi.net/v1/tempolor/music/cloned-voices/?…
Request Headers
Authorization: Bearer {API token}
API token
is required, see Setup useapi.net for details.
Query Parameters
-
user_id
is optional when only one account configured. However, if you have multiple accounts configured, this parameter becomes required. -
cursor
is optional. Pagination cursor for fetching additional pages of results.
Responses
-
{ "records": [ { "isAddRel": false, "relSource": "", "ucid": "user_id", "bizType": "user", "operatorType": "gen", "itemId": "abcdef123456789", "rootItemId": "abcdef123456789", "parentItemId": "abcdef123456789", "name": "My Custom Voice", "resourceUrl": "voice_cloned/audio/abcdef123456789.mp3", "coverUrl": "", "readStatus": 0, "status": 30, "vocalUrl": "https://example.com/cloned-voice/abcdef123456789.mp3", "createTime": 1716565425000, "updateTime": 1716565700000, "labels": [], "clonedVoiceItemId": "user:12345-tempolor:user_id-voice:abcdef123456789" }, { "isAddRel": false, "relSource": "", "ucid": "user_id", "bizType": "user", "operatorType": "gen", "itemId": "fedcba987654321", "rootItemId": "fedcba987654321", "parentItemId": "fedcba987654321", "name": "Second Voice Sample", "resourceUrl": "voice_cloned/audio/fedcba987654321.mp3", "coverUrl": "", "readStatus": 0, "status": 30, "vocalUrl": "https://example.com/cloned-voice/fedcba987654321.mp3", "createTime": 1716475425000, "updateTime": 1716475700000, "labels": [], "clonedVoiceItemId": "user:12345-tempolor:user_id-voice:fedcba987654321" } ], "hasNext": false, "cursor": "" }
-
{ "error": "Unauthorized", "code": 401 }
Model
{ // TypeScript, all fields are optional
records: {
isAddRel: boolean
relSource: string
ucid: string
bizType: string
operatorType: string
itemId: string
rootItemId: string
parentItemId: string
name: string
resourceUrl: string
coverUrl: string
readStatus: number
status: number
vocalUrl: string
createTime: number
updateTime: number
labels: string[]
clonedVoiceItemId: string
}[]
hasNext: boolean
cursor: string
error: string
code: number
}
Examples
-
# List all cloned voices curl -H "Authorization: Bearer …" \ https://api.useapi.net/v1/tempolor/music/cloned-voices?user_id=user_id # Paginate through results using cursor curl -H "Authorization: Bearer …" \ "https://api.useapi.net/v1/tempolor/music/cloned-voices?user_id=user_id&cursor=next_page_cursor_token"
-
const token = "API token"; const user_id = "user_id"; const cursor = ""; // for pagination // Build the URL with query parameters let apiUrl = `https://api.useapi.net/v1/tempolor/music/cloned-voices?user_id=${user_id}`; if (cursor) apiUrl += `&cursor=${cursor}`; const response = await fetch(apiUrl, { method: "GET", headers: { "Authorization": `Bearer ${token}` } }); const result = await response.json(); console.log(`Found ${result.records?.length || 0} cloned voices`); // Example of fetching all pages async function fetchAllClonedVoices(userId) { let allRecords = []; let nextCursor = ""; let hasMore = true; while (hasMore) { let url = `https://api.useapi.net/v1/tempolor/music/cloned-voices?user_id=${userId}`; if (nextCursor) url += `&cursor=${nextCursor}`; const response = await fetch(url, { method: "GET", headers: { "Authorization": `Bearer ${token}` } }); const data = await response.json(); if (data.records && data.records.length > 0) { allRecords = [...allRecords, ...data.records]; } hasMore = data.hasNext; nextCursor = data.cursor; // Break if no more pages or no cursor if (!hasMore || !nextCursor) break; } return allRecords; }
-
import requests token = "API token" user_id = "user_id" cursor = "" # for pagination # Build the URL with query parameters apiUrl = f"https://api.useapi.net/v1/tempolor/music/cloned-voices?user_id={user_id}" if cursor: apiUrl += f"&cursor={cursor}" headers = { "Authorization": f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) result = response.json() print(f"Found {len(result.get('records', []))} cloned voices") # Example of fetching all pages def fetch_all_cloned_voices(user_id): all_records = [] next_cursor = "" has_more = True while has_more: url = f"https://api.useapi.net/v1/tempolor/music/cloned-voices?user_id={user_id}" if next_cursor: url += f"&cursor={next_cursor}" response = requests.get(url, headers=headers) data = response.json() if data.get('records'): all_records.extend(data.get('records')) has_more = data.get('hasNext', False) next_cursor = data.get('cursor', "") # Break if no more pages or no cursor if not has_more or not next_cursor: break return all_records