एक ही चरण में अपलोड और कवर API
एंडपॉइंट विवरण
एक ही चरण में अपलोड और कवर एक ऑडियो फ़ाइल या ऑडियो URL भेजता है और उस स्रोत ऑडियो से कवर का नया संस्करण बनाता है।
एंडपॉइंट: POST /api/music/upload-cover
बिलिंग: सशुल्क, अभी डिफ़ॉल्ट 0.6 युआन प्रति कॉल। यह एंडपॉइंट "अपलोड करके कवर" है, यह इमेज कवर अपलोड करने के बारे में नहीं है। असल में कटने वाली रकम मौजूदा बैक-ऑफ़िस मूल्य कॉन्फ़िगरेशन के अनुसार होती है।
Max Mode / Variety: यह एंडपॉइंट वैकल्पिक पैरामीटर max_mode और variety (0-4) समर्थित करता है। max_mode
चालू होने पर यह कॉल 2× दर पर बिल होती है (0.6 → 1.2 युआन प्रति कॉल); variety का कोई अतिरिक्त शुल्क नहीं
है। दोनों का अर्थ और भेजने का तरीका नए API का अवलोकन के
"उन्नत पैरामीटर" भाग में है।
प्रतीक्षा समय और टाइमआउट (ज़रूरी): यह सिंक्रोनस एंडपॉइंट है — ऑर्डर तभी स्वीकार होता है और जनरेशन को सौंपा जाता है जब जवाब आ जाता है। मापन के अनुसार ज़्यादातर अनुरोध 1-3 सेकंड में जवाब देते हैं, लगभग 10% 30 सेकंड से ज़्यादा लेते हैं और सबसे लंबा लगभग 230 सेकंड का होता है। क्लाइंट टाइमआउट 300 सेकंड या ज़्यादा रखें; जवाब न आना इसका मतलब नहीं कि कुछ बना नहीं, और टाइमआउट के तुरंत बाद दोबारा कोशिश न करें (इससे ऑर्डर दोहरा होता है और दोबारा शुल्क लगता है)। अगर कनेक्शन टूट गया हो, तो बाद में
GET /api/music/songsसे जाँचें। नए API का अवलोकन में "प्रतीक्षा समय और टाइमआउट सेटिंग" देखें।
ऑडियो बड़ा हो तो "अपलोड" और "कवर" को दो चरणों में बाँटना बेहतर है (सुझाया गया)
इस एंडपॉइंट के लिए पूरा ऑडियो अनुरोध बॉडी में डालना ज़रूरी है: ऑडियो जितना बड़ा, बॉडी उतनी बड़ी, और एक नेटवर्क झटका या टाइमआउट ट्रांसफ़र को बीच में काट देता है, जिसके बाद सर्वर
unexpected end of JSON inputलौटाता है (HTTP 400, कोई शुल्क नहीं)।जब ऑडियो लगभग 8 MB से बड़ा हो, नेटवर्क अस्थिर हो या वही स्रोत सामग्री दोबारा इस्तेमाल होनी हो, तो दो-चरणीय रूप अपनाएँ:
POST /api/music/upload-sourceपहले स्रोत ऑडियो अपलोड करता है — निःशुल्क, कभी भी दोबारा कोशिश — औरclip_idदेता है;POST /api/music/generate-from-sourceउसclip_idसे कवर शुरू करता है — शुल्क वाले चरण की अनुरोध बॉडी केवल लगभग 250 बाइट होती है।देखें स्रोत ऑडियो अपलोड API, स्रोत क्लिप से कवर API और इस पेज के अंत में "बड़ी फ़ाइलें और कटे अनुरोध"।
अनुरोध पैरामीटर
Headers
| पैरामीटर | प्रकार | ज़रूरी | नोट |
|---|---|---|---|
| Authorization | string | हाँ | Bearer YOUR_API_KEY |
| Content-Type | string | हाँ | application/json |
Body पैरामीटर
| पैरामीटर | प्रकार | ज़रूरी | डिफ़ॉल्ट | नोट |
|---|---|---|---|---|
| model | string | नहीं | suno-v6 | ग्राहक के लिए मॉडल नाम: suno-v6, suno-v6-wild या suno-v6-mini |
| file_url | string | नहीं | - | स्रोत ऑडियो का URL |
| file_base64 | string | नहीं | - | Base64 ऑडियो |
| file_name | string | नहीं | - | फ़ाइल नाम |
| prompt | string | नहीं | - | नए बोल या रूपांतरण की दिशा |
| style | string | नहीं | - | स्टाइल टैग |
| title | string | नहीं | - | शीर्षक |
| negativeTags | string | नहीं | - | नकारात्मक स्टाइल |
| instrumental | boolean | नहीं | false | गाना वाद्य-संगीत है या नहीं |
| waitAudio | boolean | नहीं | false | ऑडियो पूरा होने की प्रतीक्षा करनी है या नहीं |
| cover_start_s | number | नहीं | - | कवर किए जाने वाले हिस्से का आरंभ सेकंड |
| cover_end_s | number | नहीं | - | कवर किए जाने वाले हिस्से का अंत सेकंड |
| audio_weight | number | नहीं | - | संदर्भ ऑडियो पर निर्भरता, रेंज 0.0-1.0; केवल तब भेजा जा सकता है जब संदर्भ ऑडियो दिया गया हो |
cover_start_s और cover_end_s सेकंड में हैं और दशमलव भी ले सकते हैं; आरंभ समय अंत समय से छोटा होना चाहिए और स्रोत ऑडियो की अवधि से अधिक नहीं हो सकता। दोनों फ़ील्ड छोड़ दें तो पूरा ऑडियो इस्तेमाल होता है। audio_weight Suno के metadata.control_sliders.audio_weight पर मैप होता है और तय करता है कि नतीजा संदर्भ ऑडियो पर कितना टिकता है; इसकी वैल्यू 0.0-1.0 होती है और इसे केवल तब शामिल किया जा सकता है जब अनुरोध में file_url या file_base64 के रूप में मान्य संदर्भ ऑडियो हो। 0 मान्य मान है; फ़ील्ड छोड़ने का अर्थ "निर्दिष्ट नहीं" है और Suno का डिफ़ॉल्ट व्यवहार बना रहता है। instrumental और waitAudio JSON बूलियन होने चाहिए, स्ट्रिंग नहीं।
अपलोड एंडपॉइंट डिफ़ॉल्ट रूप से असिंक्रोनस जवाब देता है। जब तक प्रतिक्रिया में clips[].status pending है, audio_url का खाली होना सामान्य है और इसका मतलब यह नहीं कि अपलोड या कवर विफल रहा; लौटाई गई असली song_id सहेजें और ऑडियो पता पढ़ने से पहले गाना क्वेरी एंडपॉइंट से पूरा होने तक पूछताछ करें।
अनुरोध उदाहरण
curl -X POST https://www.suno-api.io/api/music/upload-cover \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno-v6",
"file_url": "https://example.com/source.mp3",
"file_name": "source.mp3",
"prompt": "नए बोल या रूपांतरण की दिशा",
"style": "Mandopop, acoustic guitar",
"title": "कवर संस्करण",
"negativeTags": "noise, low quality",
"audio_weight": 0.5,
"instrumental": false,
"waitAudio": false,
"cover_start_s": 0,
"cover_end_s": 60
}'
प्रतिक्रिया
{
"code": 200,
"message": "success",
"data": {
"upload": {
"clip_id": "uploaded_clip_id",
"status": "complete"
},
"clips": [
{
"song_id": "new_clip_id",
"song_title": "कवर संस्करण",
"status": "pending"
}
]
}
}
बड़ी फ़ाइलें और कटे अनुरोध
सुझाव: अपलोड और कवर को दो चरणों में बाँटें
एक-बार वाला एंडपॉइंट (यही) अपलोड और जनरेशन को एक ही चरण में जोड़ता है: बड़ी बॉडी उसी एक चरण में होती है, इसलिए टूटने पर न पता चलता है कि कुछ बना या नहीं, और न यह कि शुल्क लगा या नहीं।
| चरण 1 अपलोड | चरण 2 कवर | |
|---|---|---|
| एंडपॉइंट | POST /api/music/upload-source |
POST /api/music/generate-from-source |
| बिलिंग | निःशुल्क (केवल अपलोड, जनरेशन नहीं) | 0.6 युआन प्रति कॉल; Max Mode के साथ 1.2 युआन प्रति कॉल |
| अनुरोध बॉडी | ऑडियो खुद (base64 / multipart), या file_url से केवल लिंक |
लगभग 250 बाइट (केवल एक sourceClipId) |
| लौटाता है | clip_id (स्रोत ऑडियो का clip ID) |
data.clips[].song_id (बना हुआ परिणाम) |
| विफल हो तो | बस दोबारा कोशिश करें, कोई शुल्क नहीं और कोई जनरेशन कार्य नहीं | क्लाइंट टाइमआउट ≥300 सेकंड रखें; टाइमआउट पर पहले /api/music/songs से जाँचें, तुरंत दोबारा न करें |
| स्रोत सामग्री दोबारा इस्तेमाल | वही clip_id extend / replace / अलगाव के लिए भी चलता है |
हर बार ऑडियो दोबारा अपलोड करना पड़ता है |
निष्कर्ष: ऑडियो लगभग 8 MB से ऊपर, नेटवर्क अस्थिर, या वही सामग्री कई बार → दो-चरणीय रूप; बहुत छोटा ऑडियो और स्थिर नेटवर्क → यह एंडपॉइंट अधिक आसान है।
400 unexpected end of JSON input का मतलब क्या है
इसका मतलब है कि सर्वर को मिला JSON अधूरा है (यह गलत पैरामीटर नहीं, न अनुमति या बैलेंस की समस्या है)। सामान्य कारण, संभावना के क्रम में:
- बड़ी बॉडी ट्रांसफ़र के बीच कट गई: प्रवेश परत दोनों दर्ज करती है — "क्लाइंट ने कितने बाइट भेजने की घोषणा की" और "वास्तव में कितने पहुँचे"। मापा गया उदाहरण: क्लाइंट ने 14.17 MB घोषित किया पर पहुँचे केवल 11.8–12.4 MB, और तीनों अनुरोध लगभग 1.6–1.7 सेकंड पर रुक गए; कम पड़े बाइट की संख्या हर बार अलग थी, जो ट्रांसफ़र टूटने की ओर इशारा करती है, किसी तय सीमा की ओर नहीं (सर्वर अनुरोध बॉडी का आकार सीमित नहीं करता)।
Content-Lengthऔर वास्तव में भेजे गए बाइट का मेल न होना: Node.js में स्ट्रिंग के.length(UTF-16 अक्षरों की संख्या) को लंबाई मानने पर, सामग्री में चीनी या अन्य मल्टी-बाइट टेक्स्ट होते ही गणना गलत हो जाती है।- बॉडी को Buffer के बजाय स्ट्रिंग के रूप में लिखना, जिससे लिखे गए बाइट घोषित संख्या से मेल नहीं खाते।
तीनों स्थितियाँ शुल्क लगने से पहले होती हैं, इसलिए कोई खर्च नहीं बनता।
क्लाइंट-साइड स्वयं जाँच सूची
-
Content-LengthBuffer.byteLength(json, 'utf8')(याBuffer.from(json).length) से लें —json.lengthकभी नहीं; - अनुरोध बॉडी Buffer के रूप में लिखें, स्ट्रिंग के रूप में नहीं;
- सॉकेट / अनुरोध टाइमआउट ≥ 300 सेकंड;
- ऑडियो लगभग 8 MB से बड़ा हो तो:
file_urlइस्तेमाल करें (बॉडी केवल कुछ सौ बाइट), याupload-sourceका multipart अपलोड, या सीधे दो-चरणीय रूप; - multipart अनुरोधों में
Content-Typeहाथ से न सेट करें (boundary क्लाइंट जोड़ेगा); - "वास्तव में भेजे गए बाइट" प्रिंट करें और
Content-Lengthसे तुलना करें; - दो-चरणीय रूप में, चरण 2 भेजने से पहले पुष्टि करें कि चरण 1 ने
clip_idऔरstatusपूर्ण अवस्था में लौटाए।
आम गलतियाँ
| त्रुटि | अर्थ | क्या करें |
|---|---|---|
unexpected end of JSON input |
अनुरोध बॉडी अधूरी (कटी) | ऊपर की जाँच सूची करें, या दो-चरणीय रूप अपनाएँ |
invalid character '-' in numeric literal |
multipart बॉडी JSON एंडपॉइंट को भेज दी गई | JSON एंडपॉइंट पर multipart न इस्तेमाल करें और Content-Type हाथ से न सेट करें |
one of file_path, file_base64, file_url, or multipart file is required |
ऑडियो संलग्न नहीं था | file_base64 / file_url / multipart file जोड़ें |
model is required |
बॉडी खाली मान्य JSON थी (जैसे {}) |
कम से कम model भेजें |
Invalid request: Invalid request, ... |
बॉडी पार्स न होने का आवरण संदेश | ठोस कारण के लिए दूसरा हिस्सा पढ़ें (आम तौर पर ऊपर का कोई एक) |
संबंधित एंडपॉइंट: स्रोत ऑडियो अपलोड API (चरण 1), स्रोत क्लिप से कवर API (चरण 2).
API कुंजी प्राप्त करें
रजिस्टर करने के बाद कंसोल में API कुंजी बनाएँ। प्रत्येक जनरेशन का खर्च 0.6 युआन है और 2 ट्रैक मिलते हैं, डाउनलोड असीमित हैं और फ़ोन नंबर की ज़रूरत नहीं है।
API कुंजी लें अवलोकन पर लौटें