Der TinyURL-Migrations-Importer nimmt ein API-Token, eine Elido-Ziel-Domain und eine Konfliktstrategie entgegen und kopiert Ihre TinyURL-Links dann als einen Hintergrund-Job nach Elido. Er hat einen gravierenden bekannten Fehler: Er ruft GET /aliases auf api.tinyurl.com auf, und dieser Pfad steht nicht in der veröffentlichten API von TinyURL. Dieser Beitrag behandelt, was der Importer tut, was wir geprüft haben und was nicht.
Wenn Sie die Anleitung zur Planung eines Umzugs weg von TinyURL suchen (was sich umleiten lässt, CSV-Zuordnung, Cutover-Checkliste), lesen Sie Von TinyURL migrieren. Dies hier ist die Engineering-Seite.
Der bekannte Fehler
Der Seitenabruf des Importers baut diese Anfrage:
GET https://api.tinyurl.com/aliases?page=1&per_page=100
Authorization: Bearer <token>
und erwartet als Antwort {"data": [{alias, url, title, tags}], "meta": {"total", "has_more"}}.
Die OpenAPI-Spezifikation von TinyURL (abgerufen am 2026-10-02) definiert keinen Pfad /aliases. Aufgelistet wird mit GET /urls/{type}, wobei type entweder available oder archived ist, mit optionalen Filtern from, to und search (mit dem Präfix alias: oder tag:). Die Spezifikation definiert weder Parameter page oder per_page noch Rate Limits. Alias-Operationen liegen unter /alias/{domain}/{alias}.
Der Paginierungsvertrag in unserem Code stammt also nie von TinyURL. Unser Unit-Test liefert eine handgeschriebene Antwort in dieser Form aus und besteht, was nur beweist, dass der Parser zu unserer Annahme passt, und nichts über TinyURL aussagt. Wir haben den Importer nie gegen ein Live-TinyURL-Konto laufen lassen, weil das ein Token eines kostenpflichtigen Plans braucht. Bis wir das tun, planen Sie keine Migration um ihn herum. Die Korrektur wird in unserem internen Backlog verfolgt: auf /urls/available umstellen (und /urls/archived hinter einem Flag), über from/to-Fenster paginieren, defensiv parsen und gegen eine echte aufgezeichnete Antwort testen. Ob die echte Antwort eine Liste oder ein einzelnes Objekt enthält, lässt die Spezifikation offen.
Was der Worker tut, nachdem er eine Seite erhalten hat
Die Integrationsseite in einem DEMO-Workspace mit synthetischen Daten. Von hier aus wird die TinyURL-Migration gestartet.
Alles nach dem HTTP-Aufruf ist unabhängig von der Endpunktfrage. Diesen Teil können wir aus dem Code belegen.
- Start.
POSTmittoken,target_domain_idund optionalemconflict_strategy. Der Handler weist ein leeres Token, eine fehlende Domain und jede Strategie außerhalb vonsuffix,skip,failab, antwortet dann mit202samt Job und führt den Worker in einer vom Request abgekoppelten Hintergrund-Goroutine aus. - Pro Link. Eine Zeile ohne URL oder ohne Alias zählt mit einem Grund als fehlgeschlagen. Andernfalls wird der Alias zum Slug, Ziel und Titel werden kopiert (Titel auf 200 Zeichen gekürzt), und Tags werden mit angehängtem
imported:tinyurlkopiert. - Fortschritt. Zähler werden alle 50 Links in die Job-Zeile geschrieben. Pro Job werden höchstens 1.000 Fehlerzeilen protokolliert.
- Auth- und Rate-Fehler. Ein 401 oder 403 lässt den Job mit der Meldung "check the bearer token" fehlschlagen, ein 429 lässt ihn als ratenbegrenzt fehlschlagen. Es gibt weder Retry noch Backoff: Der Job stoppt.
Konfliktregeln
Die Linkliste in einem DEMO-Workspace. Importierte Links tragen den Tag imported:tinyurl, sodass Sie einen Stapel zur Prüfung filtern können.
Vor jedem Insert macht der Worker einen indizierten Lookup auf (domain, slug).
- suffix (Standard) probiert
alias-2,alias-3, bisalias-50, und lässt die Zeile fehlschlagen, wenn alle vergeben sind. - skip lässt den vorhandenen Elido-Link in Ruhe und protokolliert die Quellzeile.
- fail lässt den Job beim ersten Konflikt fehlschlagen.
TinyURL nennt sie Aliasse, Elido nennt sie Slugs. Dasselbe: die Zeichen nach dem Host. Wenn Ihre Ziel-Domain leer ist, werden Aliasse unverändert übernommen.
Limits
Ein gemeinsamer Satz von Konstanten, den alle Migrationsanbieter nutzen: 50.000 Links pro Lauf, ein Budget von 30 Minuten, Fortschritt alle 50 Links, 1.000 protokollierte Fehler.
Zwei Verhaltensweisen sollten Sie kennen. Wenn das Limit von 50.000 erreicht wird, stoppt die Schleife einfach und der Job wird abgeschlossen; er schlägt nicht fehl und sagt Ihnen nicht, dass Sie jemanden kontaktieren sollen. Vergleichen Sie die Endzahlen mit der Gesamtzahl Ihrer Quelle. Wenn das 30-Minuten-Budget abläuft, wird der Job mit der Zahl der bisher importierten Links als fehlgeschlagen markiert.
Der Worker lebt in api-core. Ein Deploy oder Absturz mitten im Lauf beendet ihn, und ein Sweep, der alle fünf Minuten läuft, setzt Jobs ohne Fortschritt seit 30 Minuten auf failed. Es gibt keinen gespeicherten Cursor, Sie starten den Job also neu. Ein erneuter Lauf ist unter suffix oder skip sicher, wobei suffix aber -2-Kopien von Links anlegt, die der erste Lauf schon geschrieben hat; bevorzugen Sie für einen erneuten Lauf daher skip.
Token-Handhabung
Das Token geht vom Request-Body an die Goroutine und nirgendwohin sonst. Die Job-Zeile hält kein Token fest, und nichts wird im Ruhezustand verschlüsselt, weil nichts gespeichert wird. Der Request-Body wird mit einem Limit von 4 KB gelesen.
Was der Code nicht tut: Er validiert das Token nicht vor dem Start und prüft den Plan nicht. Ein ungültiges Token zeigt sich nach der ersten Anfrage als fehlgeschlagener Job, nicht als Formularfehler. Frühere Versionen dieses Beitrags beschrieben einen Preflight-Schritt gegen einen Domains-Endpunkt. Diesen Schritt gibt es im Code nicht, und die Spezifikation von TinyURL hat ebenfalls keinen solchen Pfad.
Was nicht migriert wird
- Klickverlauf. Der Importer liest nur Link-Felder. Neue Klicks zählen ab dem Moment, in dem ein Link in Elido live ist.
- QR-Gestaltung, Vorlagen, Einstellungen für Branded Domains. Nicht gelesen. Ein Branded Hostname ist ein eigener Schritt: Fügen Sie ihn als Elido-Domain hinzu und ändern Sie das DNS, behandelt in Custom Domains für Kurzlinks.
- Links ohne Konto. Kein Token kann sie auflisten.
Der Importer legt die Domain nicht für Sie an, verarbeitet kein TinyURL-Feld domain und hat keinen eigenen CSV-Upload. Für dateibasierte Umzüge nutzen Sie das Formular für den Bulk-Import oder die Anleitung in Bulk-Import aus Google Sheets.
Testen und umgehen
Es folgen zwei praktische Abschnitte. Den Importer testen. Ohne ihn umziehen.
Ein sicherer Weg, einen Import zu prüfen
Sobald der Endpunkt korrigiert ist, oder wenn Sie den Importer vorher selbst testen, tun Sie es klein. Legen Sie einen Wegwerf-Workspace an, fügen Sie eine leere Domain hinzu und führen Sie den Job zuerst mit der Strategie fail aus. Eine leere Domain bedeutet keine Konflikte, jeder Fehler ist also ein Parsing- oder Auth-Problem und keine Kollision. Vergleichen Sie dann drei Zahlen: die Quellzahl in TinyURL, das vom Job gemeldete total und die Zähler für importiert plus übersprungen plus fehlgeschlagen. Weil der Worker meta.total aus der erwarteten Antwort nimmt, ist eine Abweichung zwischen total und Ihrer echten Zahl das erste Anzeichen dafür, dass die Antwortform von der Annahme des Parsers abweicht.
Filtern Sie dann die Linkliste nach imported:tinyurl und öffnen Sie zehn Links zufällig. Prüfen Sie Ziel, Slug und Titel gegen TinyURL. Wechseln Sie danach für jeden erneuten Lauf auf skip.
So exportieren Sie aus TinyURL ohne den Importer
Der dokumentierte Auflistungsaufruf ist GET /urls/available mit einem Bearer-Token, und GET /urls/archived für archivierte Links. Grenzen Sie das Ergebnis bei einem großen Konto mit from- und to-Zeitangaben ein, da die Spezifikation keine Seitenparameter nennt. Schreiben Sie die Ausgabe zuerst in eine Datei, reduzieren Sie sie auf destination, slug, title und laden Sie sie mit dem Bulk-Formular. Details zu dieser Zuordnung stehen in der Anleitung. Auch die Form der Live-Antwort haben wir nicht geprüft, sehen Sie sich also eine Antwort von Hand an, bevor Sie dagegen skripten.
Wie es weitergeht
Die Reihenfolge ist: den Endpunkt korrigieren, eine echte aufgezeichnete Antwort als Test-Fixture ergänzen, dann jede Angabe in der Anleitung und auf der Migrations-Landingpage neu prüfen. Paginierung und das echte Limit pro Anfrage müssen gegen ein Live-Konto neu gemessen werden, da die Spezifikation keines von beiden nennt. Wenn Sie vorher von TinyURL wegziehen müssen, vergleichen Sie die Optionen in Elido vs TinyURL und TinyURL-Alternativen und nutzen Sie den CSV-Weg.
Weitere Beiträge im Blog
Häufig gestellte Fragen
Funktioniert der TinyURL-Importer von Elido heute?
Behandeln Sie ihn als ungeprüft. Der Worker ruft GET /aliases?page=N&per_page=100 auf api.tinyurl.com auf. Die OpenAPI-Spezifikation von TinyURL (abgerufen am 2026-10-02) hat keinen Pfad /aliases; Links werden über GET /urls/{type} aufgelistet. Der ausgelieferte Unit-Test prüft nur die Antwortform, die wir angenommen haben. Eine Korrektur steht in unserem Backlog, und bis sie da ist, ist der verlässliche Weg ein CSV- oder Bulk-Einfügen.
Was kopiert der Importer von jedem TinyURL-Link?
Ziel-URL, Alias (als Slug verwendet), Titel und Tags, dazu einen Tag imported:tinyurl auf jedem von ihm angelegten Link. Klickverlauf, QR-Gestaltung oder sonst etwas kopiert er nicht.
Was passiert, wenn ein Alias in Elido schon existiert?
Sie wählen pro Job eine Strategie. Suffix probiert alias-2, alias-3 und so weiter bis alias-50, skip lässt den vorhandenen Link stehen und protokolliert die Zeile, fail setzt den Job beim ersten Konflikt auf fehlgeschlagen. Standard ist suffix.
Wird mein TinyURL-Token gespeichert?
Nein. Die Startanfrage reicht das Token an eine Hintergrund-Goroutine weiter, und die Job-Zeile speichert keine Token-Referenz. Das Token existiert für die Dauer des Laufs im Prozessspeicher.
Gibt es ein Limit, wie viele Links ein Import verarbeitet?
Ja. Ein Lauf endet nach 50.000 Links oder 30 Minuten, je nachdem, was zuerst eintritt. Beim Link-Limit endet der Job als abgeschlossen, wobei die ersten 50.000 verarbeitet sind, vergleichen Sie die Zahlen also mit Ihrer Quelle.
Kann ich von einem kostenlosen TinyURL-Konto migrieren?
TinyURL bindet das Auflisten von Links an ein API-Token, und ohne Anmeldung erstellte Links gehören zu keinem Konto, es gibt also nichts aufzulisten. Stellen Sie selbst eine Zielliste zusammen und nutzen Sie den Bulk-Import.
Elido testen
URL einfügen, kurzer Link in Sekunden
Kein Konto nötig. Link bleibt 30 Tage aktiv. Konto erstellen, um ihn dauerhaft zu behalten.
Kostenlos, keine Anmeldung erforderlich · 2 pro Tag
Weiterlesen
- EngineeringDie Rebrandly-Migration bereitstellen: 25-pro-Seite-Pagining und ein 30-Minuten-Budget
- EngineeringDie Bitly-Migration ausliefern: ein Worker, ein Token, ein 30-Minuten-Budget
- EngineeringURL-Encoding erklärt: Welche Zeichen maskiert werden müssen
- EngineeringVerwalte deine Short Links als Terraform