Odesli hat sein Entwickler-API geschlossen, und was das für uns bedeutet

musiccloud, Marktbeobachtung und Standortbestimmung
4. September 2026
PAP-017

Songlink/Odesli war jahrelang die Standardantwort auf die Frage, wie man einen Song auf allen Diensten findet. Zum 31. Juli 2026 ist das öffentliche Entwickler-API geschlossen worden, und es antwortet heute anders, als die Ankündigung es versprochen hat. Die Website läuft davon unberührt weiter, samt Freitextsuche und Live-Ergebnissen. Dieses Paper vergleicht deshalb nicht zwei Produkte, sondern zwei Angebote an Entwickler, und es sagt an jeder Stelle, worauf sich eine Aussage stützt. Vier der Befunde sprechen gegen uns.

Inhalt

  1. Gegenstand und Abgrenzung
  2. Was abgeschaltet wurde
  3. Was heute zurückkommt
  4. Was weiterhin läuft
  5. Der Vergleich auf Entwicklerebene
  6. Wo wir nicht besser sind
  7. Was aus diesem Paper nicht folgt
  8. Was daraus folgt
  9. Grundlage

Danach folgt der Anhang mit den geprüften Belegen und den Befehlen, mit denen sich jede Zahl nachstellen lässt.

1. Gegenstand und Abgrenzung

Unter dem Namen Odesli stehen drei verschiedene Dinge, und sie sind unterschiedlich zugänglich, unterschiedlich dokumentiert und unterschiedlich verbindlich. Wer sie in einem Satz zusammenfasst, sagt fast zwangsläufig etwas Falsches. Dieses Paper trennt sie deshalb von Anfang an und vergleicht ausschliesslich die erste Ebene.

Tabelle 1 Die drei Ebenen und ihr Zustand am 4. September 2026
EbeneAdresseDokumentiertZustand
Öffentliches Entwickler-APIapi.song.link/v1-alpha.1ja, als Notion-Seitegeschlossen, antwortet mit 401
Backend der eigenen Websiteapi.odesli.conein, in keiner auffindbaren Dokumentationantwortet ohne Schlüssel
Die Website selbstsong.link, leitet auf odesli.coentfälltläuft unverändert

Verglichen wird die erste Ebene, weil nur sie ein Angebot an Entwickler ist. Sie war dokumentiert, sie hatte Nutzungsbedingungen, eine Versionierung und eine Zusage über Änderungen, und auf so etwas baut man ein Produkt. Die zweite Ebene ist das Innere einer fremden Website. Sie ist erreichbar, aber sie ist niemandem versprochen, sie kann sich morgen ändern, und wer darauf baut, baut auf etwas, das ihm nicht angeboten wurde. Sie kommt in diesem Paper nur dort vor, wo ausdrücklich dabeisteht, dass es um sie geht.

Die dritte Ebene ist für den Vergleich unerheblich und für das Verständnis wesentlich, weil sie erklärt, warum Odesli für die meisten Menschen weiterhin funktioniert und die Schliessung trotzdem einschneidend ist.

Wofür dieses Paper gedacht ist

Aus diesen Befunden soll ein öffentlicher Text entstehen. Was hier steht, ist deshalb auch dort ausgeschrieben, wo es gegen uns spricht, und jede Aussage trägt die Ebene, auf der sie gilt. Die erste Gegenprobe eines Lesers ist ein Aufruf mit curl oder ein Besuch auf song.link, und beide muss der Text aushalten.

2. Was abgeschaltet wurde

Songlink/Odesli gehört seit August 2021 zu Linktree, und die API-Dokumentation liegt entsprechend in einem Notion-Bereich von Linktree. Sie trägt einen Hinweis, der den gesamten Namensraum v1-alpha.1 für stillgelegt erklärt, mit dem 31. Juli 2026 als Abschalttermin. Danach, so die Ankündigung, sollen alle Endpunkte dieses Namensraums mit 410 Gone antworten.

Der Zugang ist damit nicht enger, sondern zu. Die Seite sagt, dass keine API-Schlüssel mehr ausgegeben werden. Wer weiterarbeiten will, füllt ein Formular aus und muss einen dauerhaften, berechtigten Bedarf darlegen. Die Landingpages unter song.link und album.link sind ausdrücklich ausgenommen.

Was dort geschlossen wurde, war ein einziger Endpunkt, GET /links. Er nahm entweder eine URL oder ein Tripel aus Plattform, Typ und Kennung, kannte als Typ song und album, und war ohne Schlüssel auf zehn Anfragen pro Minute je Adresse begrenzt. Ein Schlüssel war optional und hob die Grenze.

3. Was heute zurückkommt

Angekündigt war 410 Gone. Geliefert wird etwas anderes. Drei Anfrageformen, am 4. September 2026 gegen den laufenden Dienst gestellt, antworten gleich.

Tabelle 2 Anfragen an das Entwickler-API, gemessen am 4. September 2026
AnfrageStatusRumpf
Spotify-URI als url401PUBLIC_API_ACCESS_DEPRECATED
Apple-Music-URL als url401PUBLIC_API_ACCESS_DEPRECATED
platform plus type plus id401PUBLIC_API_ACCESS_DEPRECATED

Der Unterschied zwischen 401 und 410 ist für die betroffene Software erheblich. Ein 410 sagt einem Client, dass diese Ressource endgültig fort ist, und ein sorgfältig geschriebener Client hört daraufhin auf zu fragen. Ein 401 sagt, dass die Anmeldung fehlt, und darauf ist jede Wiederholungslogik ausgelegt: sie versucht es erneut. Der Fehlercode im Rumpf steht in keiner auffindbaren Dokumentation.

4. Was weiterhin läuft

Dieser Abschnitt steht hier, damit der Vergleich in Abschnitt 5 nicht mehr behauptet, als er trägt.

song.link leitet auf odesli.co weiter, und dort steht ein Suchfeld mit der Aufforderung, zu suchen oder eine Adresse einzufügen. Eine Freitextsuche liefert dort Ergebnisse, während man tippt. Eine Seite zu einer aufgelösten Aufnahme, abgerufen am 4. September 2026, führte siebzehn Einträge auf: Amazon Music, Anghami, Apple Music, Audiomack, Audius, Boomplay, Deezer, iTunes, Napster, Pandora, SoundCloud, Spinrilla, Spotify, Tidal, Yandex, YouTube und YouTube Music.

Die Suche wird von der zweiten Ebene bedient, also vom Backend der Website unter api.odesli.co. Dieser Endpunkt antwortete am 4. September 2026 ohne Schlüssel. Er ist in keiner Dokumentation beschrieben, die sich finden liess, und er ist damit kein Angebot an Entwickler, sondern das Innere einer fremden Anwendung.

Für einen Menschen mit einem Browser hat sich also nichts geändert. Für jedes Programm, das auf dem dokumentierten Weg gebaut hat, alles.

5. Der Vergleich auf Entwicklerebene

Alle Aussagen dieses Abschnitts beziehen sich auf das, was Entwicklern angeboten wurde und wird, also auf Ebene eins gegen unser eigenes API. Wo eine Aussage aus der Dokumentation stammt und nicht aus einer Messung, steht das dabei.

5.1 Ein Schlüssel ist zu bekommen

Das ist der Punkt, auf den es kurzfristig ankommt. Bei Odesli steht am Ende ein Formular und die Prüfung, ob der Bedarf berechtigt und dauerhaft ist. Bei uns entsteht jede Registrierung sofort, ohne dass ein Mensch dazwischensteht, und der Plan ist bis auf Weiteres kostenlos. Das ist die Entscheidung aus PAP-MC-003, Abschnitt 1.1: Missbrauch wird über Kontingente und über den Entzug einzelner Zugangsdaten begrenzt statt über eine Prüfung vorab.

5.2 Wir sagen, wie sicher ein Treffer ist

Die dokumentierte Antwort des Entwickler-API führt je Plattform eine Adresse. Ob ein Treffer über eine eindeutige Kennung gefunden oder über eine Textsuche geschätzt wurde, geht aus ihr nicht hervor, und ein Client kann es nicht unterscheiden. Die Antwortbeschreibung führt kein Feld, das darüber Auskunft gäbe.

Jeder Treffer bei uns trägt zwei Felder dafür: matchMethod nennt den Weg, confidence den Grad. Bei dem Titel, den Odeslis eigene Dokumentation als Beispiel führt, kamen am 4. September 2026 fünf Treffer über die ISRC mit Konfidenz 1 zurück und vier über eine Suche mit Werten zwischen 0,5 und 1. Ein Client, der nur Sicheres zeigen will, filtert und bekommt die fünf. Abschnitt 6.3 hält fest, warum diese Skala noch nicht hält, was sie verspricht.

5.3 Andere Weltregionen

Bei uns waren am 4. September 2026 achtzehn Dienste aktiv, abgefragt über unseren öffentlichen Endpunkt für aktive Dienste. Odeslis dokumentierte Plattformliste zählt einundzwanzig Kennungen, von denen mehrere denselben Dienst bedienen, weil ein Apple-Treffer zugleich itunes und appleMusic trägt und ein YouTube-Treffer zugleich youtube und youtubeMusic. Zusammengefasst bleiben siebzehn Dienste, und die Seite aus Abschnitt 4 führte dieselbe Zahl an Einträgen.

Die Zahlen liegen also nah beieinander, die Zusammensetzung nicht.

Tabelle 3 Dienste, die nur einer von beiden auflöst
Nur bei unsNur bei Odesli
QobuzAmazon Music und Amazon Store
NetEase Cloud Music (China)Yandex Music
QQ Music (China)Anghami
Melon (Korea)Napster
Bugs! (Korea)Spinrilla
JioSaavn (Indien)
Beatport

Amazon ist der einzige Eintrag in der rechten Spalte, den ich für einen echten Verlust halte. Die Dokumentation führt zusätzlich google und googleStore für Google Play Music, das Ende 2020 abgeschaltet wurde. Auf der abgerufenen Seite erscheinen beide nicht, es ist also die Dokumentation, die veraltet ist, und nicht das Produkt.

5.4 Angaben zur Aufnahme

Die linke Spalte beschreibt die dokumentierte Antwort des Entwickler-API, nicht das, was die Website ihrem eigenen Client liefert. Der Unterschied ist erheblich und steht in Abschnitt 7.

Tabelle 4 Was die Antwort über die Aufnahme selbst hergibt
FeldOdesli, dokumentiertmusiccloud, gemessen
Titel und Künstlerjaja
Titelbildjaja
ISRCneinja
Albumnameneinja
Spieldauerneinja
Erscheinungsdatumneinja
Hörprobeneinja
Explicit-Kennzeichenneinja
Sicherheit des Treffersneinja

5.5 Anfrageformen

Das Entwickler-API kannte eine Anfrageform: eine Adresse oder ein Tripel aus Plattform, Typ und Kennung. Wer eine Aufnahme nur dem Namen nach kannte, konnte sie darüber nicht finden. Freitextsuche gehörte nicht zu dem, was Entwicklern angeboten wurde, obwohl die Website sie kann und immer konnte.

Unser Resolve nimmt zusätzlich freien Text sowie eine strukturierte Suche über title:, artist: und album:, und wo mehrere Aufnahmen in Frage kommen, kann ein Client sich die Kandidaten geben lassen und auswählen.

5.6 Partnerkennzeichen

In der dokumentierten Beispielantwort hängt an der Amazon-Adresse ein Partnerkennzeichen und an den beiden Apple-Adressen ebenfalls eines. Wer solche Adressen im eigenen Produkt anzeigt, verdient damit für den Anbieter mit, und in der Dokumentation steht das an keiner Stelle. Ob heute noch so ausgeliefert würde, lässt sich nicht prüfen, weil das API nicht mehr antwortet.

Eine Suche über unser gesamtes Repository nach Partnerkennzeichen und Affiliate-Parametern findet nichts. Unsere Apple-Adresse zum selben Titel trägt keine angehängten Parameter.

5.7 Ein maschinenlesbarer Vertrag

Das Entwickler-API war eine Notion-Seite ohne maschinenlesbare Beschreibung. Wir veröffentlichen ein OpenAPI-Dokument nach 3.1.0 unter einer festen Adresse, aus dem sich ein Client in jeder Sprache erzeugen lässt.

6. Wo wir nicht besser sind

Nachtrag vom 6. September 2026: die vier Befunde sind behoben

Die vier Abschnitte darunter beschreiben den Stand vom 4. September und bleiben so stehen, weil ein Befund einen Zeitpunkt festhält. Alle vier sind inzwischen umgesetzt und gegen die Produktion nachgemessen.

Zwei Dinge kamen dabei heraus, die niemand geplant hatte: der Herkunftslink war in allen drei Resolvern als Fundmethode etikettiert, die es nie gab, und der schlüssellose Resolve wies Album- und Artist-Adressen ab. Beides ist mit behoben.

6.1 Wir sind langsam

Das ist der Befund, der einem öffentlichen Text am gefährlichsten wird, weil ihn jeder Leser in fünf Sekunden nachmisst. Ein Resolve dauert bei uns drei bis fünf Sekunden, auch dann, wenn derselbe Titel bereits aufgelöst und gespeichert ist.

Tabelle 5 Gemessene Antwortzeiten am 4. September 2026
AufrufSekunden
Resolve, Titel zum ersten Mal4,74
Resolve, derselbe Titel erneut3,52
Resolve, derselbe Titel ein drittes Mal2,90
Resolve, zweiter Titel zum ersten Mal5,32
Resolve, zweiter Titel erneut3,44
Share-Abruf desselben Datensatzes0,10

Die letzte Zeile ist der Massstab. Derselbe Datensatz, aus derselben Datenbank, über den Share-Endpunkt gelesen, braucht ein Zehntel einer Sekunde. Ein wiederholter Resolve auf eine bereits bekannte Adresse braucht das Dreissigfache. Wofür diese Zeit verbraucht wird, ist mit dieser Messung nicht bestimmt; dass sie verbraucht wird, schon. Zum Vergleich antwortete Odeslis Website-Backend auf eine Freitextsuche in 1,20 Sekunden, wobei das eine Suche ist und kein Resolve, also keine gleichartige Aufgabe.

6.2 Ein Treffer, der auf eine Suchseite zeigt

Bei dem Testtitel liefert unser YouTube-Treffer die Adresse music.youtube.com/search?q=Kid+Cudi+Kitchen in demselben Feld, in dem sonst die Adresse der Aufnahme steht. Das ist keine Aufnahme, das ist eine Suche danach. Ein Client, der das Feld anzeigt, schickt seinen Nutzer auf eine Ergebnisliste. Bei einem zweiten Titel liefert derselbe Adapter eine richtige Videoadresse, es ist also ein Rückfall und kein Dauerzustand. Odeslis Dokumentation führt für genau diesen Titel eine Videoadresse.

6.3 Konfidenz 1 aus einer Textsuche

Beim Testtitel kommt der NetEase-Treffer mit matchMethod: search und confidence: 1 zurück, beim zweiten Titel mit 0,968. Eine Eins aus einer Textsuche steht damit gleichauf mit einer Eins aus einem ISRC-Abgleich, obwohl das zwei verschiedene Grade von Gewissheit sind. Solange wir die Konfidenz als Vorzug führen, muss die Skala über alle Adapter dasselbe bedeuten.

6.4 Das Portal bietet SDKs an, die es nicht gibt

In der API-Referenz des Portals steht ein Navigationseintrag "SDK downloads". Sein Anker hat im gesamten Portal kein Ziel. Daneben liegt ein eingecheckter Katalog, der fünf Clients für TypeScript, Python, Swift, PHP und Go benennt, mitsamt Paketnamen. Keines dieser Pakete existiert: npm, PyPI und Packagist antworten mit 404, und unter unserem npm-Namensraum liegt nichts. Was es gibt, ist eine GitHub-Freigabe vom 20. Juli 2026 mit fünf Archiven, und nichts im Repository erzeugt den Katalog noch.

Für einen öffentlichen Text heisst das: wir werben nicht mit SDKs. Der veröffentlichte Vertrag aus Abschnitt 5.7 trägt das Argument allein.

7. Was aus diesem Paper nicht folgt

Dieser Abschnitt zieht die Grenzen der Aussagekraft, damit der öffentliche Text sie nicht überschreitet.

Es folgt nicht, dass Odesli keine Freitextsuche kann. Es kann sie, auf der Website, und konnte sie immer. Nicht anbieten und nicht können sind zwei verschiedene Dinge, und nur das Erste ist hier belegt.

Es folgt nicht, dass Odesli weniger über eine Aufnahme weiss als wir. Tabelle 4 vergleicht die dokumentierte Antwort des Entwickler-API. Das Backend der Website liefert ihrem eigenen Client mehr, unter anderem ISRC, Spieldauer, Erscheinungsdatum und ein Explicit-Kennzeichen, gemessen am 4. September 2026. Das Entwickler-API bot also weniger, als das Haus selbst zur Verfügung hatte. Wer aus Tabelle 4 schliesst, Odesli habe diese Daten nicht, liest sie falsch.

Es folgt nichts über die Qualität ihrer Treffer. Ein Vergleich dazu bräuchte eine Stichprobe über viele Titel und einen Massstab dafür, was ein richtiger Treffer ist. Beides gibt es hier nicht. Die Berichte über schlechte Ergebnisse, die uns erreichen, sind Erzählungen aus dem Umfeld und in diesem Paper keine Belege.

Es folgt nichts darüber, wie viele Entwickler betroffen sind. Das ist von aussen nicht messbar.

Es folgt nicht, dass ihre Adressen heute Partnerkennzeichen tragen. Belegt ist allein die Beispielantwort in der Dokumentation.

8. Was daraus folgt

Wer seit dem 31. Juli auf einen 401 läuft, sucht jetzt einen Ersatz und entscheidet in den nächsten Wochen. Das bestimmt die Reihenfolge: Sichtbarkeit und Einstieg gehen vor der Bezahlkette, weil ein kostenloser Plan niemanden kostet und ein fehlender Einstieg jeden.

Eine Umstiegsseite. Sie bildet die dokumentierte Antwortform des geschlossenen API auf unsere ab, Feld für Feld, und erklärt den Wechsel in einem Absatz. Sie ist das Einzige aus diesem Paper, das noch aussteht, und sie ist Produkttext, der phranck gehört.

Die vier Befunde aus Abschnitt 6 sind erledigt, wie der Kasten dort im Einzelnen sagt. Was sie gemeinsam hatten, ist der Grund, sie vor allem anderen zu machen: jeder von ihnen war in einem einzigen Aufruf nachprüfbar, und ein öffentlicher Text hätte keinen davon überlebt.

9. Grundlage

Anhang

Die geprüften Belege und die Befehle, mit denen sich jede Zahl nachstellen lässt. Für den Text selbst braucht man das hier nicht.

A. Geprüfte Belege

Alle Aussagen dieses Papers, geprüft am 4. September 2026. Die Spalte Ebene verweist auf Tabelle 1.

Tabelle 6 Aussagen, ihre Ebene und ihr Beleg
AussageEbeneBeleg
Abschaltung zum 31. Juli 2026, angekündigt mit 4101Abschaltungshinweis auf der Dokumentationsseite
Keine Schlüssel mehr, Freischaltung über ein Formular1derselbe Hinweis
Drei Anfrageformen antworten mit 4011eigene Abrufe gegen api.song.link/v1-alpha.1/links
Ein Endpunkt, Typen song und album, ohne Schlüssel 10 pro Minute1Abschnitte "GET /links endpoint", "Query Params" und "Rate Limiting"
Einundzwanzig Plattformkennungen, Paare auf denselben Dienst1Typ Platform; isrc und upc sind Kennungsschemata und nicht mitgezählt
Keine Angabe zur Sicherheit eines Treffers1Typ entitiesByUniqueId und linksByPlatform, kein entsprechendes Feld
Partnerkennzeichen in der Beispielantwort1Abschnitt "Example Response", Einträge amazonStore, appleMusic, itunes
Dokumentation als Notion-Seite ohne maschinenlesbare Beschreibung1die Seite selbst
Suche und Resolve über api.odesli.co, ohne Schlüssel erreichbar2Adressen aus den JavaScript-Bündeln von odesli.co, danach eigene Abrufe
Die Suchantwort trägt ISRC, Spieldauer, Erscheinungsdatum, Explicit-Kennzeichen2eigener Abruf von /search-results
song.link leitet auf odesli.co, Suchfeld vorhanden3Abruf der Startseite, Platzhalter "Search or paste URL"
Siebzehn Einträge auf einer aufgelösten Seite, ohne Google Play3Abruf von song.link/us/i/1443109064
Landingpage antwortet mit 2003derselbe Abruf
Achtzehn Dienste bei uns aktiv4Abruf von api.musiccloud.io/api/v1/services/active
Einundzwanzig Resolve-Adapter im Build, MusicBrainz standardmässig aus4apps/backend/src/services/plugins/registry.ts, Feld PLUGINS, plus defaultEnabled je Manifest
Discogs und Last.fm lösen nicht auf, sie reichern an4beide fehlen in PLUGINS; discogs-enrich.ts und lastfm/artist-info.ts
Jeder Treffer trägt confidence und matchMethod4Live-Resolve, Felder je Eintrag in links
Angaben zur Aufnahme bei uns4Feld track derselben Antwort
Keine Affiliate-Parameter im Repository4Suche über apps und packages, kein Treffer
OpenAPI 3.1.0 veröffentlicht, zwölf Pfade4Abruf von api.musiccloud.io/docs/json
Antwortzeiten4eigene Abrufe, Tabelle 5
YouTube-Treffer auf eine Suchseite4Live-Resolve des Testtitels, Eintrag youtube
NetEase mit Konfidenz 1 aus einer Suche4dieselbe Antwort, Eintrag netease
Toter Navigationseintrag "SDK downloads"4ApiReferenceNav.astro, Anker ohne Ziel im gesamten Portal
Keines der fünf SDK-Pakete existiert4npm, PyPI und Packagist antworten mit 404
Der Katalog wird von nichts mehr erzeugt4Suche nach sdk-catalog über Anwendungen, Pakete und Skripte

Ebene 4 steht für unser eigenes Angebot und ergänzt die drei aus Tabelle 1.

B. Wie sich das nachstellen lässt

Der Testtitel ist derselbe, den Odeslis Dokumentation als Beispiel führt, damit der Vergleich an einer Aufnahme hängt.

Tabelle 7 Befehle hinter den Messungen
WasBefehl
Entwickler-API, Ebene 1curl -i "https://api.song.link/v1-alpha.1/links?url=spotify%3Atrack%3A0Jcij1eWd5bDMU5iPbxe2i&userCountry=DE"
Website-Backend, Ebene 2curl -H "x-lt-caller: song.link/web-client" "https://api.odesli.co/search-results?providers=spotify&query=bohemian%20rhapsody&type=song&userCountry=DE"
Aufgelöste Seite, Ebene 3curl -L "https://song.link/us/i/1443109064"
Unser Resolvecurl "https://api.musiccloud.io/api/v1/resolve?query=https%3A%2F%2Fopen.spotify.com%2Ftrack%2F0Jcij1eWd5bDMU5iPbxe2i"
Antwortzeitcurl -o /dev/null -w '%{time_total}\n' <Adresse>
Aktive Dienstecurl "https://api.musiccloud.io/api/v1/services/active"
Veröffentlichter Vertragcurl "https://api.musiccloud.io/docs/json"