Skip to main content
API projektu Suno Studio zarządza wielościeżkowymi projektami muzycznymi przez jeden punkt wejścia:
action w żądaniu określa typ operacji. Klucz główny Project jednolicie używa id; version_id oznacza aktualną wersję projektu, wszystkie operacje modyfikacji i eksportu muszą przekazywać najnowszą wersję, aby uniknąć nadpisania przy współbieżności.

Przegląd operacji

Operacje asynchroniczne natychmiast zwracają task_id. Użyj bezpłatnego interfejsu /suno/tasks do odpytywania lub przekaż callback_url, aby otrzymać wynik końcowego stanu.

Tworzenie i odczytywanie

Wszystkie operacje modyfikacji powinny wysyłać unikalny nagłówek Idempotency-Key. Po pomyślnym utworzeniu data.id w odpowiedzi jest Project ID. Nowy pusty projekt może nie mieć version_id przed pierwszym zapisem.
Odpowiedź odczytu zawiera pełny state. Nowy pusty projekt zwraca {"tracks":[],"timing":{"bps":2}}, co można bezpośrednio użyć do pierwszego zapisu. timing.bps oznacza liczbę beatów na sekundę, domyślnie 2 (120 BPM), i musi być liczbą dodatnią; startBeats, endBeats i readStartBeats fragmentów używają jednostki beatów projektu, nie można bezpośrednio traktować pozycji taktów z analizy audio jako współrzędnych osi czasu.

Zapisywanie pełnego stanu

Przy pierwszym zapisie nowego pustego projektu można pominąć version_id; po wygenerowaniu wersji przez pierwszy zapis kolejne zapisy muszą przekazywać najnowszą wartość. Jeśli wersja uległa zmianie, interfejs zwraca HTTP 409. W takim przypadku ponownie wykonaj retrieve, połącz zmiany, a następnie wyślij je z nowym kluczem idempotencji; nie ponawiaj bezkrytycznie starego żądania.

Przesyłanie i dodawanie ścieżek

Po pomyślnym przesłaniu odczytaj ID audio z response.data.candidate.audio_id. Następnie dodaj je do projektu:
Dodanie ścieżki domyślnie zachowuje szybkość odtwarzania audio i przelicza czas trwania audio na beaty na podstawie timing.bps projektu. Po każdym save, add_track, commit_candidate lub remove_track należy używać nowego version_id z odpowiedzi.

Generowanie i zastępowanie

generate_track generuje kandydatów ścieżek audio dla zakresu projektu; replace_section zwraca dwóch kandydatów lokalnego zastąpienia. Obie operacje nie wybierają automatycznie rezultatu artystycznego. Model musi używać publicznej nazwy: chirp-v3-5, chirp-v4, chirp-v4-5, chirp-v4-5-plus, chirp-v5, chirp-v5-5, chirp-v6, chirp-v6-wild lub chirp-v6-mini; dostępność konkretnej operacji nadal zależy od końcowego stanu zadania, nieobsługiwane nazwy zwracają 400 przed wysłaniem. Nie następuje automatyczna zmiana na inny model.
generate_track musi również podać render_audio_id (ukończone audio eksportu projektu), stem_control_tags oraz źródłowe audio source_audio_id. batch_size wynosi 1–4, domyślnie 2; start_seconds, end_seconds to sekundy źródłowego audio. Zakres zastępowania z fixed=true musi być krótszy niż 26 sekund. Po wybraniu kandydata zatwierdź go:
Kandydat jest powiązany z wersją projektu w chwili generowania. Gdy projekt już się zmienił, starego kandydata nie można bezpośrednio zatwierdzić. Kandydat lokalnego zastąpienia jest zatwierdzany do oryginalnej ścieżki zawierającej unikalny fragment źródłowy, kandydat pełnego take zachowuje pierwotną pozycję i zastępuje pierwotny fragment; kandydat zakresu zastępuje wyłącznie żądany zakres, zachowując fragmenty przed i po nim. Gdy nie można niezawodnie dopasować czasu trwania, zwracane jest 400 i zachowywany jest pierwotny projekt; w takim przypadku nie przekazuj start_beats, end_beats. Kandydat nowej ścieżki powinien zostać zatwierdzony do pustej ścieżki zapisanej z wyprzedzeniem, domyślnie z zachowaniem punktu początkowego fragmentu źródłowego, lub jawnie przekaż zakres bez nakładania się; nakładanie się istniejących fragmentów na tej samej ścieżce zwróci 400. Nie generuj najpierw, a następnie nie twórz nowej ścieżki, ponieważ zmiana wersji spowoduje wygaśnięcie kandydata.

Eksportowanie pełnej piosenki

Serwer odczytuje autorytatywny stan projektu określonej wersji i składa parametry eksportu. Gdy start_beats, end_beats są pominięte, domyślnie eksportowany jest zakres od najwcześniejszego początku do najpóźniejszego końca wszystkich słyszalnych fragmentów; wyciszone ścieżki/fragmenty nie są uwzględniane, a gdy istnieją ścieżki solo, wybierane są wyłącznie ścieżki solo. Pusty projekt lub brak prawidłowych słyszalnych ścieżek zwraca 400. Wynik końcowego stanu zawiera render_id, audio_id, audio_url i czas trwania. Projekt jest powiązany ze środowiskiem wykonawczym z chwili utworzenia i nie można go migrować między środowiskami ani automatycznie przełączać awaryjnie.
Można przesyłać lub przetwarzać wyłącznie audio, do którego posiada się legalne prawa użytkowania. API projektu jest obecnie w fazie Beta; należy trwale przechowywać końcowy URL audio w ważnych wynikach.

Odpytywanie i odzyskiwanie po błędach

Wyślij powyższe żądanie do /suno/tasks. Zadanie Projects jest uznawane za udane, gdy istnieje finished_at oraz response.success=true; response.success=false oznacza niepowodzenie. Zwrócenie HTTP 200 lub task_id przy przesłaniu oznacza jedynie, że żądanie zostało przyjęte, a nie że audio zostało ukończone. Ten sam Idempotency-Key z tym samym żądaniem odczyta ponownie pierwotny wynik (w tym niepowodzenie), nie wygeneruje automatycznie ponownie ani nie naliczy opłaty ponownie. Aby jawnie ponowić nieudaną operację, najpierw zapytaj o pierwotne zadanie, aby potwierdzić niepowodzenie, a następnie użyj nowego klucza; nie przesyłaj ponownie, gdy pierwotne zadanie jest nadal przetwarzane lub wynik jest niepewny. Klasyfikacja błędów obejmuje studio_unavailable / studio_model_unavailable (503, tymczasowo nie można przetworzyć lub model jest niedostępny), studio_model_unsupported (400, model nie obsługuje tej operacji), studio_state_invalid (400, stan projektu lub zakres eksportu jest nieprawidłowy), too_many_requests (429), studio_audio_unavailable (403, audio referencyjne nie może zostać użyte do eksportu projektu) oraz content_rejected (403). Zachowaj trace_id na potrzeby diagnostyki.