List cloned voices

May 15, 2025 (November 2, 2026)

Table of contents

  1. Request Headers
  2. Query Parameters
  3. Responses
  4. Model
  5. Examples
  6. Try It

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}
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
  • 200 OK

    {
      "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": ""
    }
    
  • 401 Unauthorized

    {
      "error": "Unauthorized",
      "code": 401
    }
    
  • 596 Account signed out

    TemPolor signed the account out, so its session ticket no longer works. The API stops using the account until you add it again with fresh credentials at POST accounts, see Setup TemPolor. Requests without user_id use your other accounts in the meantime.

    {
      "error": "TemPolor signed out account 101441809 (You are currently logged out (400006)). Add it again with POST /v1/tempolor/accounts using fresh credentials, see https://useapi.net/docs/start-here/setup-tempolor",
      "code": 596
    }
    

    If every account you have is in this state, a request without user_id returns 596 as well.

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
    
Try It