【सुझाया गया】 वॉइस प्रोफ़ाइल API

2026-09-18 को अद्यतन · Suno-API टीम

✅ नई इंटीग्रेशन के लिए हम यही रास्ता सुझाते हैं। बहुत से उपयोगकर्ताओं के असली आकलन के अनुसार, इस रास्ते से बने गाने मूल आवाज़ अच्छी तरह बनाए रखते हैं: तैयार ट्रैक की आवाज़ आपके अपलोड किए नमूने के व्यक्ति के ज़्यादा करीब होती है, इसलिए अभी यही रास्ता हम ग्राहकों को सुझाते हैं।

तुलना: पहले वाला वॉइस क्लोनिंग और निर्दिष्ट आवाज़ से जनरेशन API अब भी काम करता है, पर मेन्यू में उसे "सुझाया नहीं गया" लिखा है और नई इंटीग्रेशन के लिए वह सुझाया नहीं जाता।

ध्यान दें: यह दस्तावेज़ सिर्फ़ वे एंडपॉइंट बताता है जिन्हें आप कॉल करते हैं। सामग्री प्रोसेसिंग, टास्क शेड्यूलिंग और कंटेंट जाँच सर्वर अपने आप करता है; क्लाइंट को ये लागू नहीं करने।


0. पाँच मिनट में शुरुआत

चार क़दम काफ़ी हैं — एक वोकल सैंपल से दो तैयार गाने।

① आवाज़ बनाएँ   POST /api/music/voice-profile/create      → voice_id मिलेगा (status=ready)
② कवर करें      POST /api/music/voice-profile/cover       → तुरंत 2 song_id मिलेंगे
③ देखें         POST /api/music/query                     → status=completed तक पोल करें
④ डाउनलोड       GET  /api/music/download?song_id=…&kind=mp3

सबसे छोटा चलता उदाहरण (curl):

API_KEY="sk-aapki-chabi"
BASE="https://www.suno-api.io"

# ① आवाज़ बनाएँ (एक वोकल सैंपल अपलोड करें; 10 सेकंड या ज़्यादा, 10 MB से कम सुझाया गया)
curl -sS -X POST "$BASE/api/music/voice-profile/create" \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@./my-voice.mp3" \
  -F "title=मेरी आवाज़" \
  -F "source_kind=upload"
# → {"success":true,"message":"","data":{"voice_id":"vp_2026…","status":"ready", …}}

# ② इस आवाज़ से एक गाना कवर करें (song_clip_id = जिस गाने को कवर करना है उसका clip id)
curl -sS -X POST "$BASE/api/music/voice-profile/cover" \
  -H "Authorization: Bearer $API_KEY" \
  -H "X-Create-Ui-Client-Request-Id: cover-$(date +%s)" \
  -H "Content-Type: application/json" \
  -d '{
        "model": "suno-v6",
        "voice_id": "vp_2026…",
        "song_clip_id": "5b773e9a-…",
        "lyrics": "[Verse 1]\nगीत के बोल…",
        "style_requirements": "धीमा फ़ोक, अकॉस्टिक गिटार",
        "audio_weight": 0.85,
        "max_mode": false
      }'
# → {"code":200,"message":"success","data":{"resolved_scene":"cover","clips":[{…},{…}]}}

# ③ पोल करें (कई id एक साथ, कॉमा से अलग करके)
curl -sS -X POST "$BASE/api/music/query" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"suno-v6","song_ids":"id1,id2"}'

# ④ पूरा होने पर mp3 डाउनलोड करें (फ़ाइल सिर्फ़ status=completed पर मिलती है)
curl -sS -L "$BASE/api/music/download?song_id=id1&kind=mp3" \
  -H "Authorization: Bearer $API_KEY" -o song1.mp3

1. सामान्य नियम

1.1 डोमेन और वातावरण

वातावरण Base URL उद्देश्य
प्रोडक्शन https://www.suno-api.io असली ग्राहक ट्रैफ़िक

नीचे के सभी पाथ Base URL के सापेक्ष हैं; जैसे POST /api/music/voice-profile/create का पूरा पता https://www.suno-api.io/api/music/voice-profile/create है।

1.2 प्रमाणीकरण

सभी एंडपॉइंट एक ही रिक्वेस्ट हेडर इस्तेमाल करते हैं, जिसकी वैल्यू कंसोल में बनाई गई API Key होती है:

Authorization: Bearer sk-xxxxxxxx

1.3 रिक्वेस्ट बॉडी के प्रारूप

1.4 दो रिस्पॉन्स खोल (ग्राहक को सिर्फ़ ये दो जानने हैं)

"आवाज़ प्रबंधन" वाले एंडपॉइंट (create / create-from-clip / list / detail / delete) बिज़नेस खोल इस्तेमाल करते हैं:

{ "success": true, "message": "", "data": { } }
{ "success": false, "message": "voice_id is required" }

"आवाज़ से कवर" जनरेशन चैनल से जाता है और जनरेशन खोल इस्तेमाल करता है: सफलता code/message/data, विफलता error ऑब्जेक्ट:

{ "code": 200, "message": "success", "data": { } }
{ "error": { "message": "voice not found: vp_xxx", "type": "bad_response_status_code", "param": "", "code": "bad_response_status_code" } }

कैसे तय करें: पहले HTTP स्टेटस कोड, फिर success === false, आख़िर में code !== 200 या error की मौजूदगी देखें। बिज़नेस विफलता से यह तय नहीं होता कि HTTP 200 नहीं होगा (आवाज़ प्रबंधन एंडपॉइंट गड़बड़ी पर भी HTTP 200 देते हैं), इसलिए सिर्फ़ स्टेटस कोड देखकर फ़ैसला न करें।

1.5 इडेम्पोटेंसी

आवाज़ बनाना ("मौजूदा ऑडियो से बनाना" समेत) वाक़ई इडेम्पोटेंट है: उसी कुंजी के नीचे वही client_request_id दोबारा भेजने पर सिर्फ़ एक आवाज़ बनती है और दूसरी कोशिश सीधे पहला नतीजा लौटाती है (success=true, वही voice_id)। तरीक़ा यह है कि क्लाइंट ख़ुद एक id बनाए (जैसे UUID) और टाइमआउट के बाद दोबारा कोशिश में वही वैल्यू इस्तेमाल करे।

कवर भेजना रिक्वेस्ट-स्तर पर डिडुप्लिकेशन नहीं करता (यह भुगतान वाली जनरेशन है), इसलिए दो बातें ध्यान रखें:

  1. भेजने की पहचान हेडर X-Create-Ui-Client-Request-Id: <आपकी भेजने की id> में जाती है। यह सर्वर के टास्क रिकॉर्ड में लिखी जाती है ताकि बाद में जाँच आसान हो; पर यह दोहरे शुल्क को नहीं रोकती।
  2. टाइमआउट ≠ विफलता: हो सकता है रिक्वेस्ट स्वीकार हो चुकी हो और जनरेशन चल रही हो। दोबारा कोशिश से पहले GET /api/music/songs?p=1&page_size=20 (पेजिंग के पैरामीटर p / page_size, और संगत लेखन ps भी) से देखें कि generation_type=voice_profile_cover वाला नया गाना आ चुका है या नहीं, और वही रिक्वेस्ट दोबारा तभी भेजें जब न आया हो।

create और create-from-clip की बॉडी में भी client_request_id फ़ील्ड है (§3 और §4)।

1.6 बिलिंग का सार

काम एंडपॉइंट क़ीमत टिप्पणी
आवाज़ बनाना (सामान्य) POST /api/music/voice-profile/create मुफ़्त सैंपल अपलोड करने से Suno क्रेडिट नहीं लगता
आवाज़ बनाना (मौजूदा ऑडियो से) POST /api/music/voice-profile/create-from-clip मुफ़्त सर्वर सिर्फ़ सामग्री का संदर्भ दर्ज करता है, दोबारा अपलोड नहीं
प्रबलित क्लोन वही, enhanced=true "प्रबलित अपलोड क़ीमत" पर (डिफ़ॉल्ट 10 युआन प्रति कॉल) असिंक्रोनस; विफलता पर अपने आप वापस
आवाज़ से कवर POST /api/music/voice-profile/cover 1.2 युआन प्रति कॉल; max_mode=true पर 2.4 युआन एक कॉल में 2 गाने
क्वेरी / सूची / विवरण / हटाना — मुफ़्त
डाउनलोड (सीधा लिंक ख़ुद लें) रिस्पॉन्स का audio_url मुफ़्त जारी पता चलाता है
डाउनलोड (wav / बोल आदि में बदलना) POST /api/music/free2 0.2 युआन प्रति सफल गाना §8 देखें

क़ीमतें कभी भी सार्वजनिक एंडपॉइंट से पढ़ी जा सकती हैं, इसलिए स्थिर न लिखें (§9 देखें):

curl -sS https://www.suno-api.io/api/pricing/catalog | jq '.data.catalog.meta'
# {
#   "generation_price": "0.6",
#   "voice_generation_price": "1.2",      ← आवाज़ से कवर की आधार क़ीमत
#   "max_mode_factor": "2",
#   "enhanced_upload_price": "10",        ← प्रबलित क्लोन की क़ीमत
#   "voice_auto_verify_price": "5",
#   "voice_long_term_clone_price": "5"
# }

कवर पहले से शुल्क + विफलता पर वापसी पर चलता है:

1.7 स्टेटस शब्दकोश

आवाज़ का status:

मान अर्थ कवर के लिए उपयुक्त
ready तैयार ✅
processing सिर्फ़ प्रबलित क्लोन (enhanced=true) पर आता है; प्रोसेस हो रहा है ❌ (ready का इंतज़ार करें)
failed बनाना विफल; error_message देखें; प्रबलित क्लोन का शुल्क लौट चुका है ❌

गाने का status (क्वेरी एंडपॉइंट क्या लौटाते हैं):

मान अर्थ डाउनलोड हो सकता है
submitted / queued / processing बन रहा है (प्रीव्यू स्ट्रीम पहले से हो सकता है) ❌
completed पूरा ✅
failed विफल; शुल्क लौटा दिया गया ❌

2. एंडपॉइंट का सार

# मेथड पाथ काम बिलिंग
1 POST /api/music/voice-profile/create आवाज़ बनाना (अपलोड / URL / base64) मुफ़्त (enhanced=true को छोड़कर)
2 POST /api/music/voice-profile/create-from-clip अपने मौजूदा ऑडियो से आवाज़ बनाना मुफ़्त
3 GET /api/music/voice-profile/list आवाज़ों की सूची मुफ़्त
4 GET /api/music/voice-profile/{voice_id} आवाज़ का विवरण (प्रबलित क्लोन की प्रगति समेत) मुफ़्त
5 POST /api/music/voice-profile/delete आवाज़ हटाना मुफ़्त
6 POST /api/music/voice-profile/cover आवाज़ से कवर / नया गाना गवाना 1.2 युआन (MAX 2.4)
7 POST /api/music/query गानों का स्टेटस सामूहिक रूप से पूछना मुफ़्त
8 GET /api/music/songs/{song_id} एक गाने का विवरण मुफ़्त
9 GET /api/music/download तैयार फ़ाइल डाउनलोड करना मुफ़्त (mp3/प्ले लिंक)
10 POST /api/music/free2 wav / बोल आदि में बदलना 0.2 युआन प्रति सफल गाना
11 POST /api/music/free2/cached पहले से संग्रहित डाउनलोड पता लेना मुफ़्त
12 GET /api/music/songs मेरे काम, पेजिंग के साथ मुफ़्त

3. आवाज़ बनाएँ

POST /api/music/voice-profile/create

एक वोकल ऑडियो को "आवाज़" के रूप में दर्ज करें और voice_id पाएँ। प्लेटफ़ॉर्म के लिए आवाज़ यानी "एक ऑडियो + कैटलॉग में उसका clip", इसलिए बनने के बाद वह स्रोत ऑडियो हमेशा के लिए सुरक्षित रहता है (आगे के कवर के लिए)।

3.1 तीन इनपुट रूप (कोई एक चुनें)

रूप A: multipart फ़ाइल अपलोड (सुझाया गया)

Content-Type: multipart/form-data

file=<ऑडियो बाइनरी>          # ज़रूरी
title=<आवाज़ का नाम>          # वैकल्पिक; ख़ाली हो तो बिना एक्सटेंशन फ़ाइल नाम
file_name=<मूल फ़ाइल नाम>
source_file_name=<मूल फ़ाइल नाम>
source_kind=upload|record    # वैकल्पिक, स्रोत चिह्न (अपलोड / रिकॉर्ड); डिफ़ॉल्ट upload
enhanced=false|true          # वैकल्पिक, true = प्रबलित क्लोन (§3.5 देखें)
client_request_id=<इडेम्पोटेंसी कुंजी>   # वैकल्पिक
voice_id=<अपनी id>            # वैकल्पिक, शायद ही इस्तेमाल हो
curl -sS -X POST "https://www.suno-api.io/api/music/voice-profile/create" \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@./my-voice.mp3;type=audio/mpeg" \
  -F "file_name=my-voice.mp3" \
  -F "source_file_name=my-voice.mp3" \
  -F "title=मेरी आवाज़" \
  -F "source_kind=upload"

रूप B: JSON + सार्वजनिक ऑडियो URL

curl -sS -X POST "https://www.suno-api.io/api/music/voice-profile/create" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "file_url": "https://your-cdn.example.com/voice/my-voice.mp3",
        "file_name": "my-voice.mp3",
        "title": "मेरी आवाज़"
      }'

रूप C: JSON + base64

{
  "file_base64": "data:audio/mpeg;base64,//uQxAAA…",
  "file_name": "my-voice.mp3",
  "title": "मेरी आवाज़"
}

3.2 ऑडियो की शर्तें

मद शर्त टिप्पणी
आकार ≤ 10 MB सीमा से ज़्यादा पर गेटवे बॉडी काट देता है और "Suno ने अस्वीकार किया" जैसा दिखता है; पहले संपीड़ित या छोटा करें
अवधि कम से कम 6 सेकंड; 10–60 सेकंड सुझाया गया 6 सेकंड से कम पर प्लेटफ़ॉर्म अस्वीकार करता है: Uploaded audio is too short (currently 2.4 seconds). Minimum duration is 6 seconds.
प्रारूप mp3 / wav / m4a / aac / flac / ogg फ़ाइल एक्सटेंशन से तय
सामग्री साफ़ वोकल; तैयार कवर या संगीत के साथ मूल गाने से बचें कैटलॉग की मौजूदा रिकॉर्डिंग से बहुत मिलता-जुलता ऑडियो अस्वीकार होता है: This audio matches an existing recording in our catalog. (मापा गया)

3.3 प्रतिक्रिया

{
  "success": true,
  "message": "",
  "data": {
    "voice_id": "vp_20260926080618509168500DXXrxe",
    "clip_id": "91cc5935-389f-4193-b56b-cc796c15562d",
    "song_id": "91cc5935-389f-4193-b56b-cc796c15562d",
    "account_id": "acc_1790085275308",
    "title": "मेरी आवाज़",
    "source_file_name": "my-voice.mp3",
    "audio_url": "https://suno-api-p-1437223057.cos.ap-guangzhou.myqcloud.com/create-ui/voice-source/2026/09/26/xxx.mp3",
    "image_url": "https://cdn2.suno.ai/image_91cc5935-389f-4193-b56b-cc796c15562d.jpeg",
    "duration_s": 29.18,
    "enhanced": false,
    "source_kind": "upload",
    "status": "ready",
    "client_request_id": "",
    "created_at": 1790409978,
    "updated_at": 1790409998
  }
}

फ़ील्ड की जानकारी (create / list / detail एक ही सेट साझा करते हैं):

फ़ील्ड प्रकार टिप्पणी
voice_id string आवाज़ की ID; आगे के कवर इसका इस्तेमाल करते हैं
clip_id / song_id string Suno की तरफ़ उस वोकल ऑडियो का clip id (दोनों एक ही); जाँच के लिए
account_id string अकाउंट की पहचान (जाँच के लिए; क्लाइंट को इससे मतलब नहीं)
title string आवाज़ का नाम
source_file_name string मूल फ़ाइल नाम
audio_url string स्रोत ऑडियो का दीर्घकालिक सीधा लिंक, प्रीव्यू के लिए ठीक; हमेशा सुरक्षित
image_url string आवाज़ का कवर (जो Suno वोकल ऑडियो के लिए बनाता है); कवर न हो तो यह कुंजी बिलकुल नहीं आती
duration_s number सैंपल की लंबाई सेकंड में
enhanced bool प्रबलित क्लोन से बना या नहीं
source_kind string upload / record / clip (मौजूदा ऑडियो से)
status string ready / processing / failed
error_message string विफलता का कारण; सिर्फ़ failed पर
task_id number प्रबलित क्लोन का आधारभूत टास्क नंबर; सिर्फ़ enhanced=true पर
pre_consumed_quota number पहले से लिया शुल्क (सिर्फ़ प्रबलित क्लोन पर)
created_at / updated_at number Unix सेकंड

created_at / updated_at सेकंड स्तर के टाइमस्टैम्प हैं (10 अंक), मिलीसेकंड नहीं।

3.4 आम ग़लतियाँ

HTTP message कारण और उपाय
200 one of file_path, file_base64, or file_url is required ऑडियो सामग्री संलग्न नहीं की गई
200 Uploaded audio is too short (currently 2.4 seconds). Minimum duration is 6 seconds. सैंपल बहुत छोटा; ≥6 सेकंड (≥10 सेकंड सुझाया गया) लें
200 This audio matches an existing recording in our catalog. सैंपल कैटलॉग की मौजूदा रिकॉर्डिंग से बहुत मिलता है; दूसरा साफ़ सूखा वोकल लें
200 upload succeeded without clip or account identity प्लेटफ़ॉर्म की प्रतिक्रिया असामान्य; दोबारा कोशिश करें
200 audio file exceeds 30 MB limit सर्वर सीमा से ज़्यादा (ग्राहक के लिए 10 MB रखें)
401 invalid token API Key ग़लत

3.5 प्रबलित क्लोन (enhanced=true)

उन मामलों के लिए जहाँ "सैंपल में ख़ुद कॉपीराइट वाले बोल हैं / प्रबलित अपलोड चाहिए"। क़ीमत प्रबलित अपलोड क़ीमत है (डिफ़ॉल्ट 10 युआन प्रति कॉल, विफलता पर अपने आप वापसी):

curl -sS -X POST "https://www.suno-api.io/api/music/voice-profile/create" \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@./my-voice.mp3" -F "title=मेरी आवाज़" -F "enhanced=true"

4. मौजूदा ऑडियो से आवाज़ बनाएँ

अगर दोबारा अपलोड नहीं करना: जो ऑडियो पहले ही अपलोड कर चुके हैं या बना चुके हैं उसे सीधे आवाज़ में कॉपी करें। मुफ़्त और इडेम्पोटेंट।

POST /api/music/voice-profile/create-from-clip
Content-Type: application/json

{
  "source_song_id": "97ee62fe-56cd-473f-a2f5-c66ac0766a2e",
  "title": "Xu Qing Qiang",
  "client_request_id": "vp-clip-1789…"
}

प्रतिक्रिया §3.3 के सारे फ़ील्ड और दो रीड-ओनली फ़ील्ड:

फ़ील्ड टिप्पणी
reused true = यह ऑडियो पहले से आपकी आवाज़ था और दोबारा इस्तेमाल हो रहा है
source_type ऑडियो का स्रोत: generate / custom_generate / voice_generate / upload_source / enhanced_upload
{
  "success": true,
  "data": {
    "voice_id": "vp_20260926081712557959800Z5gvlt",
    "clip_id": "97ee62fe-56cd-473f-a2f5-c66ac0766a2e",
    "title": "Xu Qing Qiang",
    "status": "ready",
    "enhanced": true,
    "reused": true,
    "source_type": "enhanced_upload"
  }
}

ग़लतियाँ (message जैसा लौटता है; सीधे दिखाना या स्थानीयकृत करना सुझाया गया):

message अर्थ
source audio not found clip मौजूद नहीं या आपका नहीं
source audio is invalid वह ऑडियो अभी बन रहा है / बीच का उत्पाद है, अभी काम का नहीं
source_song_id is required source_song_id नहीं भेजा गया

5. आवाज़ों की सूची / विवरण / हटाना

5.1 सूची

GET /api/music/voice-profile/list
GET /api/music/voice-profile/list?include_deleted=true
{
  "success": true,
  "message": "",
  "data": {
    "items": [ { "voice_id": "vp_…", "title": "मेरी आवाज़", "status": "ready", "audio_url": "…", "image_url": "…" } ],
    "total": 1
  }
}

फ़ील्ड बिलकुल §3.3 जैसे हैं। डिफ़ॉल्ट में हटाई गई आवाज़ें नहीं लौटतीं।

5.2 विवरण

GET /api/music/voice-profile/{voice_id}

एक ही आवाज़ ऑब्जेक्ट लौटता है (data ख़ुद ऑब्जेक्ट है, ऐरे नहीं)। प्रबलित क्लोन चलते समय ये अतिरिक्त आते हैं:

फ़ील्ड टिप्पणी
progress_percent 0 से 100 तक पूर्णांक
progress_stage चरण पहचान, जैसे media_preparing
progress_message उपयोगकर्ता को दिखाने वाला प्रगति संदेश

5.3 हटाना

POST /api/music/voice-profile/delete
Content-Type: application/json

{ "voice_id": "vp_2026…" }
{ "success": true, "message": "", "data": { "voice_id": "vp_2026…", "status": "deleted" } }

6. आवाज़ से कवर (मुख्य एंडपॉइंट)

POST /api/music/voice-profile/cover
Content-Type: application/json

एक बार भेजने पर 2 गाने बनते हैं (सामान्य जनरेशन जैसे)।

6.1 दो परिदृश्य

परिदृश्य शर्त टिप्पणी
A. तय गाने का कवर song_clip_id भेजा गया वह गाना आपकी आवाज़ से गाया जाता है (धुन / लय / भाग मूल जैसे; आवाज़ आपकी)
B. आवाज़ से नया गाना song_clip_id नहीं भेजा गया सिर्फ़ आवाज़ + बोल (वैकल्पिक) + स्टाइल की शर्तें; मॉडल उस स्टाइल में नई धुन बनाकर गाता है

प्रतिक्रिया में resolved_scene cover या sing लौटाता है, जिससे पता चलता है कौन सा रास्ता चला।

6.2 रिक्वेस्ट फ़ील्ड

फ़ील्ड प्रकार ज़रूरी डिफ़ॉल्ट टिप्पणी
model string हाँ — ग्राहक-मुखी मॉडल नाम, §6.5 देखें। न भेजें तो model is required (HTTP 500)
voice_id string दो में से एक — आवाज़ की ID (vp_…); status=ready होना चाहिए
voice_clip_id string दो में से एक — आवाज़ का clip id भी चलेगा; दोनों भेजें तो voice_id प्राथमिक
song_clip_id string नहीं ख़ाली जिस गाने को कवर करना है उसका clip id (song_id)। न भेजें = परिदृश्य B
lyrics string नहीं ख़ाली पूरे बोल, अक्षर-दर-अक्षर भेजे जाते हैं, कोई बदलाव या कटौती नहीं; ≤ 3000 अक्षर
cover_requirements string नहीं ख़ाली सामान्य भाषा में कवर निर्देश, जैसे "उच्चारण और साफ़ करें"। ये तय प्रॉम्प्ट में जुड़ते हैं
style_requirements string नहीं ख़ाली स्टाइल की शर्तें, जैसे "धीमा फ़ोक, अकॉस्टिक गिटार"
title string नहीं ख़ाली इन दो गानों का वर्कस्पेस शीर्षक (आगे की क्वेरी के song_title पर असर डालता है)
negative_tags string नहीं ख़ाली छोड़े जाने वाले स्टाइल, जैसे इलेक्ट्रॉनिक, रैप; ≤ 1000 अक्षर
vocal_gender string नहीं ख़ाली m / f (male / female भी); ख़ाली = कोई बंधन नहीं
duration number नहीं ख़ाली चाही गई लंबाई सेकंड में, 1–480 का पूर्णांक; ख़ाली = प्लेटफ़ॉर्म तय करेगा। प्लेटफ़ॉर्म की असली न्यूनतम लगभग 30 सेकंड है: छोटी वैल्यू भी माप में लगभग 30 सेकंड का ही गाना देती है
audio_weight number नहीं 0.85 Audio Influence, 0–1 दशमलव। ज़्यादा = सैंपल के ज़्यादा करीब
style_weight number नहीं ख़ाली स्टाइल का असर, 0–1 दशमलव
weirdness_constraint number नहीं ख़ाली रचनात्मकता, 0–1 दशमलव (UI प्रतिशत में हो तो 100 से भाग दें)
variety number नहीं ख़ाली विविधता, 0–4 का पूर्णांक (प्रतिशत नहीं), सिर्फ़ v6 मॉडल पर
max_mode boolean नहीं false Max Mode, क़ीमत ×2
client_request_id string नहीं ख़ाली भेजने की पहचान, सर्वर टास्क रिकॉर्ड में जाँच के लिए लिखी जाती है (डिडुप्लिकेशन नहीं करती)

हेडर X-Create-Ui-Client-Request-Id: <वही भेजने की id> भी भेजने की सलाह है: सिर्फ़ वही सर्वर टास्क रिकॉर्ड में लिखी जाती है और बाद की जाँच की मुख्य कुंजी बनती है (§1.5 देखें)।

इकाइयों का ध्यान: audio_weight / style_weight / weirdness_constraint 0–1 दशमलव, variety 0–4 पूर्णांक, duration सेकंड में। मिला देंगे तो रिजेक्ट या अजीब नतीजा मिलेगा।

परिदृश्य B में बोल वैकल्पिक हैं (मॉडल ख़ुद सँभालता है), पर जब तय सामग्री गवानी हो तो lyrics ज़रूर भेजें।

6.3 प्रतिक्रिया

{
  "code": 200,
  "message": "success",
  "data": {
    "voice_id": "vp_20260926081712557959800Z5gvlt",
    "voice_clip_id": "97ee62fe-56cd-473f-a2f5-c66ac0766a2e",
    "song_clip_id": "5b773e9a-a035-4134-a4a4-29c9961d3ccb",
    "resolved_scene": "cover",
    "model": "suno-v6",
    "audio_weight": 0.85,
    "clips": [
      {
        "song_id": "0f2a…",
        "status": "processing",
        "song_title": "",
        "model_version": "suno-v6",
        "audio_url": "",
        "play_url": "https://media.suno-api.io/play/0f2a…?expires=…&signature=…",
        "lyrics": "",
        "description": "[कार्य] यह एक कवर है। … (सर्वर का तय ढाँचा + आपकी भरी कवर / स्टाइल शर्तें)"
      },
      {
        "song_id": "7c91…",
        "status": "processing",
        "model_version": "suno-v6",
        "audio_url": ""
      }
    ],
    "source_updates": []
  }
}

मुख्य बातें:

  1. तैयार ट्रैक की पहचान clips[].song_id से करें (यह एंडपॉइंट id फ़ील्ड नहीं लौटाता)।
  2. तुरंत 2 song_id मिलते हैं, जबकि status अभी processing है (सिर्फ़ स्वीकार होने का मतलब) और audio_url ख़ाली; डाउनलोड से पहले completed तक पोल करना होगा। play_url प्लेटफ़ॉर्म की प्रीव्यू स्ट्रीम है, भेजते ही दिख सकती है और एक्सपायर हो जाती है।
  3. description वह प्रॉम्प्ट है जो सर्वर आख़िर में भेजता है (तय ढाँचा + आपके cover_requirements / style_requirements); नतीजा जाँचते समय बहुत काम आता है।
  4. source_updates सर्वर की सामग्री प्रोसेसिंग का नतीजा है, क्लाइंट इसे छोड़ सकता है।
  5. आपका भेजा title सर्वर टास्क रिकॉर्ड में जाता है और आगे की क्वेरी में song_title बनकर दिखता है; भेजते समय clips[].song_title का ख़ाली होना सामान्य है।

6.4 ग़लतियाँ

{ "error": { "message": "यह आवाज़ मौजूद नहीं है या हटा दी गई है (voice_id=vp_xxx)…", "type": "new_api_error", "param": "", "code": "invalid_request" } }
HTTP message कारण
500 model is required बॉडी में model नहीं (चैनल चुनने का ज़रूरी फ़ील्ड)
400 voice_id is required and must be a ready voice voice_id नहीं भेजा, या प्लेसहोल्डर / तैयार न हुई आवाज़ भेजी
400 यह आवाज़ मौजूद नहीं है या हटा दी गई है (voice_id=vp_xxx)… आवाज़ हटाई गई, मौजूद नहीं, या इस अकाउंट की नहीं। दूसरी उपलब्ध आवाज़ लें या नई बनाएँ
400 यह आवाज़ हटा दी गई है (voice_id=vp_xxx)… voice_clip_id से सीधे सामग्री भेजने पर उस सामग्री की आवाज़ हट चुकी है; उपाय ऊपर जैसा
400 voice is not ready yet (status=processing) आवाज़ अभी बन रही है; ready का इंतज़ार करके दोबारा कोशिश करें
400 song_clip_id must be a real completed clip song_clip_id प्लेसहोल्डर / अधूरा है
400 song_clip_id must differ from the voice clip कवर का निशाना ख़ुद सैंपल नहीं हो सकता
400 audio_weight must be a number between 0 and 1 स्लाइडर की इकाई ग़लत (प्रतिशत भेजा गया)
400 duration must be an integer between 1 and 480 seconds लंबाई 1–480 का पूर्णांक नहीं
400 vocal_gender must be one of m, f, male, female जेंडर वैल्यू अमान्य
400 variety must be an integer between 0 and 4 / variety is only supported on v6 models विविधता वैल्यू अमान्य या मॉडल समर्थित नहीं

कम बैलेंस भेजते ही बिलिंग गड़बड़ी लौटाता है और आधा-अधूरा टास्क नहीं छोड़ता।

6.5 उपलब्ध मॉडल (ग्राहक-मुखी नाम)

मॉडल नाम टिप्पणी
suno-v6 डिफ़ॉल्ट, सुझाया गया
suno-v6-wild ज़्यादा खुला
suno-v6-mini हल्का

ग्राहक-मुखी मॉडल नाम (ऊपर वाले) इस्तेमाल करें। chirp-* प्लेटफ़ॉर्म के आंतरिक नाम हैं, सीधे इस्तेमाल न करें।


7. प्रगति देखना

7.1 सामूहिक क्वेरी (सुझाया गया)

POST /api/music/query
Content-Type: application/json

{ "model": "suno-v6", "song_ids": "id1,id2" }
[
  {
    "song_id": "0f2a…",
    "song_title": "दो बाघ",
    "status": "completed",
    "audio_url": "https://suno-api-hk-1437223057.cos.ap-hongkong.myqcloud.com/assets/0f2a…-mp3.mp3",
    "cover_url": "https://cdn2.suno.ai/image_0f2a….jpeg",
    "duration": 115.15,
    "model_version": "suno-v6",
    "generation_type": "voice_profile_cover",
    "play_url": "https://media.suno-api.io/play/…?expires=…&signature=…",
    "lyrics": "[Verse 1]…",
    "prompt": "[Verse 1]…",
    "description": "[कार्य] यह एक कवर है। … (सर्वर का अंतिम प्रॉम्प्ट)",
    "style_tags": "…",
    "created_at": "2026-09-25T18:19:09.918Z",
    "video_url": ""
  }
]
फ़ील्ड टिप्पणी
status §1.7 देखें; पूरा सिर्फ़ completed माना जाता है
audio_url mp3 सीधा लिंक; completed के बाद ही भरता है
cover_url कवर का पता
duration असली लंबाई सेकंड में
generation_type आवाज़ से कवर वाले गाने हमेशा voice_profile_cover
play_url हस्ताक्षरित प्रीव्यू पता (एक्सपायर होता है)
song_title टास्क का शीर्षक (आपका भेजा title; न भेजें तो सर्वर डिफ़ॉल्ट रखता है)
lyrics / prompt तैयार बोल / मूल बोल
description सर्वर का अंतिम प्रॉम्प्ट (तय ढाँचा समेत)
style_tags अंतिम स्टाइल विवरण
created_at ISO 8601 स्ट्रिंग (ध्यान: विवरण एंडपॉइंट के Unix सेकंड से अलग)

पोलिंग की सलाह: हर 5–10 सेकंड, कुल टाइमआउट 10–15 मिनट (सबसे धीमा ठंडा अकाउंट माप में लगभग 4.5 मिनट; बहुत कम ज़्यादा)। पूरा होना audio_url ख़ाली होने से नहीं, status से तय करें।

संगतता नोट: यह एंडपॉइंट गानों की पहचान song_id से करता है; शुरुआती कुछ प्रतिक्रियाओं में id फ़ील्ड आया था, इसलिए row.song_id || row.id सुरक्षित तरीक़ा है।

7.2 एक गाने का विवरण

GET /api/music/songs/{song_id}
{
  "success": true,
  "data": {
    "song_id": "0f2a…",
    "title": "दो बाघ",
    "status": "completed",
    "generation_type": "voice_profile_cover",
    "model": "suno-v6",
    "duration": 115.15,
    "audio_url": "https://…/assets/0f2a…-mp3.mp3",
    "image_url": "https://cdn2.suno.ai/image_0f2a….jpeg",
    "wav_url": "https://www.suno-api.io/api/music/download?song_id=0f2a…&kind=wav",
    "video_url": "https://www.suno-api.io/api/music/download?song_id=0f2a…&kind=video",
    "created_at": 1790411012,
    "completed_at": 1790411500,
    "parameters": {
      "prompt": "[Verse 1]…",
      "style_tags": "…",
      "title": "दो बाघ",
      "model": "suno-v6",
      "generation_type": "voice_profile_cover",
      "source_song_id": "5b773e9a-…"
    },
    "parameter_retention": {
      "core_parameters_available": true,
      "extended_parameters_available": false,
      "sources": ["suno_tasks"],
      "unavailable_fields": ["negative_tags", "vocal_gender", "style_weight", "weirdness_constraint"]
    }
  }
}

7.3 मेरे काम

GET /api/music/songs?p=1&page_size=20
GET /api/music/songs?status=completed&q=कीवर्ड

पेजिंग: p (पेज नंबर, 1 से) / page_size (प्रति पेज संख्या; संगत लेखन ps)। वैकल्पिक status और q (शीर्षक का कीवर्ड)। डिफ़ॉल्ट में बनाने के समय के उलटे क्रम में।

{
  "success": true,
  "data": {
    "page": 1,
    "page_size": 20,
    "total": 42,
    "items": [
      {
        "song_id": "0f2a…",
        "title": "दो बाघ",
        "status": "completed",
        "generation_type": "voice_profile_cover",
        "model": "suno-v6",
        "duration": 115.15,
        "audio_url": "https://…/assets/0f2a…-mp3.mp3",
        "image_url": "https://cdn2.suno.ai/image_0f2a….jpeg",
        "created_at": 1790411012,
        "completed_at": 1790411500
      }
    ]
  }
}

generation_type=voice_profile_cover से "आवाज़ से कवर बने गाने" और बाक़ी जनरेशन नतीजों को अलग पहचान सकते हैं।


8. तैयार गाने डाउनलोड करना

8.1 सीधे mp3 लेना (सुझाया गया, मुफ़्त)

तीनों तरीक़े चलते हैं; कोई एक चुनें:

  1. क्वेरी नतीजे का audio_url इस्तेमाल करें (ऑब्जेक्ट स्टोरेज का सीधा लिंक, सबसे आसान)।
  2. GET /api/music/download?song_id=<id>&kind=mp3 → सीधे ऑडियो बाइट स्ट्रीम लौटाता है (Content-Disposition में फ़ाइल नाम मौजूद)।
  3. POST /api/music/download-url (हस्ताक्षरित अस्थायी पता लेने के लिए)।
curl -sS -L "https://www.suno-api.io/api/music/download?song_id=0f2a…&kind=mp3" \
  -H "Authorization: Bearer $API_KEY" -o song.mp3

kind मान: mp3 (song के बराबर) / playback (स्ट्रीमिंग प्लेबैक) / wav / video / lyrics / timestamped_lyrics। timestamped_lyrics (.lrc) अभी सिर्फ़ कुछ गानों पर उपलब्ध है; विफल हो तो टाइमस्टैम्प वाला गीत API से ख़ुद बनाएँ। प्रतिक्रिया सीधे फ़ाइल की बाइट स्ट्रीम है, Content-Type और Content-Disposition (फ़ाइल नाम) पहले से सेट हैं; GET /api/music/songs/{song_id} जो wav_url / video_url देता है वही द्वार kind=wav|video के साथ है।

8.2 wav में बदलना / बोल / मेटाडेटा (शुल्क सहित)

POST /api/music/free2
Content-Type: application/json

{ "song_ids": ["0f2a…"], "files": ["mp3", "wav", "lyrics"] }
{
  "success": true,
  "data": {
    "songs": [
      { "song_id": "0f2a…", "files": [ { "type": "mp3", "url": "https://…" }, { "type": "wav", "url": "https://…" } ] }
    ],
    "requested_songs": 1,
    "succeeded_songs": 1,
    "price": 0.2
  }
}

9. क़ीमत पूछना

GET /api/pricing/catalog

प्रमाणीकरण की ज़रूरत न रखने वाला सार्वजनिक एंडपॉइंट। ग्राहक को दिखाने वाली सारी इकाई क़ीमतें data.catalog.meta (स्ट्रिंग) में हैं:

कुंजी अर्थ मौजूदा मान
generation_price सामान्य जनरेशन 0.6
voice_generation_price आवाज़ से कवर की आधार क़ीमत 1.2
max_mode_factor Max Mode गुणक 2
enhanced_upload_price प्रबलित क्लोन / प्रबलित अपलोड 10
voice_auto_verify_price आवाज़ का स्वतः सत्यापन 5
voice_long_term_clone_price दीर्घकालिक आवाज़ क्लोनिंग 5

क़ीमतें बैक-ऑफ़िस में बदलती हैं, इसलिए लाइव पढ़ें, क्लाइंट में स्थिर न लिखें। कवर का असली शुल्क = voice_generation_price × (max_mode सही हो तो एक बार और max_mode_factor)।


10. सीमाएँ और चेतावनियाँ

  1. अपलोड का आकार: ≤ 10 MB (सर्वर ज़्यादा लेता है, पर प्रवेश गेटवे 10 MiB पर बड़ी बॉडी काट देता है और "Suno ने अस्वीकार किया" जैसा दिखता है; अपनी तरफ़ पहले रोकें)।
  2. सैंपल की लंबाई: कम से कम 6 सेकंड, 10–60 सेकंड सुझाया गया; बहुत छोटा हो तो प्लेटफ़ॉर्म अस्वीकार करता है।
  3. सैंपल की सामग्री: साफ़ वोकल; जो मौजूदा रिकॉर्डिंग से बहुत मिलता हो उससे बचें (कैटलॉग तुलना उसे अस्वीकार करती है)।
  4. पाठ की सीमाएँ: lyrics ≤ 3000 अक्षर; style_requirements / negative_tags / title क्रमशः 1000 / 1000 / 100 अक्षरों में रखना बेहतर (स्टाइल और कवर की शर्तें प्रॉम्प्ट में जुड़ती हैं, कुल 3000 अक्षरों में रखें)।
  5. बोल बदले नहीं जाते: जो भेजेंगे वही गाया जाएगा (अक्षर-दर-अक्षर), स्थानीय कटौती नहीं होती।
  6. हर गाना 2 ट्रैक देता है; एक नतीजा मानकर न चलें।
  7. स्रोत ऑडियो हमेशा सुरक्षित: आवाज़ हटाने से उसका स्रोत ऑडियो साफ़ नहीं होता; इससे आगे के कवर मुमकिन रहते हैं और अनुपालन ट्रेस करने योग्य रहता है।
  8. आवाज़ ready होनी चाहिए: processing आवाज़ कवर में नहीं चलती।
  9. रिक्वेस्ट टाइमआउट: ठंडे अकाउंट पर पहली बार भेजना माप में लगभग 4.5 मिनट तक लगा, इसलिए क्लाइंट टाइमआउट ≥ 6 मिनट रखें। कवर रिक्वेस्ट-स्तर पर डिडुप्लिकेशन नहीं करता, इसलिए टाइमआउट के बाद पहले देखें कि नया गाना बन चुका है या नहीं (§1.5), फिर दोबारा भेजने का फ़ैसला करें।
  10. आवाज़ का स्वामित्व: आवाज़ें बनाने वाले की होती हैं; कवर सिर्फ़ तैयार और न हटाई गई आवाज़ें स्वीकार करता है। मौजूद न हो, हटाई गई हो या दूसरे अकाउंट की हो तो 400 लौटता है: यह आवाज़ मौजूद नहीं है या हटा दी गई है (voice_id=…)।

11. अक्सर पूछे जाने वाले सवाल (FAQ)

प्र1. आवाज़ बनाने में ख़र्च लगता है? सामान्य बनाना और "मौजूदा ऑडियो से बनाना" मुफ़्त हैं; शुल्क सिर्फ़ कवर (1.2 युआन / MAX 2.4 युआन) और प्रबलित क्लोन (डिफ़ॉल्ट 10 युआन) पर लगता है।

प्र2. संगीत के साथ तैयार गाना सैंपल के तौर पर चलेगा? नहीं सुझाया गया। जिसमें संगीत हो या जो कैटलॉग की मौजूदा रिकॉर्डिंग से बहुत मिलता हो, प्लेटफ़ॉर्म अस्वीकार करता है (This audio matches an existing recording in our catalog.)। शुद्ध सूखा वोकल लें।

प्र3. कवर भेजने के बाद audio_url ख़ाली क्यों? भेजना सिर्फ़ स्वीकार होने का मतलब है और status अभी processing है। चलाने/डाउनलोड करने लायक पता तभी मिलता है जब /api/music/query को status=completed तक पोल किया जाए।

प्र4. परिदृश्य B (song_clip_id नहीं) में बोल भेजें? वैकल्पिक। तय सामग्री गवानी हो तो lyrics भेजें; न भेजें तो मॉडल ख़ुद सँभालता है, पर नियंत्रण कम रहता है।

प्र5. ग्राहक का अपलोड किया ऑडियो सीधे आवाज़ बन सकता है? हाँ: create के file_url रूप से, या पहले उसे गाने के रूप में अपलोड करके फिर create-from-clip कॉल करके।

प्र6. विफल होने पर पैसे वापस मिलते हैं? सीधे अस्वीकार की गई रिक्वेस्ट (ग़लत पैरामीटर / प्लेटफ़ॉर्म त्रुटि) पर माप के अनुसार शुल्क नहीं लगता; स्वीकार की गई पर आख़िर में विफल हुई टास्क पहले लिया शुल्क लौटा देती है। अंतिम विफलता पर टास्क status=failed और error_message लौटाता है।

प्र7. आवाज़ हटाने के बाद उससे बने गाने सुन सकते हैं? हाँ। हटाना सिर्फ़ इस पर असर डालता है कि वह आवाज़ नए कवर में चलेगी या नहीं।

प्र8. एक बार में कितना लंबा गाना कवर हो सकता है? duration 1–480 सेकंड लेता है; न भेजें तो प्लेटफ़ॉर्म मूल गाने / सामग्री से तय करता है। ध्यान: प्लेटफ़ॉर्म के तैयार ट्रैक कम से कम लगभग 30 सेकंड के होते हैं; 30 सेकंड से छोटी वैल्यू भी माप में 29.96 / 29.76 सेकंड ही देती रही।


परिशिष्ट A: पूरा उदाहरण (Node.js, पोलिंग और डाउनलोड समेत)

const BASE = "https://www.suno-api.io";
const KEY = process.env.SUNO_API_KEY;
const H = { Authorization: `Bearer ${KEY}` };

// ① आवाज़ बनाएँ (multipart)
async function createVoice(filePath, title) {
  const fd = new FormData();
  fd.set("file", new Blob([await (await import("node:fs/promises")).readFile(filePath)], { type: "audio/mpeg" }), "my-voice.mp3");
  fd.set("file_name", "my-voice.mp3");
  fd.set("source_file_name", "my-voice.mp3");
  fd.set("title", title);
  fd.set("client_request_id", `vp-create-${Date.now()}`);
  const res = await fetch(`${BASE}/api/music/voice-profile/create`, { method: "POST", headers: H, body: fd });
  const body = await res.json();
  if (!body.success) throw new Error(body.message);
  return body.data; // { voice_id, status, audio_url, ... }
}

// ② कवर
async function cover(voiceId, songClipId, lyrics) {
  const submissionId = `vp-cover-${Date.now()}`;
  const res = await fetch(`${BASE}/api/music/voice-profile/cover`, {
    method: "POST",
    headers: { ...H, "Content-Type": "application/json", "X-Create-Ui-Client-Request-Id": submissionId },
    body: JSON.stringify({
      model: "suno-v6",
      voice_id: voiceId,
      song_clip_id: songClipId || "",
      lyrics: lyrics || "",
      style_requirements: "धीमा फ़ोक, अकॉस्टिक गिटार",
      audio_weight: 0.85,
      max_mode: false,
      client_request_id: submissionId,
    }),
  });
  const body = await res.json();
  if (body.error) throw new Error(body.error.message);
  return body.data; // { resolved_scene, clips: [{ song_id, status }] }
}

// ③ पूरा होने तक पोल करें (हर 5 सेकंड, ज़्यादा से ज़्यादा 15 मिनट)
async function waitUntilCompleted(songIds) {
  const deadline = Date.now() + 15 * 60 * 1000;
  while (Date.now() < deadline) {
    const res = await fetch(`${BASE}/api/music/query`, {
      method: "POST",
      headers: { ...H, "Content-Type": "application/json" },
      body: JSON.stringify({ model: "suno-v6", song_ids: songIds.join(",") }),
    });
    const songs = await res.json(); // खुला ऐरे
    if (songs.every((s) => s.status === "completed" || s.status === "failed")) return songs;
    await new Promise((r) => setTimeout(r, 5000));
  }
  throw new Error("timeout waiting for cover");
}

// ④ डाउनलोड
async function download(songId, outPath) {
  const res = await fetch(`${BASE}/api/music/download?song_id=${encodeURIComponent(songId)}&kind=mp3`, { headers: H });
  if (!res.ok) throw new Error(`download failed: ${res.status}`);
  (await import("node:fs/promises")).writeFile(outPath, Buffer.from(await res.arrayBuffer()));
}

const voice = await createVoice("./my-voice.mp3", "मेरी आवाज़");
const result = await cover(voice.voice_id, "5b773e9a-a035-4134-a4a4-29c9961d3ccb", "[Verse 1]\nबोल…");
const ids = result.clips.map((c) => c.song_id);
const songs = await waitUntilCompleted(ids);
for (const [i, s] of songs.entries()) {
  if (s.status === "completed") await download(s.song_id, `./out-${i}.mp3`);
}

परिशिष्ट B: बदलाव का रिकॉर्ड

तारीख बदलाव
2026-10-15 हटाने का अर्थ साफ़-साफ़ लिखा (§5.3); "हटाई गई / अनधिकृत" voice_id से कवर अब पहले शुल्क से पहले 400 लौटाता है, ग़लती तालिका और FAQ भी साथ में अद्यतन (उसी दिन जारी आवाज़-हटाने गेट के साथ)
2026-10-13 शुरुआत में "यह रास्ता क्यों सुझाते हैं" जोड़ा: बहुत से उपयोगकर्ताओं के असली आकलन के अनुसार इस रास्ते के गाने मूल आवाज़ बेहतर बनाए रखते हैं
2026-09-26 पहला संस्करण: आवाज़ बनाना (तीन इनपुट रूप) / मौजूदा ऑडियो से बनाना / सूची, विवरण, हटाना / आवाज़ से कवर (परिदृश्य A और B) / प्रगति क्वेरी / डाउनलोड / क़ीमत पढ़ना, मापे गए प्रमाणों के साथ
अगलास्टाइल बूस्ट API

API कुंजी प्राप्त करें

रजिस्टर करने के बाद कंसोल में API कुंजी बनाएँ। प्रत्येक जनरेशन का खर्च 0.6 युआन है और 2 ट्रैक मिलते हैं, डाउनलोड असीमित हैं और फ़ोन नंबर की ज़रूरत नहीं है।

API कुंजी लें अवलोकन पर लौटें