API voor nummeropvraging en geschiedenis
Deze pagina behandelt drie gratis opvraag-endpoints:
| Mogelijkheid | Methode | Endpoint |
|---|---|---|
| Status en resultaat van een nummer opvragen | POST | /api/music/query |
| De nummers opvragen die het huidige account heeft gemaakt | GET | /api/music/songs |
| De parameters opvragen die bij de generatie zijn bewaard | GET | /api/music/songs/:song_id |
Heb je op een generatie-endpoint de ontvangstbewijsmodus (
accept_mode=async) gebruikt, dan heb je een bewijsnummer in handen, geen nummer-ID. Volg de voortgang metGET /api/music/requests/{request_id}en kom terug naar de endpoints op deze pagina zodra je het echtesong_idhebt. Zie "Ontvangstbewijsmodus" in de Generatie-API in eenvoudige modus.
Authenticatie en gegevensbereik
Alle drie de endpoints authenticeren met dezelfde API-sleutel:
Authorization: Bearer YOUR_API_KEY
De nummergeschiedenis is geïsoleerd per user_id waartoe de API-sleutel behoort. Meerdere sleutels onder hetzelfde hoofdaccount kunnen de geschiedenis van dat account lezen, maar niet die van een andere gebruiker of een ander subsite-account.
De geschiedenis-endpoints geven alleen echt gegenereerde nummers terug. Uitgesloten zijn:
- plaatsvervanger-registraties van generatie die met
pending:beginnen; - uploads van bronaudio en registraties van verbeterde upload;
- deelresultaten zoals scheiding van zang/begeleiding en stems;
- nummers van andere gebruikers of subsite-accounts.
1. Generatiestatus opvragen
Vraagt de huidige status en het eindresultaat op van één of meer nummer-ID's.
Endpoint: POST /api/music/query
Facturering: Gratis.
Headers
| Parameter | Type | Verplicht | Opmerkingen |
|---|---|---|---|
| Authorization | string | ja | Bearer YOUR_API_KEY |
| Content-Type | string | ja | application/json |
Body-parameters
| Parameter | Type | Verplicht | Standaard | Opmerkingen |
|---|---|---|---|---|
| model | string | nee | suno-v6 |
Modelversie |
| song_ids | string | ja | - | Nummer-ID's, gescheiden door komma's |
Voorbeeldverzoek
curl -X POST https://www.suno-api.io/api/music/query \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno-v6",
"song_ids": "clip_id_1,clip_id_2"
}'
Voorbeeldantwoord
[
{
"song_id": "clip_id_1",
"song_title": "Titel van het nummer",
"status": "completed",
"audio_url": "https://example.com/audio.mp3",
"video_url": "https://example.com/video.mp4",
"cover_url": "https://example.com/cover.jpg",
"lyrics": "Songtekst",
"style_tags": "Mandopop, acoustic",
"duration": 180.5,
"model_version": "suno-v6",
"created_at": "2026-05-21T10:00:00Z"
}
]
Compatibiliteitsopmerkingen
Oudere documentatie toont song_ids mogelijk als array. Tegenwoordig wordt een kommagescheiden tekenreeks aanbevolen, wat overeenkomt met de daadwerkelijke aanroep van het endpoint.
song_ids moet echte nummer-ID's bevatten. Een plaatsvervanger-ID die met pending: begint is geen definitief song_id en kan hier niet worden gebruikt; alleen plaatsvervanger-ID's opvragen kan een lege array [] opleveren.
Het model, model_version of platform-model_name in een antwoord kan historische waarden bevatten. Nieuwe taken moeten suno-v6, suno-v6-wild of suno-v6-mini gebruiken; suno-v2 tot en met suno-v5-5 zijn uitgefaseerd, en die namen in de geschiedenis zien betekent niet dat het model nog kan worden ingediend.
Zolang een taak pending, submitted of processing is, kunnen audio_url, video_url en cover_url leeg zijn — dat is normaal voor een onvoltooide taak. Trek niet alleen uit een leeg adres de conclusie dat het mislukt is; gebruik status en vraag opnieuw op als de status voltooid is. Alleen als de status voltooid is en de adressen nog steeds leeg zijn, is het zinvol de support te contacteren met het song_id.
⚠️ Audio-adressen leven 7 dagen — verplaats uw bestanden op tijd
De hier teruggegeven
audio_url,video_url(en andere media-adressen zoals WAV) worden geleverd vanuit de objectopslag van het platform en vervallen standaard na 7 dagen: de bestanden worden gerecycled en het oude adres geeft dan 404.
- Verplaats de bestanden binnen die 7 dagen naar uw eigen opslag; behandel het adres niet als een langdurige link.
- Een verlopen adres vereist geen nieuwe generatie en wordt niet opnieuw gefactureerd: roep dit endpoint (
POST /api/music/query) opnieuw aan voor een vers, geldig adres van dat nummer.
2. Nummergeschiedenis van het account opvragen
Toont de nummers die het hoofdaccount van de huidige API-sleutel heeft gemaakt. Handig voor een eigen nummerlijst, kiezer of geschiedenispagina.
Endpoint: GET /api/music/songs
Facturering: Gratis.
Query-parameters
| Parameter | Type | Verplicht | Standaard | Opmerkingen |
|---|---|---|---|---|
| p | integer | nee | 1 |
Paginanummer, vanaf 1 |
| page_size | integer | nee | 20 |
Items per pagina, maximaal 100 |
| q | string | nee | - | Fuzzy zoeken op titel, of exact zoeken op volledige nummer-ID |
| status | string | nee | - | Exacte statusfilter, bijvoorbeeld completed, playable |
Resultaten zijn aflopend gesorteerd op created_at en interne record-ID, zodat de paginavolgorde stabiel blijft.
Een ingediende opdracht terugvinden die in timeout liep: generatie-endpoints geven geen tussenliggend antwoord voordat de opdracht is geaccepteerd. Als uw client in timeout liep of de verbinding wegviel tijdens het indienen, kan die opdracht al geaccepteerd zijn en worden gegenereerd. Kijk even op dit endpoint (nieuwste eerst): geaccepteerde nummers verschijnen gewoon in de lijst. Dien alleen opnieuw in als u hebt bevestigd dat het er echt niet is, om dubbele betaling te voorkomen. Zie "Wachttijden en timeout-instellingen" in het Overzicht van de nieuwe API.
Voorbeeldverzoek
curl "https://www.suno-api.io/api/music/songs?p=1&page_size=20&status=completed" \
-H "Authorization: Bearer YOUR_API_KEY"
Voorbeeldantwoord
{
"success": true,
"message": "",
"data": {
"page": 1,
"page_size": 20,
"total": 42,
"items": [
{
"song_id": "8e31b3c0-example-song-id",
"title": "Stad in de nacht",
"status": "completed",
"generation_type": "custom_generate",
"model": "suno-v6",
"duration": 187.42,
"audio_url": "https://example.com/audio.mp3",
"image_url": "https://example.com/cover.jpg",
"created_at": 1784000000,
"completed_at": 1784000120
}
]
}
}
Antwoordvelden
| Veld | Type | Opmerkingen |
|---|---|---|
| song_id | string | Echt nummer-ID, bruikbaar voor de detailopvraging |
| title | string | Huidige titel, die de gebruiker kan hebben hernoemd |
| status | string | Huidige status |
| generation_type | string | Generatietype |
| model | string | Generatiemodel |
| duration | number | Audioduur in seconden |
| audio_url | string | Audio-adres; kan leeg zijn zolang de taak niet klaar is |
| image_url | string | Coveradres; kan leeg zijn |
| created_at | integer | Aanmaaktijd, Unix-timestamp in seconden |
| completed_at | integer | Voltooiingstijd, Unix-timestamp in seconden; kan ontbreken zolang de taak niet klaar is |
Het lijst-endpoint geeft geen prompts, factureringsvelden, accountinformatie of ruwe antwoorden terug. Voor prompts en generatieparameters roept u het detail-endpoint van het nummer aan.
3. Generatieparameters opvragen
Vraagt de prompt, stijl, het model en het bronnummer op die het platform bij de generatie heeft bewaard.
Endpoint: GET /api/music/songs/:song_id
Facturering: Gratis.
Alleen nummers van het hoofdaccount van de huidige API-sleutel kunnen worden gelezen. Nummers van andere gebruikers of subsite-accounts worden uniform behandeld als "nummer niet gevonden".
Padparameter
| Parameter | Type | Verplicht | Opmerkingen |
|---|---|---|---|
| song_id | string | ja | Echt nummer-ID |
Voorbeeldverzoek
curl "https://www.suno-api.io/api/music/songs/8e31b3c0-example-song-id" \
-H "Authorization: Bearer YOUR_API_KEY"
Voorbeeldantwoord
{
"success": true,
"message": "",
"data": {
"song_id": "8e31b3c0-example-song-id",
"title": "Stad in de nacht",
"status": "completed",
"generation_type": "custom_generate",
"model": "suno-v6",
"duration": 187.42,
"audio_url": "https://example.com/audio.mp3",
"image_url": "https://example.com/cover.jpg",
"video_url": "",
"wav_url": "",
"created_at": 1784000000,
"completed_at": 1784000120,
"client_request_id": "example-request-id",
"client_request_index": 0,
"parameters": {
"prompt": "stadsstraten na de regen, songtekst over een weerzien",
"style_tags": "Mandopop, acoustic, warm vocal",
"title": "Stad in de nacht",
"model": "suno-v6",
"generation_type": "custom_generate",
"source_song_id": "",
"source_audio_url": "",
"custom_mode": null,
"instrumental": null,
"negative_tags": null,
"vocal_gender": null,
"lyrics_mode": null,
"wait_audio": null,
"style_weight": null,
"weirdness_constraint": null
},
"parameter_retention": {
"core_parameters_available": true,
"extended_parameters_available": false,
"sources": [
"suno_tasks"
],
"unavailable_fields": [
"custom_mode",
"instrumental",
"negative_tags",
"vocal_gender",
"lyrics_mode",
"wait_audio",
"style_weight",
"weirdness_constraint"
]
}
}
}
De velden van parameters
| Veld | Type | Opmerkingen |
|---|---|---|
| prompt | string | Generatieprompt of songtekst |
| style_tags | string | Stijltags |
| title | string | Bewaarde generatietitel; een gewone historische taak bewaart mogelijk alleen de huidige titel |
| model | string | Generatiemodel |
| generation_type | string | Generatietype |
| source_song_id | string | Bronnummer-ID bij cover-, verlengings- en vergelijkbare taken |
| source_audio_url | string | Adres van de bronaudio |
| custom_mode | boolean/null | Of de aangepaste modus is gebruikt; null als niet bewaard |
| instrumental | boolean/null | Of het nummer instrumentaal is; bestaande historische gegevens bewaren dit meestal niet apart |
| negative_tags | string/null | Uitgesloten stijlen |
| vocal_gender | string/null | Instelling voor zanggeslacht |
| lyrics_mode | string/null | Tekstmodus; bestaande historische gegevens bewaren die meestal niet |
| wait_audio | boolean/null | Of op de volledige audio is gewacht; bestaande historische gegevens bewaren dat meestal niet |
| style_weight | number/null | Stijlgewicht |
| weirdness_constraint | number/null | Parameter voor creativiteit / vreemdheid |
Het veld prompt_view (prompt bekijken, toegevoegd op 2026-09-28)
prompt_view is een genormaliseerde structuur speciaal voor "prompt bekijken": het ordent de gegevens per
generatietype in vaste secties, zodat de client niet meer hoeft te bepalen welk veld hij toont. Het is een
puur additief veld — de oude velden (parameters, parameter_retention) behouden naam en
betekenis, en clients die het nieuwe veld niet verwerken worden er helemaal niet door geraakt.
"prompt_view": {
"type": "custom_generate",
"type_label": "Aangepaste modus",
"generation": {
"model": "suno-v6", "max_mode": false, "duration": 182.4,
"title": "Vier uur 's ochtends#701f37", "title_base": "Vier uur 's ochtends", "title_suffix": "701f37",
"created_at": 1790421721
},
"inputs": {
"user_text": "...", "user_text_kind": "lyrics",
"user_style": "guochao-elektronica, diepe subbas, retro-synth",
"style_tags": "guochao-elektronica, diepe subbas, retro-synth",
"style_source": "user", "lyrics": "...",
"negative_tags": "", "is_instrumental": false
},
"extended": {
"vocal_gender": "m", "style_weight": 0.5, "audio_weight": 0.85,
"weirdness_constraint": 0.5, "variety": 2, "lyrics_mode": "manual",
"custom_mode": true
},
"reference": { "voice_name": "sv_40_34", "source_song_id": "", "source_title": "" },
"retention": {
"recorded_since": "2026-09-28", "missing_reason": "",
"not_applicable_fields": ["audio_weight"]
}
}
| Veld | Type | Opmerkingen |
|---|---|---|
type / type_label |
string | Ruwe generatietype / weergegeven label (eenvoudige generatie, aangepaste modus, geluidseffectmodus, generatie met gekloonde stem…) |
generation.model |
string | Gebruikt model |
generation.max_mode |
bool | Of Max Mode aan stond |
generation.duration |
number | Audioduur in seconden |
generation.title |
string | Titel precies zoals bewaard (kan een suffix bevatten) |
generation.title_base |
string | Weergegeven titel zonder het suffix #xxxxxx aan het eind |
generation.title_suffix |
string | Het suffix zelf (zonder #); leeg als het er niet is |
inputs.user_text |
string | Invoer van de gebruiker (beschrijving of songtekst, afhankelijk van het type) |
inputs.user_text_kind |
string | lyrics / description / cover_requirements |
inputs.user_style |
string | De stijl die de gebruiker zelf typte (aangepaste modus, stem, geluidseffecten) |
inputs.style_tags |
string | De stijl die uiteindelijk is toegepast |
inputs.style_source |
string | user = door de gebruiker ingevoerd; suno_derived = door Suno afgeleid uit de beschrijving |
inputs.lyrics |
string | Songtekst; leeg als er geen is, [Instrumental] bij instrumentale nummers |
inputs.negative_tags |
string | Uitgesloten stijlen |
inputs.is_instrumental |
bool | Of het nummer instrumentaal is |
extended.* |
— | Uitgebreide parameters, zie hieronder; niet-bewaarde velden verschijnen niet |
reference.voice_name |
string | Naam van de stem (alleen bij stemtypes; het interne persona-id wordt niet teruggegeven) |
reference.source_song_id / source_title |
string | Bronnummer bij cover-, verlengings- en vergelijkbare taken |
retention.recorded_since |
string | Datum vanaf wanneer uitgebreide parameters worden bewaard (2026-09-28) |
retention.missing_reason |
string | Waarom er geen uitgebreide parameters zijn; bij historische gegevens not_recorded_before_20260928 |
retention.not_applicable_fields |
string[] | Parameters die dat generatietype nooit nodig had (niet tonen als "ontbrekende parameters") |
Velden die in extended kunnen voorkomen: vocal_gender, style_weight, audio_weight,
weirdness_constraint, variety, lyrics_mode, custom_mode, plus de groep geluidseffecten
sound_type / sound_bpm / sound_key / sound_loop. Lege waarden worden nooit teruggegeven.
Drie weergaveregels (volg ze in plaats van zelf af te leiden):
- Onderscheid waar de stijl vandaan komt: bij
style_source=suno_derivedtoont u "stijl (door Suno afgeleid uit uw beschrijving)" en nooit "uw stijl"; - Interne prompts verschijnen nooit: stem-covertypes geven alleen de door de gebruiker ingevoerde 【stijlvereisten】/【coververeisten】 terug; het vaste raamwerk dat wij voor het model samenstellen verschijnt in geen enkel veld (historische gegevens zijn net zo opgeschoond);
- Raad ontbrekende parameters niet: staat iets niet in
extended, dan is het toen niet vastgelegd — leg dat uit metretention.
Opmerkingen over het bewaren van parameters
parameter_retention onderscheidt "er is expliciet een lege waarde doorgegeven" van "het veld is historisch nooit opgeslagen":
core_parameters_available: of de hoofdrecord van de taak bestaat; bij een geldige detailopvraging meestaltrue;extended_parameters_available: of een gerelateerde uitgebreide muziektaak-record is gevonden;sources: uit welke gegevenstabellen dit antwoord komt;unavailable_fields: velden die niet betrouwbaar uit de geschiedenis kunnen worden hersteld; die gevennullbinnenparameters.
Gewone historische nummers bewaarden meestal de prompt, stijl, huidige titel, het model, het generatietype en het bronnummer, maar niet alle geavanceerde parameters apart. Het platform raadt ontbrekende waarden nooit uit het generation_type.
Sommige uitgebreide muziektaken bewaarden ook de oorspronkelijke prompt, stijl, titel, het model en daarnaast custom_mode, negative_tags, vocal_gender, style_weight en weirdness_constraint. Zelfs als er een uitgebreide record is, kunnen instrumental, lyrics_mode en wait_audio onherstelbaar blijven.
Titels kunnen later door de gebruiker worden hernoemd. Bewaarde een gewone historische taak geen aparte oorspronkelijke titel, dan kan parameters.title de huidige titel zijn; bestaat er een uitgebreide taakrecord, dan krijgt de daar bewaarde oorspronkelijke generatietitel voorrang.
Niet gevonden of geen rechten
Bedrijfsfouten gebruiken een uniforme antwoordenvelop. Als het nummer niet bestaat of niet bij het huidige account hoort:
{
"success": false,
"message": "song not found"
}
Deze bedrijfsfout wordt momenteel met HTTP 200 teruggegeven, dus beoordeel het resultaat aan het veld success. Een ontbrekende, ongeldige, verlopen of uitgeschakelde API-sleutel geeft HTTP 401.
Veiligheidsopmerkingen
De geschiedenis- en detail-endpoints geven nooit terug:
- API-sleutels of token-ID's;
- quota-, facturerings- of terugbetalingsvelden;
- accountinformatie of ruwe antwoorden;
- interne sleutels van de objectopslag;
- beheerdersfouten of fouten van interne bronnen.
Een API-sleutel aanvragen
Maak na je registratie een API-sleutel aan in de console. Elke generatie kost ¥0,6 en levert 2 nummers op, downloads zijn onbeperkt en een telefoonnummer is niet nodig.
API-sleutel ophalen Terug naar overzicht