Check music generation status and results
May 15, 2025
Table of contents
This endpoint checks the status of a previously submitted music generation job. The job_id
is returned from POST music/song or POST music/instrumental.
https://api.useapi.net/v1/tempolor/music/
job_id
Request Headers
Authorization: Bearer {API token}
API token
is required, see Setup useapi.net for details.
Path Parameters
job_id
is required. The job ID returned from a previous POST music/song or POST music/instrumental request.
Status Values
The response includes a status
field with the following possible values:
status | status_name | status_final | Description |
---|---|---|---|
0 | GENERATING | False | The music is still being generated |
10 | FAILED | True | The music generation has failed |
30 | COMPLETED | True | The music has been successfully generated |
When the status is COMPLETED, you can download the music using the GET music/download/job_id
endpoint.
Responses
-
Example Response
{ "bizType": "ai_material_music", "childType": "lyric_to_material", "matChildType": "lyric_to_material", "sourceType": "sm_user_gen", "itemId": "abcdef123456789", "job_id": "user:12345-tempolor:user_id-job:abcdef123456789", "genItemId": "abcdef123456789", "userId": "user_id", "titleEn": "Epic Orchestral", "cover": "https://example.com/cover.png", "mp3OssId": "ai_material/ai_material/mp3/abcdef123456789.mp3", "wavOssId": "ai_material/ai_material/wav/abcdef123456789.wav", "ossWatermarkMp3": "", "officialPlaylistSong": false, "status": 30, "status_name": "COMPLETED", "status_final": true, "progress": 100, "downloadTotal": 0, "likeTotal": 0, "collectTotal": 0, "musicMaterial": { "style": "Orchestral", "chord": "", "mood": "", "inst": "", "instInfo": "", "scene": "", "otherInfo": "A cinematic orchestral piece with dramatic string sections", "otherInfoCn": "", "key": "F:minor", "bpm": 130, "dur": 180, "seed": 1234567890, "waveformUrl": "https://example.com/waveform.json" }, "readStatus": false, "downloadStatus": false, "createTime": 1716565425000, "updateTime": 1716565700000, "materialQualityScore": 0, "ltmMaterialExtendDto": { "lyricsPrompt": "Sample lyrics here", "description": "A cinematic orchestral piece with dramatic string sections", "ltmVocalModel": false, "ltmMidiModel": false, "genItemId": "abcdef123456789", "prompt": "A cinematic orchestral piece with dramatic string sections", "genMode": 0, "model": "v1-dit-obleck-stereo-zh-en-270-wf", "modelShowName": "v3.5" }, "editType": "gen", "operatorType": "gen", "rootItemId": "abcdef123456789", "parentItemId": "abcdef123456789", "canExtend": true, "canEditLyrics": true, "canFixVocals": true, "canReplaced": false }
-
{ "error": "job_id has incorrect format", "code": 400 }
-
{ "error": "Unauthorized", "code": 401 }
-
{ "error": "No record found for user:12345-tempolor:user_id-job:abcdef123456789", "code": 404 }
Model
{ // TypeScript, all fields are optional
bizType: string
childType: string
matChildType: string
sourceType: string
itemId: string
job_id: string
genItemId: string
userId: string
titleEn: string
cover: string
mp3OssId: string
wavOssId: string
ossWatermarkMp3: string
status: number
status_name: string // "GENERATING", "FAILED", "COMPLETED"
status_final: boolean
progress: number
downloadTotal: number
likeTotal: number
collectTotal: number
musicMaterial: {
style: string
chord: string
mood: string
inst: string
instInfo: string
scene: string
otherInfo: string
otherInfoCn: string
key: string
bpm: number
dur: number
seed: number
}
createTime: number
updateTime: number
ltmMaterialExtendDto: {
lyricsPrompt: string
description: string
prompt: string
genMode: number
model: string
}
editType: string
operatorType: string
canExtend: boolean
error: string
code: number
}
Examples
-
curl -H "Authorization: Bearer …" \ https://api.useapi.net/v1/tempolor/music/user:12345-tempolor:user_id-job:abcdef123456789
-
const job_id = "user:12345-tempolor:user_id-job:abcdef123456789"; const token = "API token"; const apiUrl = `https://api.useapi.net/v1/tempolor/music/${job_id}`; const response = await fetch(apiUrl, { method: "GET", headers: { "Authorization": `Bearer ${token}` } }); const result = await response.json(); console.log("response", {response, result}); // Polling example - check status every 10 seconds until completed or failed async function pollJobStatus(job_id) { const apiUrl = `https://api.useapi.net/v1/tempolor/music/${job_id}`; while (true) { const response = await fetch(apiUrl, { method: "GET", headers: { "Authorization": `Bearer ${token}` } }); const result = await response.json(); console.log(`Job status: ${result.status_name}, Progress: ${result.progress}%`); if (result.status_final) { console.log(`Music generation ${result.status_name.toLowerCase()}`); return result; } // Wait 10 seconds before checking again await new Promise(resolve => setTimeout(resolve, 10000)); } }
-
import requests import time job_id = "user:12345-tempolor:user_id-job:abcdef123456789" token = "API token" apiUrl = f"https://api.useapi.net/v1/tempolor/music/{job_id}" headers = { "Authorization": f"Bearer {token}" } response = requests.get(apiUrl, headers=headers) print(response.status_code, response.json()) # Polling example - check status every 10 seconds until completed or failed def poll_job_status(job_id): apiUrl = f"https://api.useapi.net/v1/tempolor/music/{job_id}" while True: response = requests.get(apiUrl, headers=headers) result = response.json() print(f"Job status: {result.get('status_name')}, Progress: {result.get('progress')}%") if result.get('status_final'): print(f"Music generation {result.get('status_name').lower()}") return result # Wait 10 seconds before checking again time.sleep(10)