curl --request POST \
--url https://api.apimart.ai/v1/music/generations/download \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"]
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/music/generations/download",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"],
},
)
print(response.json())
const response = await fetch(
"https://api.apimart.ai/v1/music/generations/download",
{
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "suno",
task_id: "task_01JGXXXXXXXXXXXX",
audio_index: 1,
formats: ["mp3", "wav"],
}),
},
);
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01JHXXXXXXXXXXXX"
}
]
}
{
"error": {
"message": "`formats` contains unsupported format `flac`. Supported: mp3 / m4a / wav",
"type": "invalid_request_error",
"code": "invalid_source_reference"
}
}
{
"error": {
"code": 401,
"message": "Ошибка аутентификации. Проверьте ключ API.",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Недостаточно средств на счёте",
"type": "payment_required"
}
}
Suno
Скачивание аудиофайлов
- Скачивание песен Suno в форматах MP3, M4A или WAV
- Несколько форматов в одном запросе и URL для каждого файла
- Выбор исходной песни с помощью task_id и audio_index
- Асинхронная отправка и получение результата через API музыкальных задач
POST
/
v1
/
music
/
generations
/
download
curl --request POST \
--url https://api.apimart.ai/v1/music/generations/download \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"]
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/music/generations/download",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"],
},
)
print(response.json())
const response = await fetch(
"https://api.apimart.ai/v1/music/generations/download",
{
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "suno",
task_id: "task_01JGXXXXXXXXXXXX",
audio_index: 1,
formats: ["mp3", "wav"],
}),
},
);
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01JHXXXXXXXXXXXX"
}
]
}
{
"error": {
"message": "`formats` contains unsupported format `flac`. Supported: mp3 / m4a / wav",
"type": "invalid_request_error",
"code": "invalid_source_reference"
}
}
{
"error": {
"code": 401,
"message": "Ошибка аутентификации. Проверьте ключ API.",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Недостаточно средств на счёте",
"type": "payment_required"
}
}
Прежний эндпоинт
POST /v1/music/generations/wav устарел. Он временно остаётся совместимым и эквивалентен новому API с formats: ["wav"]. В новом коде используйте POST /v1/music/generations/download.Выбор исходной песни: передайте
task_id задачи, создавшей исходное аудио, и выберите трек из music[] с помощью audio_index. Индекс начинается с 1, значение по умолчанию — 1.curl --request POST \
--url https://api.apimart.ai/v1/music/generations/download \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"]
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/music/generations/download",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"],
},
)
print(response.json())
const response = await fetch(
"https://api.apimart.ai/v1/music/generations/download",
{
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "suno",
task_id: "task_01JGXXXXXXXXXXXX",
audio_index: 1,
formats: ["mp3", "wav"],
}),
},
);
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01JHXXXXXXXXXXXX"
}
]
}
{
"error": {
"message": "`formats` contains unsupported format `flac`. Supported: mp3 / m4a / wav",
"type": "invalid_request_error",
"code": "invalid_source_reference"
}
}
{
"error": {
"code": 401,
"message": "Ошибка аутентификации. Проверьте ключ API.",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Недостаточно средств на счёте",
"type": "payment_required"
}
}
Аутентификация
string
обязательно
Для всех API нужен Bearer Token. Получите ключ на странице API-ключей.
Authorization: Bearer YOUR_API_KEY
Параметры запроса
string
по умолчанию:"suno"
Название модели. Используйте
suno; по умолчанию также suno.string
обязательно
ID задачи, которая создала исходную песню.Исходная задача должна принадлежать текущему аккаунту, быть завершённой и содержать доступное для скачивания аудио. Подходят генерация музыки, продолжение, кавер и разделение на дорожки; текстовые задачи вроде создания текста или анализа BPM не подходят.
integer
по умолчанию:"1"
Номер трека в результате
music[] исходной задачи.- Отсчёт с
1 - По умолчанию:
1 - Не больше числа треков в исходной задаче
string[]
Массив форматов, минимум один элемент.Значения:
mp3, m4a, wav.Можно запросить несколько форматов. Регистр не учитывается, дубликаты удаляются автоматически, порядок результата совпадает с запросом.string
Для одного формата можно использовать вместо
formats.Пример: "format": "mp3"Используйте
formats или format. Если оба отсутствуют либо массив пуст, возвращается HTTP 400.Ответ при отправке
При успехе возвращается новыйtask_id задачи скачивания.
data — массив; читайте data[0].task_id. Это ID новой задачи скачивания, а не исходный task_id песни из запроса.Получение результата
Используйте ID задачи скачивания:GET /v1/music/tasks/{task_id}
completed и не failed, опрашивайте каждые 2 секунды не более 60 секунд.
Завершено
{
"code": 200,
"data": {
"id": "task_01JHXXXXXXXXXXXX",
"status": "completed",
"progress": 100,
"cost": 0.01,
"credits_cost": 0.1,
"result": {
"music_id": "518c74ee-62ac-4ccd-b3d9-7003acd12ad7",
"files": [
{
"format": "mp3",
"url": "https://assets.apimart.ai/audio/example.mp3"
},
{
"format": "wav",
"url": "https://assets.apimart.ai/audio/example.wav"
}
],
"wavUrl": "https://assets.apimart.ai/audio/example.wav"
}
}
}
result.files[]:
| Поле | Тип | Описание |
|---|---|---|
format | string | mp3 / m4a / wav |
url | string | URL скачивания |
result.wavUrl существует только для совместимости со старым WAV API. Новый код должен читать result.files[].Обработка
{
"code": 200,
"data": {
"id": "task_01JHXXXXXXXXXXXX",
"status": "processing",
"progress": 50,
"created": 1756800000
}
}
result пока нет. Продолжайте опрос.
Ошибка
Неуспешные задачи автоматически возмещаются и возвращаютcost: 0. Покажите error.message и предложите повторить.
URL файлов
Обычно используется файловый домен APIMart. Если перенос в хранилище не удался, может вернуться URL CDN поставщика без гарантированного срока действия.Скачайте и сохраните файл как можно скорее. Не используйте временный URL для долговременного хранения.
Ошибки
Ошибки проверки возвращают HTTP 400 до создания задачи и оплаты.| Текст ошибки | Причина |
|---|---|
formats is required / must contain at least one | Формат не указан |
unsupported format | Значение не mp3 / m4a / wav |
task_id is required / invalid task_id format | Исходный ID отсутствует или неверен |
source task not found | Исходная задача отсутствует или принадлежит другому аккаунту |
audio_index N out of range | Номер трека вне диапазона |
track #N has no music_id | Исходная задача не завершена или трек без аудио |
model_price_not_configured означает, что цена suno@download не настроена; обратитесь в поддержку.
Оплата и повторные скачивания
- Один запрос с несколькими форматами оплачивается один раз
- Повторная отправка той же песни оплачивается снова, даже для того же формата
- Запрос другого формата новой задачей также оплачивается
- Неуспешные задачи возмещаются автоматически
Повторно используйте уже полученные URL и блокируйте кнопку скачивания во время запроса, чтобы избежать дублей и лишних списаний.
Переход со старого API
| Пункт | Старый | Новый |
|---|---|---|
| Путь | /v1/music/generations/wav | /v1/music/generations/download |
| Форматы | Только WAV | MP3 / M4A / WAV, несколько |
| Параметр | — | formats или format |
| Результат | result.wavUrl | result.files[] |
/generations/download.
Response
integer
Код ответа; при успехе 200