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
Avaimet jaetaan käsin. Lyhyt viesti hankkeestasi, arvioidusta määrästä ja kielistä riittää, ja avaus vie yleensä yhden arkipäivän.
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.
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:
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.
Jokainen pyyntö kuljettaa avaimen Authorization-otsakkeessa bearer-tunnisteena. Ilman kelvollista otsaketta vastaus on 401 ja virhetyyppi authentication_error.
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.
Laulun luonti on yksi kutsu. Vastaus tulee heti ja sisältää tunnisteen tilassa queued. Kaikki muu tapahtuu taustalla.
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.
| Metodi | Polku | Mihin se on |
|---|---|---|
| POST | /v1/songs | Tilaa uusi laulu. |
| GET | /v1/songs/{id} | Hae laulu kaikkine ajantasaisine kenttineen. |
| GET | /v1/songs | Listaa tilin laulut suodattimin ja sivutuksin. |
| GET | /v1/songs/{id}/lyrics | Hae pelkkä sanoitus tavallisena tekstinä. |
| GET | /v1/songs/{id}/audio | Allekirjoitettu latauslinkki esikuunteluun tai koko äänitteeseen. |
| POST | /v1/songs/{id}/regenerate | Käynnistä maksuton uudelleenluonti. |
| POST | /v1/songs/{id}/checkout | Luo maksusivu loppuasiakkaalle. |
| POST | /v1/songs/{id}/unlock | Avaa laulu suoraan ja veloita tililtä. |
| GET | /v1/options | Kaikki sallitut arvot tilaisuudelle, tunnelmalle, tyylille, äänelle ja kielelle. |
| GET | /v1/account | Saldo, rajat ja avatut verkkotunnukset. |
| DELETE | /v1/songs/{id} | Peru laulu, joka ei ole vielä valmis. |
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ä | Tyyppi | Kuvaus |
|---|---|---|
| string | pakollinen | Tilaisuus. Sallitut arvot tulevat päätepisteestä /v1/options. |
| string | pakollinen | Laulun kohteen nimi. Sitä käytetään sanoituksessa. |
| string | pakollinen | Konkreettisia yksityiskohtia henkilöstä, 40 - 4000 merkkiä. Tämä kenttä ratkaisee laadun. |
| string | valinnainen | Tilaajan ja saajan suhde, esimerkiksi sisko, työkaveri, puoliso. |
| string | valinnainen | Kieli, jolla lauletaan. Oletus on fi. |
| string | valinnainen | Perustunnelma. Ilman valintaa valitsemme tilaisuuteen sopivan. |
| string | valinnainen | Musiikkityyli. Ilman valintaa valitsemme tilaisuuteen ja tunnelmaan sopivan. |
| string | valinnainen | Laulajan ääni. Ilman valintaa valitsemme tilaisuuteen sopivan. |
| string | valinnainen | Viesti, jonka pitää kuulua laulussa. |
| string | valinnainen | Vapaa teksti kaikelle, mikä ei sovi muualle, esimerkiksi tempotoiveet. |
| string | valinnainen | HTTPS-osoite, johon tapahtumat lähetetään. |
| object | valinnainen | Vapaat avain-arvo-parit, enintään 20. Palaavat muuttumattomina. |
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.
Jokainen yksittäisen laulun palauttava päätepiste palauttaa saman objektin. Kentät, joita ei vielä ole, ovat null ja täyttyvät tuotannon edetessä.
{
"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ä | Tyyppi | Kuvaus |
|---|---|---|
| string | valinnainen | Yksilöivä tunniste, alkaa aina sng_. |
| string | valinnainen | Tuotannon nykyinen vaihe, katso seuraava luku. |
| string | valinnainen | Koko sanoitus säkeistö- ja kertosäemerkintöineen. Maksuton, myös ilman maksua. |
| string | valinnainen | Ensimmäiset 45 sekuntia MP3-muodossa. Aina saatavilla, ilman maksua. |
| string | valinnainen | Koko äänite MP3-muodossa, allekirjoitettu ja voimassa 24 tuntia. Täyttyy vasta maksun jälkeen. |
| integer | valinnainen | Valmiin äänitteen pituus sekunteina, tavallisesti 120 - 240. |
| boolean | valinnainen | Onko laulu avattu. |
| object | valinnainen | Summa valuutan pienimpänä yksikkönä ja valuuttakoodi, tässä 24,99 €. |
| object | valinnainen | Se, minkä annoit luonnissa, muuttumattomana. |
| boolean | valinnainen | false, jos pyyntö tehtiin testiavaimella. |
{
"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
}
Laulu kulkee vaiheet tässä järjestyksessä. Taaksepäin ei mennä, ja complete, failed ja cancelled ovat lopputiloja.
| Tila | Arvo | Merkitys |
|---|---|---|
| queued | Otettu vastaan, odottaa vapaata paikkaa tuotannossa. Yleensä muutama sekunti. | |
| writing_lyrics | Sanoitusta kirjoitetaan. | |
| lyrics_ready | Sanoitus on valmis ja haettavissa. Tämä on ensimmäinen vaihe; koko tuotanto kestää yleensä kahdesta kolmeen minuuttia. | |
| generating_audio | Laulu, sovitus ja miksaus ovat tuotannossa. | |
| preview_ready | Ensimmäiset 45 sekuntia on saatavilla ja koko tiedosto valmis. | |
| complete | Maksettu ja toimitettu kokonaisuudessaan. | |
| failed | Tuotanto epäonnistui lopullisesti. Mitään ei veloiteta, error-kenttä kertoo syyn. | |
| cancelled | Peruttu 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.
GET /v1/songs/{id} palauttaa laulun nykytilan. Päätepiste on kevyt ja kestää sekunnin välein kyselyn, kunhan pysyt taajuusrajan sisällä.
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.
{
"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 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.
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.
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.
Laulun avaamiseen on kaksi tapaa, riippuen siitä kuka 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.
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"
}'
{
"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"
}
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.
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.
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.
{
"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.
Anna luonnissa callback_url, niin lähetämme sinne jokaisen tapahtuman POST-kutsuna. Se on suositeltu tie, koska se säästää kyselyn ja odottelun.
| Tapahtuma | Tyyppi | Laukeaa kun |
|---|---|---|
| song.lyrics_ready | Sanoitus on valmis. | |
| song.preview_ready | 45 sekunnin esikuuntelu on saatavilla. | |
| song.completed | Koko äänite on toimitettu. | |
| song.failed | Tuotanto epäonnistui lopullisesti. | |
| song.regenerated | Uudelleenluonti on valmis. | |
| song.paid | Maksu on tullut, laulu on avattu. |
{
"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=...",
"...": "..."
}
}
}
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.
X-Song-Signature: t=1789412855,v1=7f2c1d9a4b6e8035c1f7a29d4e5b0c8371a6d2f94e8b3c07a15d9e2f6b4c8a01
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
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.
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.
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 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.
{
"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"
}
}
| Tyyppi | HTTP | Merkitys |
|---|---|---|
| 400 | invalid_request | Pyyntö on muodollisesti rikki, esimerkiksi kelvoton JSON tai tuntematon kenttä. |
| 401 | authentication_error | Avain puuttuu, on vanhentunut tai suljettu. |
| 403 | permission_error | Avain on voimassa mutta ei avattu tälle verkkotunnukselle tai päätepisteelle. |
| 404 | not_found | Pyydetty tunniste ei kuulu tälle tilille tai ei ole olemassa. |
| 409 | conflict | Toimenpide ei sovi tilaan, esimerkiksi perutun laulun avaus. |
| 422 | validation_error | Pyyntö on muodollisesti oikein mutta arvo on käyttökelvoton, esimerkiksi liian lyhyt details. |
| 429 | rate_limit | Liikaa pyyntöjä tai liikaa rinnakkaisia tuotantoja. |
| 500 | api_error | Virhe 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.
| Raja | Arvo | Koskee |
|---|---|---|
| 60 / min | Pyyntöjä minuutissa avainta kohti kaikilla päätepisteillä. | |
| 10 | Rinnakkaiset tuotannot. Ylimenevät pyynnöt jäävät jonoon. | |
| 64 KB | Pyynnön rungon suurin sallittu koko. | |
| 40 - 4000 | Merkkejä details-kentässä, vähintään ja enintään. | |
| 90 | Päiviä, jotka säilytämme laulut ja syötteet, sitten ne poistetaan. | |
| 24 h | Aika, jonka idempotenssiavain palauttaa vanhan vastauksen. |
Jokainen vastaus kuljettaa ajantasaisen tilanteen otsakkeissa, joten arvailla ei tarvitse.
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ä.
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.
X-Song-Version: 2026-09-01
Koodisi pitää ohittaa vastausten tuntemattomat kentät, ei kaatua niihin. Se on ainoa oletus, jonka teemme asiakkaista.
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.
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ä.
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.
Avaimet jaetaan käsin. Lyhyt viesti hankkeestasi, arvioidusta määrästä ja kielistä riittää, ja avaus vie yleensä yhden arkipäivän.