सरल मोड जनरेशन API

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

एंडपॉइंट विवरण

सरल मोड जनरेशन एक वाक्य के विवरण को पूरा गाना बना देती है। सेवा आपके विवरण से बोल, धुन, संगीत-संयोजन और गायन खुद लिखती है।

एंडपॉइंट: POST /api/music/create

बिलिंग: सशुल्क, अभी डिफ़ॉल्ट 0.6 युआन प्रति कॉल। हर कॉल आम तौर पर 2 गाने लौटाती है; असल में कटने वाली रकम मौजूदा बैक-ऑफ़िस मूल्य कॉन्फ़िगरेशन के अनुसार होती है।

Max Mode / Variety: यह एंडपॉइंट वैकल्पिक पैरामीटर max_mode और variety (0-4) समर्थित करता है। max_mode चालू होने पर यह कॉल 2× दर पर बिल होती है (0.6 → 1.2 युआन प्रति कॉल); variety का कोई अतिरिक्त शुल्क नहीं है। दोनों का अर्थ और भेजने का तरीका नए API का अवलोकन के "उन्नत पैरामीटर" भाग में है।

सुझाया गया मॉडल: suno-v6

प्रतीक्षा समय और टाइमआउट (ज़रूरी): यह सिंक्रोनस एंडपॉइंट है — ऑर्डर तभी स्वीकार होता है और जनरेशन को सौंपा जाता है जब जवाब आ जाता है। मापन के अनुसार ज़्यादातर अनुरोध 1-3 सेकंड में जवाब देते हैं, लगभग 10% 30 सेकंड से ज़्यादा लेते हैं और सबसे लंबा लगभग 230 सेकंड का होता है। क्लाइंट टाइमआउट 300 सेकंड या ज़्यादा रखें; जवाब न आना इसका मतलब नहीं कि कुछ बना नहीं, और टाइमआउट के तुरंत बाद दोबारा कोशिश न करें (इससे ऑर्डर दोहरा होता है और दोबारा शुल्क लगता है)। अगर कनेक्शन टूट गया हो, तो बाद में GET /api/music/songs से जाँचें। नए API का अवलोकन में "प्रतीक्षा समय और टाइमआउट सेटिंग" देखें।

अनुरोध पैरामीटर

Headers

पैरामीटर प्रकार ज़रूरी नोट
Authorization string हाँ Bearer YOUR_API_KEY
Content-Type string हाँ application/json

Body पैरामीटर

पैरामीटर प्रकार ज़रूरी डिफ़ॉल्ट नोट
description string हाँ - गाने का विवरण, किसी भी भाषा में; अधिकतम 3000 अक्षर (इससे ज़्यादा पर 400 मिलता है और शुल्क नहीं लगता)
model string नहीं suno-v6 ग्राहक के लिए मॉडल नाम: suno-v6, suno-v6-wild या suno-v6-mini
instrumental boolean नहीं false गाना सिर्फ़ वाद्य-संगीत है या नहीं
wait_completion boolean नहीं false जवाब देने से पहले जनरेशन पूरा होने का इंतज़ार करना है या नहीं
references array नहीं - संदर्भ सामग्री की सूची: संदर्भ गाने / पुरानी आवाज़ें / संदर्भ चित्र; अधिकतम 5 गाने, 1 आवाज़ और 1 चित्र। नीचे "संदर्भ सामग्री references (वैकल्पिक)" देखें

अनुरोध उदाहरण

curl -X POST https://www.suno-api.io/api/music/create \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "suno-v6",
    "description": "समुद्र किनारे की गर्मियों पर एक ज़िंदादिल मंदारिन पॉप गाना",
    "instrumental": false,
    "wait_completion": false
  }'

संदर्भ सामग्री references (वैकल्पिक)

references एक सरणी है जो इस जनरेशन से "संदर्भ सामग्री" जोड़ती है। यह पूरी तरह वैकल्पिक है (छोड़ने पर व्यवहार पहले जैसा ही रहता है), और आप एक ही तरह या कोई भी संयोजन जोड़ सकते हैं।

तत्व प्रकार

type ज़रूरी फ़ील्ड वैकल्पिक फ़ील्ड अधिकतम नोट
song song_id style_prompt, lyrics, duration_s 5 संदर्भ गाना; song_id गाना क्वेरी और इतिहास API से आता है, और गाना पहले से पूरा होना चाहिए
voice voice_id - 1 पुरानी आवाज़; voice_id वॉइस क्लोनिंग और आवाज़ से जनरेशन API से आता है
image base64 - 1 संदर्भ चित्र; data:image/jpeg;base64,... रूप में base64 सामग्री भेजें

नियम

उदाहरण: दो संदर्भ गाने

curl -X POST https://www.suno-api.io/api/music/create \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "suno-v6",
    "description": "इन विचारों को एक गाने में जोड़ें",
    "references": [
      { "type": "song", "song_id": "43eb711d-81f8-4e72-a68e-b2498bac88f9" },
      { "type": "song", "song_id": "a90438d2-35fc-4443-88f4-56531e6e5d24" }
    ]
  }'

उदाहरण: संदर्भ गाना + पुरानी आवाज़

{
  "model": "suno-v6",
  "description": "इन विचारों को इस आवाज़ में गाएँ",
  "references": [
    { "type": "song",  "song_id": "43eb711d-81f8-4e72-a68e-b2498bac88f9" },
    { "type": "voice", "voice_id": "5813cbe1-36f1-414a-a9a8-4d399dfeb292" }
  ]
}

उदाहरण: संदर्भ गाना + संदर्भ चित्र

{
  "model": "suno-v6",
  "description": "इस चित्र का माहौल पकड़ें",
  "references": [
    { "type": "song",  "song_id": "43eb711d-81f8-4e72-a68e-b2498bac88f9" },
    { "type": "image", "base64": "data:image/jpeg;base64,/9j/4AAQ..." }
  ]
}

पैरामीटर त्रुटियाँ

ये मामले HTTP 400 लौटाते हैं, किसी भी शुल्क से पहले रोक दिए जाते हैं, इसलिए इनका कोई खर्च नहीं:

मामला त्रुटि संदेश
5 से ज़्यादा संदर्भ गाने references supports at most 5 song references
1 से ज़्यादा आवाज़ references supports at most 1 voice reference
1 से ज़्यादा संदर्भ चित्र references supports at most 1 image reference
type अमान्य references[0].type must be one of song, voice, image
गाने में song_id नहीं references[0].song_id is required
गाना अभी पूरा नहीं references[0].song_id must be a real completed clip
वही गाना दो बार references[0].song_id is duplicated

references[0] में दिया नंबर उस तत्व की सरणी में अनुक्रमणिका है, इसलिए गलत तत्व ढूँढना आसान है।

प्रतिक्रिया

गानों की सरणी, आम तौर पर 2 कार्य या गाने।

[
  {
    "song_id": "clip_id",
    "song_title": "गर्मियों की समुद्री हवा",
    "status": "pending",
    "description": "समुद्र किनारे की गर्मियों पर एक ज़िंदादिल मंदारिन पॉप गाना",
    "audio_url": "",
    "cover_url": "",
    "video_url": "",
    "model_version": "suno-v6",
    "generation_type": "generate",
    "created_at": "2026-05-21T10:00:00Z"
  }
]

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

डिफ़ॉल्ट रूप से यह एंडपॉइंट सिंक्रोनस है: जवाब आना ही इसका अर्थ है कि ऑर्डर स्वीकार हो गया, और मापा गया इंतज़ार लगभग 230 सेकंड तक पहुँच सकता है। अगर आपका क्लाइंट लंबा कनेक्शन रखने के लिए उपयुक्त नहीं है, तो रसीद-स्वीकृति मोड चालू करें — दोनों में से कोई भी तरीका चलेगा:

चालू होने पर एंडपॉइंट तुरंत HTTP 202 लौटाता है, जिसका अर्थ सिर्फ़ "स्वीकार हुआ और जनरेशन कतार में गया" है, जबकि जनरेशन पृष्ठभूमि में चलता रहता है:

{
  "success": true,
  "data": {
    "request_id": "ac_20260920092714315816800d76fv3nq",
    "status": "queued",
    "accepted_at": 1789896434,
    "pre_consumed_quota": 300000,
    "tasks": [
      { "index": 0, "status": "queued" },
      { "index": 1, "status": "queued" }
    ]
  }
}

स्वीकृति चरण में song_id नहीं लौटता। अभी कोई असली गाना ID नहीं है, और न request_id न tasks[].index गाना ID हैं — इन्हें song_id के रूप में न सहेजें। असली song_id नीचे प्रगति क्वेरी में दिखता है।

स्वीकृति प्रगति पूछना

एंडपॉइंट: GET /api/music/requests/{request_id} (मुफ़्त, उसी API कुंजी से प्रमाणित)

curl "https://www.suno-api.io/api/music/requests/ac_20260920092714315816800d76fv3nq" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "success": true,
  "data": {
    "request_id": "ac_20260920092714315816800d76fv3nq",
    "status": "processing",
    "tasks": [
      { "index": 0, "status": "processing", "song_id": "f3fa09f5-3d55-4953-826c-0d23f043ec57" },
      { "index": 1, "status": "processing", "song_id": "5fcafe3e-3fae-4d64-8f66-c01bc027b0c3" }
    ]
  }
}

हर status मान का अर्थ:

status अर्थ
queued स्वीकार हुआ, अभी किसी गाने से जुड़ा नहीं (tasks खाली सरणी हो सकती है)
processing जनरेशन को सौंपा गया
partial दोनों में से एक पूरा हो गया
completed दोनों पूरे, tasks[].song_id पढ़ा जा सकता है
failed भेजना विफल, रकम पूरी वापस कर दी गई है, और error_message कारण बताता है

हर कार्य का अपना tasks[].status भी है, मान वही जो गाना क्वेरी API में हैं: pending (भेजा गया, बन रहा है), processing, completed, failed। कार्य आइटम में title, duration और पहले से दर्ज audio_url भी हो सकते हैं; जो नहीं है वह अभी बना नहीं है।

असली song_id मिलने के बाद गाना क्वेरी API या डाउनलोड एंडपॉइंट से आगे बढ़ें।

Python उदाहरण

import time
import requests

BASE = "https://www.suno-api.io"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}

accepted = requests.post(
    f"{BASE}/api/music/create",
    headers={**HEADERS, "Idempotency-Key": "your-own-unique-key"},
    json={"description": "एक ज़िंदादिल पॉप गाना", "model": "suno-v6", "accept_mode": "async"},
    timeout=300,
).json()["data"]

request_id = accepted["request_id"]
while True:
    time.sleep(5)
    progress = requests.get(
        f"{BASE}/api/music/requests/{request_id}", headers=HEADERS, timeout=60
    ).json()["data"]
    if progress["status"] in ("completed", "failed"):
        print(progress)
        break

संगतता और नोट

आगे के चरण

अगर जवाब आते समय गाने पूरे नहीं हुए हैं, तो अंतिम परिणाम के लिए गाना क्वेरी API इस्तेमाल करें।

Node/Electron इंटीग्रेशन उदाहरण

अगर आप Electron के मुख्य प्रोसेस, Node.js सर्वर या डेस्कटॉप क्लाइंट में सामान्य जनरेशन जोड़ रहे हैं, तो सुझाया गया प्रवाह यह है:

  1. जनरेशन कार्य बनाने के लिए POST /api/music/create कॉल करें।
  2. जवाब से song_id या id पढ़ें।
  3. स्थिति देखने के लिए हर 2 सेकंड में POST /api/music/query कॉल करें।
  4. नतीजे में audio_url दिखते ही जनरेशन पूरा मानें।

पुराने रास्ते POST /api/generate या GET /api/clip?id=... इस्तेमाल करना बंद कर दें; ये मौजूदा सुझाए गए सार्वजनिक इंटीग्रेशन की सतह का हिस्सा नहीं हैं।

const http = require('http');
const https = require('https');

const BASE_URL = 'https://www.suno-api.io';
const MODEL = 'suno-v6';
const POLL_INTERVAL_MS = 2000;
const MAX_POLL_ATTEMPTS = 60;

function sleep(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

function requestJson(urlString, apiKey, body) {
  const url = new URL(urlString);
  const transport = url.protocol === 'https:' ? https : http;
  const payload = JSON.stringify(body);

  return new Promise((resolve, reject) => {
    const req = transport.request(
      {
        method: 'POST',
        hostname: url.hostname,
        port: url.port || undefined,
        path: `${url.pathname}${url.search}`,
        headers: {
          Authorization: `Bearer ${apiKey}`,
          'Content-Type': 'application/json',
          'Content-Length': Buffer.byteLength(payload),
        },
      },
      (res) => {
        let raw = '';

        res.setEncoding('utf8');
        res.on('data', (chunk) => {
          raw += chunk;
        });
        res.on('end', () => {
          const data = raw ? JSON.parse(raw) : {};

          if (!res.statusCode || res.statusCode < 200 || res.statusCode >= 300) {
            reject(new Error(`Suno API request failed: HTTP ${res.statusCode} ${raw}`));
            return;
          }

          resolve(data);
        });
      }
    );

    req.on('error', reject);
    req.write(payload);
    req.end();
  });
}

function getPayload(response) {
  return response && response.data !== undefined ? response.data : response;
}

function toSongList(payload) {
  if (Array.isArray(payload)) return payload;
  if (Array.isArray(payload?.songs)) return payload.songs;
  if (Array.isArray(payload?.clips)) return payload.clips;
  return payload ? [payload] : [];
}

function collectSongIds(createResponse) {
  return toSongList(getPayload(createResponse))
    .map((song) => song.song_id || song.id)
    .filter(Boolean);
}

async function generateSunoSong({ apiKey, description, instrumental = false }) {
  const createResponse = await requestJson(`${BASE_URL}/api/music/create`, apiKey, {
    description,
    model: MODEL,
    instrumental,
    wait_completion: false,
  });

  const songIds = collectSongIds(createResponse);
  if (songIds.length === 0) {
    throw new Error(`Suno API did not return song ids: ${JSON.stringify(createResponse)}`);
  }

  for (let attempt = 0; attempt < MAX_POLL_ATTEMPTS; attempt += 1) {
    await sleep(POLL_INTERVAL_MS);

    const queryResponse = await requestJson(`${BASE_URL}/api/music/query`, apiKey, {
      song_ids: songIds,
      model: MODEL,
    });

    const songs = toSongList(getPayload(queryResponse));
    const completed = songs.find((song) => song.audio_url);

    if (completed) {
      return {
        audioUrl: completed.audio_url,
        title: completed.song_title || completed.title || 'Suno Song',
        duration: completed.duration,
      };
    }

    const allFailed = songs.length > 0 && songs.every((song) =>
      ['failed', 'error', 'rejected'].includes(String(song.status || '').toLowerCase())
    );

    if (allFailed) {
      throw new Error(`Suno generation failed: ${JSON.stringify(songs)}`);
    }
  }

  throw new Error('Suno generation timed out after 120 seconds. Please query again later.');
}

// Usage:
// generateSunoSong({
//   apiKey: process.env.SUNO_API_KEY,
//   description: 'A bright pop song about the ocean in summer',
// }).then(console.log).catch(console.error);

असली प्रोजेक्ट में API कुंजी सर्वर पर्यावरण चर, डेस्कटॉप क्लाइंट सेटिंग या सुरक्षित भंडार में रखें — कभी फ़्रंट-एंड कोड में नहीं और कभी रिपॉज़िटरी में कमिट न करें।

अगलाकस्टम मोड जनरेशन API

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

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

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