Tek adımda yükleme ve cover API'si

2026-09-18 tarihinde güncellendi · Suno-API ekibi

Uç nokta açıklaması

Tek adımda yükleme ve cover, bir ses dosyası veya ses URL'si gönderir ve o kaynak sesten yeni bir cover sürümü üretir.

Uç nokta: POST /api/music/upload-cover

Faturalama: Ücretli, şu anda varsayılan olarak çağrı başına 0,6 ¥. Bu uç nokta "yükle ve cover yap" içindir; görsel kapak yüklemekle ilgili değildir. Gerçekte tahsil edilen tutar güncel arka ofis fiyat yapılandırmasına göre belirlenir.

Max Mode / Variety: bu uç nokta isteğe bağlı max_mode ve variety (0-4) parametrelerini destekler. max_mode açıkken bu çağrı 2 kat fiyattan faturalanır (0,6 → 1,2 ¥ / çağrı); variety için ek ücret alınmaz. Anlamları ve nasıl gönderilecekleri Yeni API genel bakışı sayfasındaki "Gelişmiş parametreler" bölümündedir.

Bekleme süreleri ve zaman aşımları (önemli): bu uç nokta senkrondur — sipariş ancak yanıt geldiğinde kabul edilir ve üretime verilir. Ölçümlere göre isteklerin çoğu 1-3 saniyede yanıtlanır, yaklaşık %10'u 30 saniyeyi aşar ve en uzunu yaklaşık 230 saniyedir. İstemci zaman aşımını 300 saniye veya üzerine ayarlayın; yanıt gelmemesi hiçbir şey üretilmediği anlamına gelmez ve zaman aşımından hemen sonra yeniden denemeyin (siparişi çoğaltır ve tekrar ücret alır). Bağlantı koptuysa daha sonra GET /api/music/songs ile kontrol edin. Yeni API genel bakışı sayfasındaki "Bekleme süreleri ve zaman aşımı ayarları" bölümüne bakın.

Ses büyükse "yükleme" ve "cover" işlemlerini iki adıma ayırmanız önerilir

Bu uç nokta sesin tamamının istek gövdesine konmasını gerektirir: ses büyüdükçe gövde büyür ve tek bir ağ dalgalanması ya da zaman aşımı aktarımı yarıda keser, ardından sunucu unexpected end of JSON input döndürür (HTTP 400, ücret alınmaz).

Ses yaklaşık 8 MB'ı aşıyorsa, ağ kararsızsa veya aynı kaynak materyal tekrar kullanılacaksa iki adımlı biçime geçin:

  1. POST /api/music/upload-source önce kaynak sesi yükler — ücretsiz, her zaman yeniden denenebilir — ve bir clip_id verir;
  2. POST /api/music/generate-from-source bu clip_id ile cover'ı başlatır — ücret alınan adımın istek gövdesi yalnızca yaklaşık 250 bayttır.

Kaynak ses yükleme API'si, kaynak klipten cover API'si ve bu sayfanın sonundaki "Büyük dosyalar ve kesilen istekler" bölümüne bakın.

İstek parametreleri

Headers

Parametre Tür Zorunlu Notlar
Authorization string evet Bearer YOUR_API_KEY
Content-Type string evet application/json

Gövde parametreleri

Parametre Tür Zorunlu Varsayılan Notlar
model string hayır suno-v6 Müşteriye dönük model adı: suno-v6, suno-v6-wild veya suno-v6-mini
file_url string hayır - Kaynak ses URL'si
file_base64 string hayır - Base64 ses
file_name string hayır - Dosya adı
prompt string hayır - Yeni şarkı sözleri veya uyarlama yönü
style string hayır - Stil etiketleri
title string hayır - Başlık
negativeTags string hayır - Negatif stil
instrumental boolean hayır false Şarkının enstrümantal olup olmadığı
waitAudio boolean hayır false Sesin tamamlanmasının beklenip beklenmeyeceği
cover_start_s number hayır - Cover yapılacak bölümün başlangıç saniyesi
cover_end_s number hayır - Cover yapılacak bölümün bitiş saniyesi
audio_weight number hayır - Referans sese bağımlılık, aralık 0.0-1.0; yalnızca referans ses verildiğinde gönderilebilir

cover_start_s ve cover_end_s saniye cinsindendir ve ondalık olabilir; başlangıç zamanı bitiş zamanından küçük olmalı ve kaynak sesin süresini aşmamalıdır. İki alan da atlanırsa sesin tamamı kullanılır. audio_weight, Suno'nun metadata.control_sliders.audio_weight alanına eşlenir ve sonucun referans sese ne kadar yaslandığını kontrol eder; 0.0-1.0 değerini alır ve yalnızca istekte geçerli bir file_url veya file_base64 referans sesi varsa gönderilebilir. 0 geçerli bir değerdir; alanı atlamak "belirtilmedi" anlamına gelir ve Suno'nun varsayılan davranışını korur. instrumental ve waitAudio JSON boolean olmalıdır, metin olmamalıdır.

Yükleme uç noktası varsayılan olarak asenkron döner. Yanıttaki clips[].status değeri pending iken audio_url alanının boş olması normaldir ve yüklemenin veya cover'ın başarısız olduğu anlamına gelmez; dönen gerçek song_id değerini kaydedin ve ses adresini okumadan önce şarkı sorgu uç noktasıyla tamamlanana kadar yoklayın.

İstek örneği

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": "Yeni şarkı sözleri veya uyarlama yönü",
    "style": "Mandopop, acoustic guitar",
    "title": "Cover sürümü",
    "negativeTags": "noise, low quality",
    "audio_weight": 0.5,
    "instrumental": false,
    "waitAudio": false,
    "cover_start_s": 0,
    "cover_end_s": 60
  }'

Yanıt

{
  "code": 200,
  "message": "success",
  "data": {
    "upload": {
      "clip_id": "uploaded_clip_id",
      "status": "complete"
    },
    "clips": [
      {
        "song_id": "new_clip_id",
        "song_title": "Cover sürümü",
        "status": "pending"
      }
    ]
  }
}

Büyük dosyalar ve kesilen istekler

Önerilen: yükleme ve cover'ı iki adıma ayırma

Tek seferlik uç nokta (bu) yükleme ile üretimi tek adımda birleştirir: büyük gövde o tek adımda bulunur, dolayısıyla kesildiğinde ne bir şeyin üretildiğini ne de ücret alındığını bilirsiniz.

1. adım yükleme 2. adım cover
Uç nokta POST /api/music/upload-source POST /api/music/generate-from-source
Faturalama Ücretsiz (yalnızca yükleme, üretim yok) Çağrı başına 0,6 ¥; Max Mode ile çağrı başına 1,2 ¥
İstek gövdesi Sesin kendisi (base64 / multipart) veya file_url ile yalnızca bağlantı Yaklaşık 250 bayt (yalnızca bir sourceClipId)
Döndürdüğü clip_id (kaynak sesin clip ID'si) data.clips[].song_id (üretilen sonuç)
Başarısız olursa Doğrudan yeniden deneyin, ücret yok ve üretim görevi oluşmaz İstemci zaman aşımını ≥300 s yapın; zaman aşımında önce /api/music/songs ile kontrol edin, hemen yeniden denemeyin
Kaynak materyali yeniden kullanma Aynı clip_id uzatma / değiştirme / ayırma için de çalışır Ses her seferinde yeniden yüklenmelidir

Sonuç: ses yaklaşık 8 MB'ın üzerindeyse, ağ kararsızsa veya aynı materyal birkaç kez kullanılacaksa → iki adımlı biçim; ses çok küçük ve ağ kararlıysa → bu uç nokta daha zahmetsizdir.

400 unexpected end of JSON input ne demek

Anlamı, sunucunun aldığı JSON'un eksik olmasıdır (yanlış parametre değil, izin veya bakiye sorunu değil). Olasılık sırasına göre sık nedenler:

  1. Büyük gövdenin aktarım ortasında kesilmesi: giriş katmanı hem "istemcinin kaç bayt göndereceğini bildirdiğini" hem de "gerçekte kaç baytın ulaştığını" kaydeder. Ölçülen örnek: istemci 14,17 MB bildirdi, gerçekte yalnızca 11,8–12,4 MB ulaştı ve üç isteğin tümü yaklaşık 1,6–1,7 sn civarında durdu; eksik bayt sayısı her seferinde farklıydı, bu da sabit bir sınıra değil aktarım kesintisine işaret eder (sunucu istek gövdesi boyutunu sınırlamaz).
  2. Content-Length ile gerçekte gönderilen bayt sayısının uyuşmaması: Node.js'te bir metnin .length değerini (UTF-16 karakter sayısı) uzunluk olarak kullanmak, içerikte Çince veya çok baytlı metin varsa yanlış sonuç verir.
  3. Gövdenin Buffer yerine metin olarak yazılması, böylece yazılan baytlar bildirilenle uyuşmaz.

Üç durum da ücretlendirmeden önce gerçekleşir, dolayısıyla masraf doğmaz.

İstemci tarafı öz denetim listesi

Sık görülen hatalar

Hata Anlamı Ne yapmalı
unexpected end of JSON input İstek gövdesi eksik (kesilmiş) Yukarıdaki öz denetimi uygulayın veya iki adımlı biçime geçin
invalid character '-' in numeric literal multipart gövdesi JSON uç noktasına gönderildi JSON uç noktalarında multipart kullanmayın ve Content-Type ayarlamayın
one of file_path, file_base64, file_url, or multipart file is required Ses eklenmemiş file_base64 / file_url / multipart file ekleyin
model is required Gövde boş ve geçerli JSON (örneğin {}) En azından model gönderin
Invalid request: Invalid request, ... Gövde ayrıştırma hatasının sarmalayıcı mesajı Somut nedeni için ikinci yarıyı okuyun (genellikle yukarıdakilerden biri)

İlgili uç noktalar: Kaynak ses yükleme API'si (1. adım), kaynak klipten cover API'si (2. adım).

SonrakiKaynak klipten cover API'si

API anahtarı alın

Kaydolduktan sonra konsoldan bir API anahtarı oluşturun. Her üretim 0,6 ¥ tutarındadır ve 2 parça döner, indirmeler sınırsızdır ve telefon numarası gerekmez.

API anahtarı al Genel bakışa dön