cURL
curl --request POST \
--url https://api.ttapi.io/suno/v1/adjust-speed \
--header 'Content-Type: application/json' \
--header 'TT-API-KEY: <api-key>' \
--data '
{
"music_id": "<string>",
"keep_pitch": false,
"speed_multiplier": 1,
"title": "<string>",
"isStorage": true,
"hookUrl": "<string>"
}
'import requests
url = "https://api.ttapi.io/suno/v1/adjust-speed"
payload = {
"music_id": "<string>",
"keep_pitch": False,
"speed_multiplier": 1,
"title": "<string>",
"isStorage": True,
"hookUrl": "<string>"
}
headers = {
"TT-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'TT-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
music_id: '<string>',
keep_pitch: false,
speed_multiplier: 1,
title: '<string>',
isStorage: true,
hookUrl: '<string>'
})
};
fetch('https://api.ttapi.io/suno/v1/adjust-speed', 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/v1/adjust-speed",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'music_id' => '<string>',
'keep_pitch' => false,
'speed_multiplier' => 1,
'title' => '<string>',
'isStorage' => true,
'hookUrl' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ttapi.io/suno/v1/adjust-speed"
payload := strings.NewReader("{\n \"music_id\": \"<string>\",\n \"keep_pitch\": false,\n \"speed_multiplier\": 1,\n \"title\": \"<string>\",\n \"isStorage\": true,\n \"hookUrl\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("TT-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.ttapi.io/suno/v1/adjust-speed")
.header("TT-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"music_id\": \"<string>\",\n \"keep_pitch\": false,\n \"speed_multiplier\": 1,\n \"title\": \"<string>\",\n \"isStorage\": true,\n \"hookUrl\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ttapi.io/suno/v1/adjust-speed")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["TT-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"music_id\": \"<string>\",\n \"keep_pitch\": false,\n \"speed_multiplier\": 1,\n \"title\": \"<string>\",\n \"isStorage\": true,\n \"hookUrl\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "SUCCESS",
"message": "success",
"data": {
"jobId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}{
"status": "FAILED",
"message": "<string>",
"data": {}
}{
"status": "FAILED",
"message": "Wrong TT-API-KEY or email is not activated."
}Suno
Suno Adjust Speed API Documentation
Use the Suno adjust-speed API to change a song playback speed from 0.25x to 4x, optionally preserving pitch.
POST
/
suno
/
v1
/
adjust-speed
cURL
curl --request POST \
--url https://api.ttapi.io/suno/v1/adjust-speed \
--header 'Content-Type: application/json' \
--header 'TT-API-KEY: <api-key>' \
--data '
{
"music_id": "<string>",
"keep_pitch": false,
"speed_multiplier": 1,
"title": "<string>",
"isStorage": true,
"hookUrl": "<string>"
}
'import requests
url = "https://api.ttapi.io/suno/v1/adjust-speed"
payload = {
"music_id": "<string>",
"keep_pitch": False,
"speed_multiplier": 1,
"title": "<string>",
"isStorage": True,
"hookUrl": "<string>"
}
headers = {
"TT-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'TT-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
music_id: '<string>',
keep_pitch: false,
speed_multiplier: 1,
title: '<string>',
isStorage: true,
hookUrl: '<string>'
})
};
fetch('https://api.ttapi.io/suno/v1/adjust-speed', 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/v1/adjust-speed",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'music_id' => '<string>',
'keep_pitch' => false,
'speed_multiplier' => 1,
'title' => '<string>',
'isStorage' => true,
'hookUrl' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ttapi.io/suno/v1/adjust-speed"
payload := strings.NewReader("{\n \"music_id\": \"<string>\",\n \"keep_pitch\": false,\n \"speed_multiplier\": 1,\n \"title\": \"<string>\",\n \"isStorage\": true,\n \"hookUrl\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("TT-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.ttapi.io/suno/v1/adjust-speed")
.header("TT-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"music_id\": \"<string>\",\n \"keep_pitch\": false,\n \"speed_multiplier\": 1,\n \"title\": \"<string>\",\n \"isStorage\": true,\n \"hookUrl\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ttapi.io/suno/v1/adjust-speed")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["TT-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"music_id\": \"<string>\",\n \"keep_pitch\": false,\n \"speed_multiplier\": 1,\n \"title\": \"<string>\",\n \"isStorage\": true,\n \"hookUrl\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "SUCCESS",
"message": "success",
"data": {
"jobId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}{
"status": "FAILED",
"message": "<string>",
"data": {}
}{
"status": "FAILED",
"message": "Wrong TT-API-KEY or email is not activated."
}This endpoint costs 3 quota (approx. $0.03) per request.
music_id, a speed_multiplier from 0.25 to 4, the keep_pitch option, and the output title. Save the returned jobId, then retrieve the result through Suno Fetch V2 or the hookUrl callback.Authorizations
You can obtain your API key from the TTAPI Dashboard.
Body
application/json
Source music ID to adjust.
Whether to preserve the original pitch while changing speed.
Playback speed multiplier. Valid range: 0.25 to 4.
Required range:
0.25 <= x <= 4Title for the adjusted output track.
Whether to store the adjusted audio and return a TTAPI CDN URL.
Callback URL for task updates and results.
Last modified on June 11, 2026
⌘I