cURL
curl --request GET \
--url https://api.ttapi.io/suno/v2/fetch \
--header 'TT-API-KEY: <api-key>'import requests
url = "https://api.ttapi.io/suno/v2/fetch"
headers = {"TT-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'TT-API-KEY': '<api-key>'}};
fetch('https://api.ttapi.io/suno/v2/fetch', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ttapi.io/suno/v2/fetch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"TT-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ttapi.io/suno/v2/fetch"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("TT-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ttapi.io/suno/v2/fetch")
.header("TT-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ttapi.io/suno/v2/fetch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["TT-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": "SUCCESS",
"message": "success",
"jobId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"data": {
"jobId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"action": "music",
"progress": "100%",
"mv": "chirp-v5",
"quota": "6",
"hookUrl": "https://webhook-test.com/ed9731f4026f04e7c0cfa99e41d2b2fc",
"musics": [
{
"musicId": "xxxxxxxxxxxxxxxxx",
"prompt": "xxxxxxxxxxxxxxxxxx",
"title": "xxxxx",
"tags": "xxxxx",
"imageUrl": "https://cdn2.suno.ai/xxxxxxxxxxxxxxxxx.jpeg",
"imageLargeUrl": "https://cdn2.suno.ai/xxxxxxxxxxxxxx.jpeg",
"audioUrl": "https://cdn1.suno.ai/xxxxxxxxxxxxxxx.mp3",
"videoUrl": "https://cdn1.suno.ai/xxxxxxxxxxxxxxx.mp4",
"duration": "211.44",
"negativeTags": "xxxxxxxxxxxxxxxxxxx",
"styleWeight": null,
"weirdnessConstraint": null,
"audioWeight": null,
"createdAt": "2026-03-03T02:23:51.401Z"
}
]
}
}{
"status": "FAILED",
"message": "<string>",
"data": {}
}{
"status": "FAILED",
"message": "Wrong TT-API-KEY or email is not activated."
}Suno
Suno Task Result V2 API Reference
Use the Suno V2 task result API to fetch more up-to-date music generation status and final output data for production-ready integrations.
GET
/
suno
/
v2
/
fetch
cURL
curl --request GET \
--url https://api.ttapi.io/suno/v2/fetch \
--header 'TT-API-KEY: <api-key>'import requests
url = "https://api.ttapi.io/suno/v2/fetch"
headers = {"TT-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'TT-API-KEY': '<api-key>'}};
fetch('https://api.ttapi.io/suno/v2/fetch', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ttapi.io/suno/v2/fetch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"TT-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ttapi.io/suno/v2/fetch"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("TT-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ttapi.io/suno/v2/fetch")
.header("TT-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ttapi.io/suno/v2/fetch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["TT-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": "SUCCESS",
"message": "success",
"jobId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"data": {
"jobId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"action": "music",
"progress": "100%",
"mv": "chirp-v5",
"quota": "6",
"hookUrl": "https://webhook-test.com/ed9731f4026f04e7c0cfa99e41d2b2fc",
"musics": [
{
"musicId": "xxxxxxxxxxxxxxxxx",
"prompt": "xxxxxxxxxxxxxxxxxx",
"title": "xxxxx",
"tags": "xxxxx",
"imageUrl": "https://cdn2.suno.ai/xxxxxxxxxxxxxxxxx.jpeg",
"imageLargeUrl": "https://cdn2.suno.ai/xxxxxxxxxxxxxx.jpeg",
"audioUrl": "https://cdn1.suno.ai/xxxxxxxxxxxxxxx.mp3",
"videoUrl": "https://cdn1.suno.ai/xxxxxxxxxxxxxxx.mp4",
"duration": "211.44",
"negativeTags": "xxxxxxxxxxxxxxxxxxx",
"styleWeight": null,
"weirdnessConstraint": null,
"audioWeight": null,
"createdAt": "2026-03-03T02:23:51.401Z"
}
]
}
}{
"status": "FAILED",
"message": "<string>",
"data": {}
}{
"status": "FAILED",
"message": "Wrong TT-API-KEY or email is not activated."
}Use the Suno Fetch API to retrieve the latest status and final output for asynchronous Suno jobs on TTAPI.
Authorizations
You can obtain your API key from the TTAPI Dashboard.
Query Parameters
Job ID returned by the generation request
Last modified on April 17, 2026
⌘I