curl --request POST \
--url https://api.apimart.ai/v1/music/generations/replaceFlowMusic \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "flowmusic",
"version": "lyria-3.5",
"clip_id": "abc123-def456",
"start_s": 10,
"end_s": 20,
"instruction": "Ganti dengan versi piano"
}'
import requests
url = "https://api.apimart.ai/v1/music/generations/replaceFlowMusic"
payload = {
"model": "flowmusic",
"version": "lyria-3.5",
"clip_id": "abc123-def456",
"start_s": 10,
"end_s": 20,
"instruction": "Ganti dengan versi piano"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/music/generations/replaceFlowMusic";
const payload = {
model: "flowmusic",
version: "lyria-3.5",
clip_id: "abc123-def456",
start_s: 10,
end_s: 20,
instruction: "Ganti dengan versi piano"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KWXVHGTG5JM33S8FG1K90YQ6"
}
]
}
{
"error": {
"message": "end_s must be greater than start_s",
"type": "invalid_request",
"param": "",
"code": "invalid_request"
}
}
{
"error": {
"message": "Saldo tidak mencukupi",
"type": "invalid_request",
"param": "",
"code": "quota_not_enough"
}
}
{
"error": {
"message": "Kapasitas grup saat ini penuh, silakan coba lagi nanti",
"type": "rate_limit_error",
"param": "",
"code": "rate_limit_error"
}
}
Flow Music
Penggantian Segmen dengan Lyria 3.5
Gunakan Lyria 3.5 untuk mengganti segmen tertentu dari audio yang telah dihasilkan
POST
/
v1
/
music
/
generations
/
replaceFlowMusic
curl --request POST \
--url https://api.apimart.ai/v1/music/generations/replaceFlowMusic \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "flowmusic",
"version": "lyria-3.5",
"clip_id": "abc123-def456",
"start_s": 10,
"end_s": 20,
"instruction": "Ganti dengan versi piano"
}'
import requests
url = "https://api.apimart.ai/v1/music/generations/replaceFlowMusic"
payload = {
"model": "flowmusic",
"version": "lyria-3.5",
"clip_id": "abc123-def456",
"start_s": 10,
"end_s": 20,
"instruction": "Ganti dengan versi piano"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/music/generations/replaceFlowMusic";
const payload = {
model: "flowmusic",
version: "lyria-3.5",
clip_id: "abc123-def456",
start_s: 10,
end_s: 20,
instruction: "Ganti dengan versi piano"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KWXVHGTG5JM33S8FG1K90YQ6"
}
]
}
{
"error": {
"message": "end_s must be greater than start_s",
"type": "invalid_request",
"param": "",
"code": "invalid_request"
}
}
{
"error": {
"message": "Saldo tidak mencukupi",
"type": "invalid_request",
"param": "",
"code": "quota_not_enough"
}
}
{
"error": {
"message": "Kapasitas grup saat ini penuh, silakan coba lagi nanti",
"type": "rate_limit_error",
"param": "",
"code": "rate_limit_error"
}
}
curl --request POST \
--url https://api.apimart.ai/v1/music/generations/replaceFlowMusic \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "flowmusic",
"version": "lyria-3.5",
"clip_id": "abc123-def456",
"start_s": 10,
"end_s": 20,
"instruction": "Ganti dengan versi piano"
}'
import requests
url = "https://api.apimart.ai/v1/music/generations/replaceFlowMusic"
payload = {
"model": "flowmusic",
"version": "lyria-3.5",
"clip_id": "abc123-def456",
"start_s": 10,
"end_s": 20,
"instruction": "Ganti dengan versi piano"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/music/generations/replaceFlowMusic";
const payload = {
model: "flowmusic",
version: "lyria-3.5",
clip_id: "abc123-def456",
start_s: 10,
end_s: 20,
instruction: "Ganti dengan versi piano"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KWXVHGTG5JM33S8FG1K90YQ6"
}
]
}
{
"error": {
"message": "end_s must be greater than start_s",
"type": "invalid_request",
"param": "",
"code": "invalid_request"
}
}
{
"error": {
"message": "Saldo tidak mencukupi",
"type": "invalid_request",
"param": "",
"code": "quota_not_enough"
}
}
{
"error": {
"message": "Kapasitas grup saat ini penuh, silakan coba lagi nanti",
"type": "rate_limit_error",
"param": "",
"code": "rate_limit_error"
}
}
Autentikasi
string
wajib
Semua endpoint memerlukan autentikasi menggunakan Bearer TokenMendapatkan API Key:Kunjungi halaman pengelolaan API Key untuk mendapatkan API Key AndaTambahkan ke header permintaan saat digunakan:
Authorization: Bearer YOUR_API_KEY
Parameter Permintaan
string
wajib
Nama model, selalu isi
"flowmusic" (tidak peka huruf besar/kecil)string
wajib
Versi model, selalu isi
"lyria-3.5"Lyria 3.5 tetap menggunakan
flowmusic sebagai nama model. Jangan ubah model menjadi lyria-3.5 atau flowmusic-lyria-3.5.string
wajib
clip_id musik sumber, berasal dari
result.music[].clip_id tugas yang telah berhasilnumber
wajib
Waktu mulai penggantian (detik)
number
wajib
Waktu akhir penggantian (detik)
end_s harus lebih besar dari start_s dan tidak boleh melebihi durasi clip sumber.string
wajib
Instruksi penyuntingan untuk segmen penggantiContoh:
"Ganti dengan versi piano"string
Judul musik setelah penggantian
integer
Seed acak, digunakan untuk mereproduksi atau mengontrol hasil pembuatan
Respons
integer
Kode status respons, bernilai 200 jika berhasil
array
Skenario Penggunaan
Skenario 1: Mengganti detik ke-10 hingga ke-20 dengan versi piano
{
"model": "flowmusic",
"version": "lyria-3.5",
"clip_id": "abc123-def456",
"start_s": 10,
"end_s": 20,
"instruction": "Ganti dengan versi piano"
}
Memeriksa hasil tugasPenggantian segmen adalah tugas asinkron; setelah diajukan,
task_id akan dikembalikan. Gunakan endpoint Mendapatkan Status Tugas untuk memeriksa progres dan hasil pembuatan. Hasil penggantian adalah clip_id yang baru (seluruh lagu dikeluarkan ulang dengan rentang yang ditentukan sudah diganti); gunakan clip_id baru untuk operasi berikutnya.Contoh Hasil Tugas Selesai
Contoh respons kueri (GET /v1/music/tasks/{task_id}):
{
"code": 200,
"data": {
"id": "task_01KWXVHGTG5JM33S8FG1K90YQ6",
"status": "completed",
"progress": 100,
"created": 1783413392,
"completed": 1783413454,
"actual_time": 62,
"cost": 0.048,
"credits_cost": 0.48,
"result": {
"music": [
{
"clip_id": "9508d1fe-633e-464b-8a40-c6368e5464fa",
"title": "Untitled (Replaced)",
"duration_seconds": "181.58933333",
"create_time": "2026-07-07T08:37:13.864452Z",
"lyrics": "[Verse 1]\nWaking up to the morning light,\n...",
"lyrics_id": "c302d603-81b6-552f-8122-e512928d6aa1",
"lyrics_timing_markers": [[10, 12], [71, 15]],
"audio_url": "https://cdn.apimart.ai/audio/flowmusic_9508d1fe.m4a",
"wav_url": "https://cdn.apimart.ai/audio/flowmusic_9508d1fe.wav",
"image_url": "https://cdn.apimart.ai/image/flowmusic_9508d1fe_cover.jpg"
}
]
}
}
}