API پرس‌وجوی آهنگ و تاریخچه

به‌روزرسانی 2026-09-18 · تیم Suno-API

این صفحه سه نقطه پایانی رایگان پرس‌وجو را پوشش می‌دهد:

قابلیت Method نقطه پایانی
پرس‌وجوی وضعیت و نتیجه یک آهنگ POST /api/music/query
پرس‌وجوی آهنگ‌هایی که حساب فعلی ساخته است GET /api/music/songs
پرس‌وجوی پارامترهای ذخیره‌شده هنگام ساخت آهنگ GET /api/music/songs/:song_id

اگر روی نقطه پایانی تولید از حالت رسید پذیرش (accept_mode=async) استفاده کرده‌اید، چیزی که در دست دارید شماره رسید است، نه شناسه آهنگ. پیشرفت را با GET /api/music/requests/{request_id} پیگیری کنید و پس از دریافت song_id واقعی به نقاط پایانی این صفحه برگردید. بخش «حالت رسید پذیرش» را در API تولید در حالت ساده ببینید.

احراز هویت و دامنه داده

هر سه نقطه پایانی با یک کلید API احراز هویت می‌شوند:

Authorization: Bearer YOUR_API_KEY

تاریخچه آهنگ‌ها بر پایه user_id مالک کلید API جدا می‌شود. چند کلید ساخته‌شده زیر یک حساب اصلی می‌توانند تاریخچه همان حساب را بخوانند، اما نه آهنگ‌های کاربر دیگر یا حساب سایت فرعی دیگر.

نقاط پایانی تاریخچه فقط آهنگ‌های واقعاً تولیدشده را برمی‌گردانند. موارد زیر مستثنا هستند:


1. پرس‌وجوی وضعیت تولید

وضعیت فعلی و نتیجه نهایی یک یا چند شناسه آهنگ را جست‌وجو می‌کند.

نقطه پایانی: POST /api/music/query

صورت‌حساب: رایگان.

Headers

پارامتر نوع الزامی یادداشت
Authorization string بله Bearer YOUR_API_KEY
Content-Type string بله application/json

پارامترهای بدنه

پارامتر نوع الزامی پیش‌فرض یادداشت
model string خیر suno-v6 نسخه مدل
song_ids string بله - شناسه آهنگ‌ها، جدا شده با کاما

نمونه درخواست

curl -X POST https://www.suno-api.io/api/music/query \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "suno-v6",
    "song_ids": "clip_id_1,clip_id_2"
  }'

نمونه پاسخ

[
  {
    "song_id": "clip_id_1",
    "song_title": "عنوان آهنگ",
    "status": "completed",
    "audio_url": "https://example.com/audio.mp3",
    "video_url": "https://example.com/video.mp4",
    "cover_url": "https://example.com/cover.jpg",
    "lyrics": "متن ترانه",
    "style_tags": "Mandopop, acoustic",
    "duration": 180.5,
    "model_version": "suno-v6",
    "created_at": "2026-05-21T10:00:00Z"
  }
]

نکات سازگاری

ممکن است مستندات قدیمی song_ids را آرایه نشان دهند. امروزه رشته جدا شده با کاما توصیه می‌شود، که با روش واقعی فراخوانی این نقطه پایانی مطابقت دارد.

song_ids باید شناسه آهنگ واقعی داشته باشد. شناسه جانگهدار که با pending: شروع می‌شود song_id نهایی نیست و اینجا کار نمی‌کند؛ پرس‌وجوی تنها شناسه‌های جانگهدار ممکن است آرایه خالی [] برگرداند.

مقدار model، model_version یا model_name پلتفرم در پاسخ ممکن است مقادیر تاریخی را نگه دارد. کارهای جدید باید از suno-v6، suno-v6-wild یا suno-v6-mini استفاده کنند؛ از suno-v2 تا suno-v5-5 بازنشسته شده‌اند و دیدن این نام‌ها در تاریخچه به معنای امکان ارسال آن مدل نیست.

تا زمانی که کار در وضعیت pending، submitted یا processing است، audio_url، video_url و cover_url ممکن است خالی باشند — این برای کار ناتمام طبیعی است. صرفاً از خالی‌بودن آدرس نتیجه شکست نگیرید؛ به status تکیه کنید و وقتی وضعیت کامل شد دوباره پرس‌وجو کنید. تنها وقتی وضعیت کامل است و آدرس‌ها هنوز خالی‌اند، بهتر است با ذکر song_id با پشتیبانی تماس بگیرید.

⚠️ آدرس‌های صوتی 7 روز زنده‌اند — فایل‌هایتان را به‌موقع منتقل کنید

audio_url، video_url (و دیگر آدرس‌های رسانه مانند WAV) که اینجا برگردانده می‌شوند از انبار شیئی پلتفرم سرو می‌شوند و به‌طور پیش‌فرض پس از 7 روز منقضی می‌شوند: فایل‌ها بازیافت می‌شوند و آدرس قدیمی 404 می‌دهد.

  • در همان 7 روز فایل‌ها را به انبار خودتان منتقل کنید؛ این آدرس را لینک بلندمدت ندانید.
  • آدرس منقضی‌شده نیازی به تولید دوباره آهنگ ندارد و دوباره هزینه نمی‌گیرد: این نقطه پایانی (POST /api/music/query) را دوباره فراخوانی کنید تا آدرس تازه و معتبر آن آهنگ را بگیرید.

2. پرس‌وجوی تاریخچه آهنگ‌های حساب

آهنگ‌هایی را فهرست می‌کند که حساب اصلی مالک کلید API فعلی ساخته است. مناسب برای ساخت فهرست آهنگ، انتخاب‌گر یا صفحه تاریخچه خودتان.

نقطه پایانی: GET /api/music/songs

صورت‌حساب: رایگان.

پارامترهای پرس‌وجو

پارامتر نوع الزامی پیش‌فرض یادداشت
p integer خیر 1 شماره صفحه، از 1
page_size integer خیر 20 تعداد در هر صفحه، حداکثر 100
q string خیر - جست‌وجوی تقریبی بر اساس عنوان، یا جست‌وجوی دقیق با شناسه کامل آهنگ
status string خیر - فیلتر دقیق وضعیت، مانند completed، playable

نتایج بر اساس created_at و شناسه داخلی رکورد به‌صورت نزولی مرتب می‌شوند، بنابراین ترتیب صفحه‌بندی پایدار می‌ماند.

روش پیدا کردن ارسالی که مهلتش تمام شده: نقاط پایانی تولید پیش از پذیرش هیچ پاسخ میانی نمی‌دهند. اگر کلاینت شما هنگام ارسال به مهلت خورد یا اتصال قطع شد، ممکن است آن سفارش پذیرفته شده و در حال تولید باشد. نگاهی به این نقطه پایانی بیندازید (تازه‌ترین اول): آهنگ‌های پذیرفته‌شده به‌طور عادی در فهرست ظاهر می‌شوند. تنها پس از اطمینان از نبودن آن دوباره ارسال کنید تا دوبار هزینه نپردازید. بخش «زمان‌های انتظار و تنظیم مهلت» را در مرور کلی API جدید ببینید.

نمونه درخواست

curl "https://www.suno-api.io/api/music/songs?p=1&page_size=20&status=completed" \
  -H "Authorization: Bearer YOUR_API_KEY"

نمونه پاسخ

{
  "success": true,
  "message": "",
  "data": {
    "page": 1,
    "page_size": 20,
    "total": 42,
    "items": [
      {
        "song_id": "8e31b3c0-example-song-id",
        "title": "شهر در شب",
        "status": "completed",
        "generation_type": "custom_generate",
        "model": "suno-v6",
        "duration": 187.42,
        "audio_url": "https://example.com/audio.mp3",
        "image_url": "https://example.com/cover.jpg",
        "created_at": 1784000000,
        "completed_at": 1784000120
      }
    ]
  }
}

فیلدهای پاسخ

فیلد نوع یادداشت
song_id string شناسه واقعی آهنگ، قابل استفاده در پرس‌وجوی جزئیات
title string عنوان فعلی، که کاربر ممکن است تغییر داده باشد
status string وضعیت فعلی
generation_type string نوع تولید
model string مدل تولید
duration number مدت صدا بر حسب ثانیه
audio_url string آدرس صوتی؛ تا زمانی که کار تمام نشده می‌تواند خالی باشد
image_url string آدرس کاور؛ می‌تواند خالی باشد
created_at integer زمان ساخت، برچسب زمانی Unix بر حسب ثانیه
completed_at integer زمان پایان، برچسب زمانی Unix بر حسب ثانیه؛ تا پایان کار ممکن است نباشد

نقطه پایانی فهرست، پرامپت‌ها، فیلدهای صورت‌حساب، اطلاعات حساب یا پاسخ خام را برنمی‌گرداند. برای پرامپت‌ها و پارامترهای تولید، نقطه پایانی جزئیات آهنگ را فراخوانی کنید.


3. پرس‌وجوی پارامترهای تولید

پرامپت، سبک، مدل و آهنگ منبعی را که پلتفرم هنگام تولید ذخیره کرده جست‌وجو می‌کند.

نقطه پایانی: GET /api/music/songs/:song_id

صورت‌حساب: رایگان.

فقط آهنگ‌های حساب اصلی مالک کلید API فعلی خوانده می‌شوند. آهنگ‌های کاربران دیگر یا حساب‌های سایت فرعی به‌طور یکسان «آهنگ یافت نشد» تلقی می‌شوند.

پارامتر مسیر

پارامتر نوع الزامی یادداشت
song_id string بله شناسه واقعی آهنگ

نمونه درخواست

curl "https://www.suno-api.io/api/music/songs/8e31b3c0-example-song-id" \
  -H "Authorization: Bearer YOUR_API_KEY"

نمونه پاسخ

{
  "success": true,
  "message": "",
  "data": {
    "song_id": "8e31b3c0-example-song-id",
    "title": "شهر در شب",
    "status": "completed",
    "generation_type": "custom_generate",
    "model": "suno-v6",
    "duration": 187.42,
    "audio_url": "https://example.com/audio.mp3",
    "image_url": "https://example.com/cover.jpg",
    "video_url": "",
    "wav_url": "",
    "created_at": 1784000000,
    "completed_at": 1784000120,
    "client_request_id": "example-request-id",
    "client_request_index": 0,
    "parameters": {
      "prompt": "خیابان‌های شهر پس از باران، متنی درباره دیدار دوباره",
      "style_tags": "Mandopop, acoustic, warm vocal",
      "title": "شهر در شب",
      "model": "suno-v6",
      "generation_type": "custom_generate",
      "source_song_id": "",
      "source_audio_url": "",
      "custom_mode": null,
      "instrumental": null,
      "negative_tags": null,
      "vocal_gender": null,
      "lyrics_mode": null,
      "wait_audio": null,
      "style_weight": null,
      "weirdness_constraint": null
    },
    "parameter_retention": {
      "core_parameters_available": true,
      "extended_parameters_available": false,
      "sources": [
        "suno_tasks"
      ],
      "unavailable_fields": [
        "custom_mode",
        "instrumental",
        "negative_tags",
        "vocal_gender",
        "lyrics_mode",
        "wait_audio",
        "style_weight",
        "weirdness_constraint"
      ]
    }
  }
}

فیلدهای parameters

فیلد نوع یادداشت
prompt string پرامپت تولید یا متن آهنگ
style_tags string برچسب‌های سبک
title string عنوان تولید ذخیره‌شده؛ کار تاریخی معمولی ممکن است فقط عنوان فعلی را نگه دارد
model string مدل تولید
generation_type string نوع تولید
source_song_id string شناسه آهنگ منبع برای کارهای کاور، ادامه و مشابه
source_audio_url string آدرس صدای منبع
custom_mode boolean/null آیا حالت سفارشی استفاده شده؛ null وقتی ذخیره نشده
instrumental boolean/null آیا آهنگ بی‌کلام است؛ داده‌های تاریخی موجود معمولاً این را جدا ذخیره نکرده‌اند
negative_tags string/null سبک‌های حذف‌شده
vocal_gender string/null تنظیم جنسیت خواننده
lyrics_mode string/null حالت متن؛ داده‌های تاریخی موجود معمولاً آن را ذخیره نکرده‌اند
wait_audio boolean/null آیا منتظر صدای کامل مانده؛ داده‌های تاریخی موجود معمولاً آن را ذخیره نکرده‌اند
style_weight number/null وزن سبک
weirdness_constraint number/null پارامتر خلاقیت / غرابت

فیلد prompt_view (نمایش پرامپت، افزوده‌شده در 2026-09-28)

prompt_view ساختاری نرمال‌شده و مخصوص «نمایش پرامپت» است: داده‌ها را بر پایه نوع تولید در بخش‌های ثابت سازمان می‌دهد، بنابراین کلاینت دیگر لازم نیست تصمیم بگیرد کدام فیلد را نشان دهد. این فیلد صرفاً افزودنی است — فیلدهای قدیمی (parameters، parameter_retention) نام و معنای خود را حفظ می‌کنند و کلاینت‌هایی که فیلد جدید را تجزیه نمی‌کنند هیچ تأثیری نمی‌بینند.

"prompt_view": {
  "type": "custom_generate",
  "type_label": "حالت پیشرفته",
  "generation": {
    "model": "suno-v6", "max_mode": false, "duration": 182.4,
    "title": "ساعت چهار بامداد#701f37", "title_base": "ساعت چهار بامداد", "title_suffix": "701f37",
    "created_at": 1790421721
  },
  "inputs": {
    "user_text": "…", "user_text_kind": "lyrics",
    "user_style": "الکترونیک گوچائو، بیس عمیق، سینت رترو",
    "style_tags": "الکترونیک گوچائو، بیس عمیق، سینت رترو",
    "style_source": "user", "lyrics": "…",
    "negative_tags": "", "is_instrumental": false
  },
  "extended": {
    "vocal_gender": "m", "style_weight": 0.5, "audio_weight": 0.85,
    "weirdness_constraint": 0.5, "variety": 2, "lyrics_mode": "manual",
    "custom_mode": true
  },
  "reference": { "voice_name": "sv_40_34", "source_song_id": "", "source_title": "" },
  "retention": {
    "recorded_since": "2026-09-28", "missing_reason": "",
    "not_applicable_fields": ["audio_weight"]
  }
}
فیلد نوع یادداشت
type / type_label string نوع خام تولید / برچسب نمایشی (تولید ساده، حالت پیشرفته، حالت افکت صوتی، تولید با صدای استنساخ‌شده…)
generation.model string مدل استفاده‌شده
generation.max_mode bool آیا Max Mode روشن بوده
generation.duration number مدت صدا بر حسب ثانیه
generation.title string عنوان عیناً همان‌طور که ذخیره شده (ممکن است پسوند داشته باشد)
generation.title_base string عنوان نمایشی بدون پسوند پایانی #xxxxxx
generation.title_suffix string خود پسوند (بدون #)؛ وقتی وجود ندارد خالی است
inputs.user_text string ورودی کاربر (توضیح یا متن، بسته به نوع)
inputs.user_text_kind string lyrics / description / cover_requirements
inputs.user_style string سبکی که خود کاربر نوشته (حالت پیشرفته، صدا، افکت‌های صوتی)
inputs.style_tags string سبکی که در نهایت اعمال شده
inputs.style_source string user = نوشته کاربر؛ suno_derived = استخراج‌شده توسط Suno از توضیح
inputs.lyrics string متن ترانه؛ در نبود متن خالی و برای آهنگ بی‌کلام [Instrumental]
inputs.negative_tags string سبک‌های حذف‌شده
inputs.is_instrumental bool آیا آهنگ بی‌کلام است
extended.* — پارامترهای توسعه‌یافته، پایین را ببینید؛ فیلدهای ذخیره‌نشده ظاهر نمی‌شوند
reference.voice_name string نام صدا (فقط انواع صوتی؛ persona id داخلی برگردانده نمی‌شود)
reference.source_song_id / source_title string آهنگ منبع برای کارهای کاور، ادامه و مشابه
retention.recorded_since string تاریخی که ذخیره پارامترهای توسعه‌یافته از آن آغاز شده (2026-09-28)
retention.missing_reason string علت نبود پارامترهای توسعه‌یافته؛ در داده‌های تاریخی not_recorded_before_20260928
retention.not_applicable_fields string[] پارامترهایی که آن نوع تولید هرگز به آن‌ها نیاز نداشته (آن‌ها را به‌عنوان «پارامترهای ناموجود» نشان ندهید)

فیلدهایی که ممکن است در extended ظاهر شوند: vocal_gender، style_weight، audio_weight، weirdness_constraint، variety، lyrics_mode، custom_mode و گروه افکت‌های صوتی sound_type / sound_bpm / sound_key / sound_loop. مقادیر خالی هرگز برگردانده نمی‌شوند.

سه قاعده نمایش (به‌جای حدس‌زدن از این‌ها پیروی کنید):

  1. خاستگاه سبک را تفکیک کنید: وقتی style_source=suno_derived است، آن را به‌شکل «سبک (استخراج‌شده توسط Suno از توضیح شما)» نشان دهید و هرگز به‌شکل «سبک شما» ننویسید؛
  2. پرامپت‌های داخلی هرگز ظاهر نمی‌شوند: انواع کاور صوتی فقط 【الزامات سبک】/【الزامات کاور】 را که کاربر نوشته برمی‌گردانند؛ ساختار ثابتی که ما برای مدل می‌سازیم در هیچ فیلدی ظاهر نمی‌شود (داده‌های تاریخی هم پاک‌سازی شده‌اند)؛
  3. پارامترهای ذخیره‌نشده را حدس نزنید: اگر در extended نیست، آن زمان ثبت نشده — علت را با retention توضیح دهید.

نکات حفظ پارامترها

parameter_retention برای جدا کردن «ارسال صریح مقدار خالی» از «ذخیره‌نشدن تاریخی آن فیلد» است:

آهنگ‌های تاریخی معمولی عموماً پرامپت، سبک، عنوان فعلی، مدل، نوع تولید و آهنگ منبع را ذخیره کرده‌اند، اما همه پارامترهای پیشرفته را جدا ذخیره نکرده‌اند. پلتفرم هرگز مقادیر ناموجود را از generation_type حدس نمی‌زند.

برخی کارهای موسیقی توسعه‌یافته، پرامپت اصلی، سبک، عنوان، مدل و همچنین custom_mode، negative_tags، vocal_gender، style_weight و weirdness_constraint را ذخیره کرده‌اند. حتی با وجود رکورد توسعه‌یافته، ممکن است instrumental، lyrics_mode و wait_audio قابل بازیابی نباشند.

عنوان آهنگ‌ها بعداً توسط کاربر قابل تغییر است. وقتی کار تاریخی معمولی عنوان اصلی جداگانه‌ای ذخیره نکرده، ممکن است parameters.title همان عنوان فعلی باشد؛ و وقتی رکورد کار توسعه‌یافته وجود دارد، عنوان تولید اصلی ذخیره‌شده در آن اولویت می‌گیرد.

یافت نشد یا بدون دسترسی

خطاهای کسب‌وکار از یک پوشش پاسخ یکسان استفاده می‌کنند. وقتی آهنگ وجود ندارد یا به حساب فعلی تعلق ندارد:

{
  "success": false,
  "message": "song not found"
}

این خطای کسب‌وکار اکنون با HTTP 200 برگردانده می‌شود، پس نتیجه را از فیلد success قضاوت کنید. کلید API ناموجود، نامعتبر، منقضی یا غیرفعال HTTP 401 برمی‌گرداند.

نکات امنیتی

نقاط پایانی تاریخچه و جزئیات هرگز این موارد را برنمی‌گردانند:

بعدیAPI متن ترانه با مهر زمانی

دریافت کلید API

پس از ثبت‌نام از کنسول یک کلید API بسازید. هر تولید ۰٫۶ یوان هزینه دارد و ۲ قطعه برمی‌گرداند، دانلودها نامحدود است و به شماره تلفن نیازی نیست.

دریافت کلید API بازگشت به مرور کلی