← TekoälyLaulu

API-dokumentaatio

Palvelun TekoälyLaulu rajapinta tekee henkilökohtaisia lauluja ohjelmallisesti: sisään tilaisuus ja muutama yksityiskohta, ulos valmis sanoitus ja tuotettu äänite. Pelkkää HTTPS:ää ja JSONia, pakollista SDK:ta ei ole.

Päivitetty: 2026-09-16

Hae käyttöoikeutta

Avaimet jaetaan käsin. Lyhyt viesti hankkeestasi, arvioidusta määrästä ja kielistä riittää, ja avaus vie yleensä yhden arkipäivän.

Hae käyttöoikeutta

Johdanto

Rajapinta tekee täsmälleen saman kuin verkkosivu. Lähetät tilaisuuden, laulun kohteen nimen ja muutaman konkreettisen yksityiskohdan. Siitä syntyy ensin valmis sanoitus ja sen jälkeen tuotettu äänite laulun, sovituksen ja miksauksen kera. Koko matka kestää tavallisesti kahdesta kolmeen minuuttia.

Kaikki pyynnöt menevät osoitteeseen https://api.tekoalylaulu.fi/v1. Rajapinta puhuu vain HTTPS:ää, ottaa vastaan JSONia ja vastaa JSONilla. Pakollista SDK:ta ei ole: mikä tahansa kieli, joka osaa HTTP:n, riittää. Tämän sivun esimerkit käyttävät curlia, Pythonia ja Nodea, koska ne ovat kolme yleisintä tapausta.

Jokaisella verkkotunnuksella on oma rajapinnan perusosoite ja oma hinta paikallisessa valuutassa. Avain toimii sillä verkkotunnuksella, jolle se on myönnetty. Useaa markkinaa hoitava saa joko useita avaimia tai yhden avaimen, joka on avattu useaan verkkotunnukseen.

Laskutus tapahtuu valmiista laulusta, tällä hetkellä 24,99 €. Luonnokset, perutut toimeksiannot ja uudelleenluonnit eivät maksa mitään.

Käyttöoikeus

Automaattista rekisteröitymistä ei tietoisesti ole. Avaimet jaetaan käsin, koska jokaisen laulun takana on todellisia tuotantokustannuksia ja haluamme tietää, mihin integraatio menee. Käytännössä kyse on lyhyestä viestistä ja yhdestä arkipäivästä.

Kirjoita osoitteeseen songs@maxkuch.com ja kerro neljä asiaa:

  • Mitä olet rakentamassa, parilla kolmella lauseella.
  • Arvioitu määrä kuukaudessa.
  • Millä kielillä laulujen pitää laulaa.
  • Otatko vastaan webhookeja vai kyselläänkö tila rajapinnasta.

Saat kaksi avainta: testiavaimen etuliitteellä sk_test_, joka on maksuton ja palauttaa kiinteitä esittelyääniä, sekä tuotantoavaimen etuliitteellä sk_live_. Molemmat toimivat heti, yksittäisiä päätepisteitä ei tarvitse avata erikseen.

Tunnistautuminen

Jokainen pyyntö kuljettaa avaimen Authorization-otsakkeessa bearer-tunnisteena. Ilman kelvollista otsaketta vastaus on 401 ja virhetyyppi authentication_error.

bash Täysi pyyntö otsakkeineen
curl https://api.tekoalylaulu.fi/v1/songs \
  -H "Authorization: Bearer $SONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "occasion": "birthday",
    "recipient_name": "Anna",
    "relationship": "sister",
    "language": "fi",
    "mood": "happy",
    "style": "pop",
    "voice": "female",
    "details": "Climbs every weekend, always ten minutes late, calls everyone chef.",
    "callback_url": "https://example.com/hooks/songs"
  }' 

Käsittele avainta kuin salasanaa: vain palvelinpuolella, ei koskaan selainkoodissa eikä julkisessa repositoriossa. Jos avain vuotaa, kirjoita meille: suljemme sen heti ja myönnämme uuden. Tilillä voi olla useita voimassa olevia avaimia, joten vaihto onnistuu ilman katkoa.

Testi- ja tuotantoavaimet käyttävät samoja päätepisteitä. Kentästä livemode näkee jokaisessa objektissa, menikö pyyntö testitilassa.

Pikaopas

Laulun luonti on yksi kutsu. Vastaus tulee heti ja sisältää tunnisteen tilassa queued. Kaikki muu tapahtuu taustalla.

python Luonti ja esikuuntelun odotus (Python)
import os, time, requests

API = "https://api.tekoalylaulu.fi/v1"
HEAD = {"Authorization": "Bearer " + os.environ["SONG_API_KEY"]}

song = requests.post(API + "/songs", headers=HEAD, json={
    "occasion": "wedding",
    "recipient_name": "Lea and Tim",
    "relationship": "friends",
    "language": "fi",
    "mood": "romantic",
    "details": "Met at a bike repair shop, dog named Miso, both terrible dancers.",
}).json()

while song["status"] not in ("preview_ready", "complete", "failed"):
    time.sleep(5)
    song = requests.get(API + "/songs/" + song["id"], headers=HEAD).json()

print(song["lyrics"])
print(song["preview_url"])

Esimerkki kysyy tilaa viiden sekunnin välein yksinkertaisuuden vuoksi. Tuotannossa webhookit ovat parempi tie, koska ne säästävät sekä avoimen yhteyden että odottelun. Molemmat tavat on tuettu, webhookit kuvataan alempana.

Ratkaiseva kenttä on details. Sinne menevät konkreettiset asiat henkilöstä: lempinimi, erikoisuus, loma joka meni pieleen. Yleiset lauseet tyyliin "hän on lämmin ihminen" tuottavat yleisiä säkeitä. Kolmesta viiteen konkreettista yksityiskohtaa riittää, ja juuri ne ratkaisevat, onko laulu vain mukava vai oikeasti jostakusta.

Päätepisteet lyhyesti

MetodiPolkuMihin se on
POST/v1/songsTilaa uusi laulu.
GET/v1/songs/{id}Hae laulu kaikkine ajantasaisine kenttineen.
GET/v1/songsListaa tilin laulut suodattimin ja sivutuksin.
GET/v1/songs/{id}/lyricsHae pelkkä sanoitus tavallisena tekstinä.
GET/v1/songs/{id}/audioAllekirjoitettu latauslinkki esikuunteluun tai koko äänitteeseen.
POST/v1/songs/{id}/regenerateKäynnistä maksuton uudelleenluonti.
POST/v1/songs/{id}/checkoutLuo maksusivu loppuasiakkaalle.
POST/v1/songs/{id}/unlockAvaa laulu suoraan ja veloita tililtä.
GET/v1/optionsKaikki sallitut arvot tilaisuudelle, tunnelmalle, tyylille, äänelle ja kielelle.
GET/v1/accountSaldo, rajat ja avatut verkkotunnukset.
DELETE/v1/songs/{id}Peru laulu, joka ei ole vielä valmis.

Laulun luonti

POST /v1/songs ottaa vastaan toimeksiannon ja käynnistyy heti. Pakollisia on vain kolme kenttää, muilla on järkevä oletus tai ne valitaan tilaisuuden mukaan.

KenttäTyyppiKuvaus
stringpakollinenTilaisuus. Sallitut arvot tulevat päätepisteestä /v1/options.
stringpakollinenLaulun kohteen nimi. Sitä käytetään sanoituksessa.
stringpakollinenKonkreettisia yksityiskohtia henkilöstä, 40 - 4000 merkkiä. Tämä kenttä ratkaisee laadun.
stringvalinnainenTilaajan ja saajan suhde, esimerkiksi sisko, työkaveri, puoliso.
stringvalinnainenKieli, jolla lauletaan. Oletus on fi.
stringvalinnainenPerustunnelma. Ilman valintaa valitsemme tilaisuuteen sopivan.
stringvalinnainenMusiikkityyli. Ilman valintaa valitsemme tilaisuuteen ja tunnelmaan sopivan.
stringvalinnainenLaulajan ääni. Ilman valintaa valitsemme tilaisuuteen sopivan.
stringvalinnainenViesti, jonka pitää kuulua laulussa.
stringvalinnainenVapaa teksti kaikelle, mikä ei sovi muualle, esimerkiksi tempotoiveet.
stringvalinnainenHTTPS-osoite, johon tapahtumat lähetetään.
objectvalinnainenVapaat avain-arvo-parit, enintään 20. Palaavat muuttumattomina.
javascript Luonti idempotenssiavaimella (Node)
const res = await fetch("https://api.tekoalylaulu.fi/v1/songs", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.SONG_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
    occasion: "anniversary",
    recipient_name: "Mara",
    relationship: "partner",
    language: "fi",
    mood: "warm",
    details: "Ten years, three apartments, one very loud coffee machine.",
    callback_url: "https://example.com/hooks/songs",
    metadata: { order_id: "A-10423" },
  }),
});

const song = await res.json();
console.log(song.id, song.status);

Kutsu ei maksa mitään. Maksu tulee vasta avauksesta päätepisteellä /unlock tai loppuun viedystä maksusessiosta.

Lauluobjekti

Jokainen yksittäisen laulun palauttava päätepiste palauttaa saman objektin. Kentät, joita ei vielä ole, ovat null ja täyttyvät tuotannon edetessä.

json Heti luonnin jälkeen
{
  "id": "sng_3n8Kd2ZpQv",
  "object": "song",
  "status": "queued",
  "created_at": "2026-09-16T09:41:02Z",
  "occasion": "birthday",
  "recipient_name": "Anna",
  "relationship": "sister",
  "language": "fi",
  "mood": "happy",
  "style": "pop",
  "voice": "female",
  "lyrics": null,
  "preview_url": null,
  "audio_url": null,
  "duration_seconds": null,
  "paid": false,
  "price": { "amount": 2999, "currency": "EUR" },
  "metadata": {},
  "livemode": true
}
KenttäTyyppiKuvaus
stringvalinnainenYksilöivä tunniste, alkaa aina sng_.
stringvalinnainenTuotannon nykyinen vaihe, katso seuraava luku.
stringvalinnainenKoko sanoitus säkeistö- ja kertosäemerkintöineen. Maksuton, myös ilman maksua.
stringvalinnainenEnsimmäiset 45 sekuntia MP3-muodossa. Aina saatavilla, ilman maksua.
stringvalinnainenKoko äänite MP3-muodossa, allekirjoitettu ja voimassa 24 tuntia. Täyttyy vasta maksun jälkeen.
integervalinnainenValmiin äänitteen pituus sekunteina, tavallisesti 120 - 240.
booleanvalinnainenOnko laulu avattu.
objectvalinnainenSumma valuutan pienimpänä yksikkönä ja valuuttakoodi, tässä 24,99 €.
objectvalinnainenSe, minkä annoit luonnissa, muuttumattomana.
booleanvalinnainenfalse, jos pyyntö tehtiin testiavaimella.
json Valmiina ja maksettuna
{
  "id": "sng_3n8Kd2ZpQv",
  "object": "song",
  "status": "complete",
  "created_at": "2026-09-16T09:41:02Z",
  "completed_at": "2026-09-16T09:47:35Z",
  "lyrics": "[Verse 1]\nAnna, six in the morning, chalk on your hands ...",
  "preview_url": "https://cdn.tekoalylaulu.fi/preview/sng_3n8Kd2ZpQv.mp3",
  "audio_url": "https://cdn.tekoalylaulu.fi/full/sng_3n8Kd2ZpQv.mp3?expires=1789412855&sig=...",
  "duration_seconds": 184,
  "paid": true,
  "price": { "amount": 2999, "currency": "EUR" },
  "metadata": { "order_id": "A-10423" },
  "livemode": true
}

Tila-arvot

Laulu kulkee vaiheet tässä järjestyksessä. Taaksepäin ei mennä, ja complete, failed ja cancelled ovat lopputiloja.

TilaArvoMerkitys
queuedOtettu vastaan, odottaa vapaata paikkaa tuotannossa. Yleensä muutama sekunti.
writing_lyricsSanoitusta kirjoitetaan.
lyrics_readySanoitus on valmis ja haettavissa. Tämä on ensimmäinen vaihe; koko tuotanto kestää yleensä kahdesta kolmeen minuuttia.
generating_audioLaulu, sovitus ja miksaus ovat tuotannossa.
preview_readyEnsimmäiset 45 sekuntia on saatavilla ja koko tiedosto valmis.
completeMaksettu ja toimitettu kokonaisuudessaan.
failedTuotanto epäonnistui lopullisesti. Mitään ei veloiteta, error-kenttä kertoo syyn.
cancelledPeruttu ennen valmistumista.

Yksittäinen epäonnistunut tuotantoyritys ei johda heti tilaan failed. Yritämme sisäisesti useamman kerran ja luovutamme vasta, kun kaikki yritykset kaatuvat. Siksi failed on harvinainen ja tarkoittaa todella: tätä laulua ei tule.

Haku ja listaus

GET /v1/songs/{id} palauttaa laulun nykytilan. Päätepiste on kevyt ja kestää sekunnin välein kyselyn, kunhan pysyt taajuusrajan sisällä.

bash Listaus suodattimella ja kursorilla
curl -G https://api.tekoalylaulu.fi/v1/songs \
  -H "Authorization: Bearer $SONG_API_KEY" \
  -d status=complete \
  -d limit=20 \
  -d starting_after=sng_3n8Kd2ZpQv

Listat toimivat kursorilla. Saat enintään limit kohdetta, oletuksena 20 ja enintään 100, uusimmasta alkaen. Jos has_more on tosi, annat arvon next_cursor seuraavassa kutsussa kenttään starting_after. Suodattaa voi kentillä status, occasion, language, paid sekä created_after ja created_before.

json Listavastaus
{
  "object": "list",
  "data": [
    { "id": "sng_9Wq1LmT4bR", "status": "complete", "recipient_name": "Jonas", "...": "..." },
    { "id": "sng_3n8Kd2ZpQv", "status": "complete", "recipient_name": "Anna",  "...": "..." }
  ],
  "has_more": true,
  "next_cursor": "sng_3n8Kd2ZpQv"
}

Sanoitus ja ääni

Sanoitus on maksuton ja täysi, ei katkelma. GET /v1/songs/{id}/lyrics palauttaa sen muodossa text/plain, säkeistö- ja kertosäemerkintöineen. Sama sanoitus on lauluobjektin kentässä lyrics.

Äänessä on kaksi tasoa. Esikuuntelu on valmiin äänitteen ensimmäiset 45 sekuntia, ei erillinen demo: sama ääni, sama sovitus, sama sanoitus. Se on saatavilla ilman maksua ja pysyy niin. Koko tiedoston antaa GET /v1/songs/{id}/audio vasta avauksen jälkeen.

Molemmat osoitteet ovat allekirjoitettuja ja voimassa 24 tuntia. Ne on tarkoitettu lataamiseen, ei pysyväksi linkiksi. Jos tarvitset tiedostoa pidempään, lataa se kerran ja säilytä itse. Päätepisteen uusi kutsu antaa milloin tahansa tuoreen osoitteen.

Muoto on aina MP3 320 kbit/s. WAVia tarvitseva lisää ?format=wav, saatavilla studio-option tileille.

Uudelleenluonti

Jos tulos ei vakuuta, uudelleenluonti ei maksa mitään. POST /v1/songs/{id}/regenerate luo uuden version saman tunnisteen alle ja palauttaa tilan arvoon queued. Edellinen versio säilyy kentässä previous_versions.

bash Uudelleenluonti perusteluineen
curl https://api.tekoalylaulu.fi/v1/songs/sng_3n8Kd2ZpQv/regenerate \
  -H "Authorization: Bearer $SONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "keep_lyrics": false,
    "reason": "voice_not_matching",
    "note": "Please try a lower male voice and a slower tempo."
  }' 

Arvolla keep_lyrics: true sanoitus säilyy ja vain äänite tehdään uudelleen. Se on oikea tie, kun teksti istuu ja vain ääni tai tempo meni pieleen. Arvolla false myös sanoitus kirjoitetaan uusiksi.

Kenttä note menee suoraan uudelleenluontiin, joten konkreettinen lause kannattaa. "Matalampi miesääni, hitaammin" toimii, "tee paremmin" ei. Luomme uudelleen kunnes tulos istuu, enintään kuusi kertaa laulua kohti maksutta. Sen ylittävästä kirjoita meille.

Maksu ja avaus

Laulun avaamiseen on kaksi tapaa, riippuen siitä kuka maksaa.

Loppuasiakas maksaa

POST /v1/songs/{id}/checkout luo meille maksusivun verkkotunnuksen valuutassa ja maassa tavanomaisilla maksutavoilla. Ohjaat asiakkaan sinne ja saat tapahtuman song.paid, kun maksu menee läpi.

bash Maksusivun luonti
curl https://api.tekoalylaulu.fi/v1/songs/sng_3n8Kd2ZpQv/checkout \
  -H "Authorization: Bearer $SONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "success_url": "https://example.com/thanks?song=sng_3n8Kd2ZpQv",
    "cancel_url": "https://example.com/cart"
  }' 
json Vastaus
{
  "object": "checkout_session",
  "song": "sng_3n8Kd2ZpQv",
  "url": "https://pay.tekoalylaulu.fi/c/cs_live_8Hd2Kq...",
  "amount": 2999,
  "currency": "EUR",
  "expires_at": "2026-09-16T11:41:02Z"
}

Sinä maksat

Koontilaskutteisilla tileillä POST /v1/songs/{id}/unlock avaa laulun heti ja veloittaa tililtä summan 24,99 €. Ilman kiertotietä maksusivun kautta, kätevää kun oma kassa on olemassa.

bash Suora avaus
curl https://api.tekoalylaulu.fi/v1/songs/sng_3n8Kd2ZpQv/unlock \
  -H "Authorization: Bearer $SONG_API_KEY" \
  -X POST

Molemmissa tapauksissa pätee sama käyttöoikeus: ei-yksinomainen mutta nimenomaisesti kaupallinen. Valmiin laulun saa antaa eteenpäin, myydä ja julkaista osana omaa tarjontaa.

Sallitut arvot

Tilaisuuksien, tunnelmien, tyylien, äänien ja kielten listat muuttuvat silloin tällöin. Sen sijaan että kirjoittaisit ne kiinteästi koodiin, kysy GET /v1/options ja pidä vastaus välimuistissa muutaman tunnin.

json Vastaus
{
  "object": "options",
  "language": "fi",
  "occasions": ["birthday", "wedding", "anniversary", "farewell", "funeral",
                "christening", "graduation", "christmas", "declaration", "other"],
  "moods":     ["happy", "warm", "funny", "romantic", "gentle", "epic", "surprise_me"],
  "styles":    ["pop", "rock", "folk", "schlager", "hiphop", "ballad", "country",
                "electronic", "jazz", "childrens", "surprise_me"],
  "voices":    ["female", "male", "duet", "choir", "childrens", "surprise_me"],
  "languages": ["de", "en", "dk", "nl", "it", "se", "fr", "es", "no", "pl", "fi", "is", "jp"]
}

Jokaisen näistä arvoista voi myös jättää pois. Arvo surprise_me ei ole täyte vaan oikea ohje: silloin valitsemme tietoisesti jotain, mikä sopii tilaisuuteen ja yksityiskohtiin.

Webhookit

Anna luonnissa callback_url, niin lähetämme sinne jokaisen tapahtuman POST-kutsuna. Se on suositeltu tie, koska se säästää kyselyn ja odottelun.

TapahtumaTyyppiLaukeaa kun
song.lyrics_readySanoitus on valmis.
song.preview_ready45 sekunnin esikuuntelu on saatavilla.
song.completedKoko äänite on toimitettu.
song.failedTuotanto epäonnistui lopullisesti.
song.regeneratedUudelleenluonti on valmis.
song.paidMaksu on tullut, laulu on avattu.
json Esimerkkisisältö
{
  "id": "evt_5Tb7Rn2WqX",
  "object": "event",
  "type": "song.completed",
  "created_at": "2026-09-16T09:47:35Z",
  "data": {
    "object": {
      "id": "sng_3n8Kd2ZpQv",
      "object": "song",
      "status": "complete",
      "audio_url": "https://cdn.tekoalylaulu.fi/full/sng_3n8Kd2ZpQv.mp3?expires=1789412855&sig=...",
      "...": "..."
    }
  }
}

Allekirjoituksen tarkistus

Jokainen toimitus kuljettaa otsakkeen, jossa on aikaleima ja HMAC-SHA256 aikaleimasta, pisteestä ja raakarungosta. Tarkista se ennen kuin luotat sisältöön, ja hylkää kaikki yli viisi minuuttia vanha.

http Allekirjoitusotsake
X-Song-Signature: t=1789412855,v1=7f2c1d9a4b6e8035c1f7a29d4e5b0c8371a6d2f94e8b3c07a15d9e2f6b4c8a01
python Tarkistus Pythonilla
import hashlib, hmac, os, time
from flask import Flask, request, abort

SECRET = os.environ["SONG_WEBHOOK_SECRET"].encode()
app = Flask(__name__)


@app.post("/hooks/songs")
def hook():
    header = request.headers.get("X-Song-Signature", "")
    parts = dict(p.split("=", 1) for p in header.split(",") if "=" in p)
    timestamp, signature = parts.get("t", ""), parts.get("v1", "")

    if abs(time.time() - int(timestamp or 0)) > 300:
        abort(400)  # older than five minutes, treat as replay

    expected = hmac.new(
        SECRET, (timestamp + "." + request.get_data(as_text=True)).encode(),
        hashlib.sha256,
    ).hexdigest()

    if not hmac.compare_digest(expected, signature):
        abort(400)

    event = request.get_json()
    if event["type"] == "song.completed":
        store(event["data"]["object"])

    return "", 200

Uusinnat

Odotamme 2xx-vastausta kymmenessä sekunnissa. Jos sitä ei tule, yritämme kahdeksan kertaa 24 tunnin aikana kasvavin välein. Toimitukset voivat siis toistua ja harvoin saapua eri järjestyksessä: tee päätepisteestäsi idempotentti ja luota kenttään created_at, älä saapumisaikaan.

Idempotenssi

Jokainen POST ottaa vastaan otsakkeen Idempotency-Key millä tahansa yksilöivällä arvolla, tavallisesti UUID. Jos sama avain palaa 24 tunnin sisällä, palautamme alkuperäisen vastauksen sen sijaan että loisimme toisen laulun.

bash Uusinnan kestävä pyyntö
curl https://api.tekoalylaulu.fi/v1/songs \
  -H "Authorization: Bearer $SONG_API_KEY" \
  -H "Idempotency-Key: 9f1c7c2e-0a3b-4c8d-9e21-5f7a1b6c3d40" \
  -H "Content-Type: application/json" \
  -d '{ "occasion": "birthday", "recipient_name": "Anna", "language": "fi", "details": "..." }' 

Juuri tätä suojaa verkkovirheissä tarvitaan: jos vastaus katoaa ja koodisi toistaa pyynnön, lauluja syntyy silti yksi. Jos lähetät saman avaimen eri rungolla, vastaamme 409 ja virhetyypillä conflict.

Virheet

Virheet tulevat aina samassa muodossa, koneluettavilla kentillä type ja code, luettavalla viestillä ja tarvittaessa kenttäviittauksella. Liitä request_id jokaiseen yhteydenottoon, niin löydämme kutsun lokeista.

json Virheobjekti
{
  "error": {
    "type": "validation_error",
    "code": "details_too_short",
    "message": "details must contain at least 40 characters so the song has something to work with",
    "param": "details",
    "request_id": "req_2Lm9Xc4Kd1"
  }
}
TyyppiHTTPMerkitys
400invalid_requestPyyntö on muodollisesti rikki, esimerkiksi kelvoton JSON tai tuntematon kenttä.
401authentication_errorAvain puuttuu, on vanhentunut tai suljettu.
403permission_errorAvain on voimassa mutta ei avattu tälle verkkotunnukselle tai päätepisteelle.
404not_foundPyydetty tunniste ei kuulu tälle tilille tai ei ole olemassa.
409conflictToimenpide ei sovi tilaan, esimerkiksi perutun laulun avaus.
422validation_errorPyyntö on muodollisesti oikein mutta arvo on käyttökelvoton, esimerkiksi liian lyhyt details.
429rate_limitLiikaa pyyntöjä tai liikaa rinnakkaisia tuotantoja.
500api_errorVirhe meidän päässämme. Yritä uudelleen kasvavin välein.

Koodeilla 429 ja 5xx uusinta kannattaa, mieluiten eksponentiaalisesti kasvavin välein ja ripauksella satunnaisuutta. Muilla 4xx-koodeilla kuin 429 ei kannata: sama pyyntö kaatuu uudelleen.

Rajat

RajaArvoKoskee
60 / minPyyntöjä minuutissa avainta kohti kaikilla päätepisteillä.
10Rinnakkaiset tuotannot. Ylimenevät pyynnöt jäävät jonoon.
64 KBPyynnön rungon suurin sallittu koko.
40 - 4000Merkkejä details-kentässä, vähintään ja enintään.
90Päiviä, jotka säilytämme laulut ja syötteet, sitten ne poistetaan.
24 hAika, jonka idempotenssiavain palauttaa vanhan vastauksen.

Jokainen vastaus kuljettaa ajantasaisen tilanteen otsakkeissa, joten arvailla ei tarvitse.

http Rajaotsakkeet
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1789412880
X-Concurrent-Limit: 10
X-Concurrent-Running: 3

Korkeammat rajat eivät ole ongelma, ne eivät vain ole lähtöasetus. Kun määrä kasvaa, kirjoita kaksi lausetta, niin nostamme niitä.

Versiointi

Pääversio on polussa ja pysyy vakaana. Version v1 sisällä tulee vain lisääviä muutoksia: uusia kenttiä, uusia arvoja listoihin, uusia päätepisteitä. Olemassa olevat kentät eivät katoa eivätkä vaihda merkitystä.

Lisävarmuudeksi voit kiinnittää päivämäärän otsakkeeseen. Ilman otsaketta voimassa on aina uusin käyttäytyminen.

http Version kiinnitys
X-Song-Version: 2026-09-01

Koodisi pitää ohittaa vastausten tuntemattomat kentät, ei kaatua niihin. Se on ainoa oletus, jonka teemme asiakkaista.

Testitila

Avaimet etuliitteellä sk_test_ kulkevat täsmälleen samojen päätepisteiden läpi mutta eivät käynnistä oikeaa tuotantoa eivätkä maksa mitään. Muutamassa sekunnissa saat kiinteän esittelysanoituksen ja esittelyäänitteen, ja jokainen objekti kuljettaa livemode: false.

Näin myös ikävät tapaukset voi harjoitella. Tietyt nimet kentässä recipient_name pakottavat tietyn lopputuloksen: test_fail johtaa tilaan failed, test_slow noin kymmenen minuutin tuotantoon, test_ratelimit vastaukseen 429. Virheenkäsittelyn voi siis testata odottamatta oikeaa häiriötä.

Webhookit toimivat myös testitilassa, samalla allekirjoitusmekanismilla ja omalla salaisuudellaan.

Oikeudet ja tiedot

Avauksen myötä saat ei-yksinomaisen mutta nimenomaisesti kaupallisen käyttöoikeuden valmiiseen lauluun. Saat antaa sen eteenpäin, myydä sen, esittää sen julkisesti ja upottaa sen omaan tuotteeseesi. Ei-yksinomainen tarkoittaa, että pidätämme oikeuden käyttää äänitettä myös itse, esimerkiksi esimerkkinä.

Tekoälyn tekemän musiikin tekijänoikeuksiin monilla oikeusjärjestyksillä ei ole vielä lopullista vastausta. Käyttöoikeuden takaamme sopimuksella, mutta emme voi vakuuttaa, että äänitteeseen syntyy erillinen, kolmansia sitova tekijänoikeus. Sitä tarvitsevan kannattaa selvittää asia etukäteen.

Syötteet ja valmiit laulut säilyvät 90 päivää, sitten ne poistetaan. Yksittäisen laulun aiempaan poistoon on DELETE /v1/songs/{id}. Kentän details tietoja käytämme vain tämän yhden laulun tuottamiseen, emme koskaan omien mallien opettamiseen.

Jos välität meille asiakkaidesi tietoja, sinä olet rekisterinpitäjä ja me käsittelijä. Käsittelysopimus on saatavilla pyynnöstä.

Tuki

Kysymykset, korkeammat rajat, käsittelysopimus, erikoistapaukset: songs@maxkuch.com. Teknisissä ongelmissa liitä mukaan request_id virhevastauksesta, niin löydämme kutsun heti.

Tekoälyagenttien integraatiolle on lisäksi Model Context Protocol -palvelin, kuvattuna osoitteessa /mcp/, samoilla avaimilla kuin REST-rajapinta.

Hae käyttöoikeutta

Avaimet jaetaan käsin. Lyhyt viesti hankkeestasi, arvioidusta määrästä ja kielistä riittää, ja avaus vie yleensä yhden arkipäivän.

Hae käyttöoikeutta