Die REST-API
Die Basis-URL ist https://api.frwrd.to. Jeder Aufruf außer dem Anlegen und Zurückholen eines Workspace nimmt deinen Workspace-Schlüssel als Bearer-Token:
Authorization: Bearer fw_...
Die Beispiele unten lesen den Schlüssel aus $FRWRD_KEY. Bodies sind JSON, sofern das Beispiel nichts anderes sagt.
Links
Einen Kurzlink anlegen:
curl -X POST https://api.frwrd.to/v1/links -H "Authorization: Bearer $FRWRD_KEY" -H "Content-Type: application/json" -d '{"long_url":"https://example.com/a/long/address","title":"Beispiel"}'
Die Antwort enthält den Kurzlink link, seinen hash und die Adressen seines QR-Codes. Nur Ziele mit http und https werden angenommen. Du kannst auch tags, utm und, in einem bestätigten Workspace, einen eigenen hash mitschicken.
Links auflisten, die neuesten zuerst (limit bis 200, dazu offset):
curl "https://api.frwrd.to/v1/links?limit=50" -H "Authorization: Bearer $FRWRD_KEY"
Zahlen für einen Link, standardmäßig die letzten 30 Tage (since und until nehmen ein Datum wie 2026-10-01, höchstens 366 Tage auseinander):
curl "https://api.frwrd.to/v1/links/aB3xZ9/stats?since=2026-10-01" -H "Authorization: Bearer $FRWRD_KEY"
Die Antwort nennt die Summe, die Aufteilung nach Kanal (link für einen direkten Klick, qr für einen Scan, page für einen Klick auf einer Bio-Seite) und die Zahlen pro Tag.
Der QR-Code als PNG oder SVG (size von 128 bis 2048):
curl "https://api.frwrd.to/v1/links/aB3xZ9/qr.png?size=512" -H "Authorization: Bearer $FRWRD_KEY" -o code.png
Um einen Link zu ändern, sende PATCH /v1/links/{hash} mit long_url, title, tags und archived, je nachdem, was sich ändert. DELETE /v1/links/{hash} archiviert ihn: Er leitet nicht mehr weiter, seine Zahlen bleiben.
Seiten
Eine Seite ist ein Markdown-Dokument mit einem kurzen Kopf. Du speicherst das ganze Dokument in einem Aufruf. Der Pfad - ist die Startseite; eine Seite in einer anderen Sprache liegt unter ihrem Sprachkürzel, und der Schrägstrich wird als %2F geschrieben, etwa de%2Fhilfe.
curl -X PUT https://api.frwrd.to/v1/pages/hallo -H "Authorization: Bearer $FRWRD_KEY" -H "Content-Type: text/markdown" --data-binary @hallo.md
Jeder Link im Dokument wird ein Kurzlink deines Workspace. Um eine Seite als Markdown zurückzulesen, sende Accept: text/markdown; die Antwort trägt einen ETag. Schick ihn beim Speichern als If-Match zurück, dann schlägt der Aufruf mit 412 fehl, wenn die Seite inzwischen jemand geändert hat.
Aufrufe einer Seite und Klicks auf jeden ihrer Links:
curl "https://api.frwrd.to/v1/pages/hallo/stats" -H "Authorization: Bearer $FRWRD_KEY"
GET /v1/pages listet deine Seiten, GET /v1/pages/{path}/versions zeigt den Verlauf und DELETE /v1/pages/{path} archiviert eine Seite.
Bit.ly-kompatibles /v4
Werkzeuge, die Bit.lys v4-API sprechen, können auf https://api.frwrd.to/v4 zeigen und deinen Workspace-Schlüssel als Token nutzen. Diese Aufrufe gibt es, mit Bit.lys Antworten, Zeitstempeln und Fehlermeldungen:
- POST /v4/shorten
- POST /v4/expand
- PATCH /v4/bitlinks/frwrd.to/{hash}
- GET /v4/bitlinks/frwrd.to/{hash}/clicks/summary
Alles andere von Bit.ly wird nicht angeboten. Ein aufgebrauchtes Link-Kontingent antwortet mit 429 und MONTHLY_LIMIT_EXCEEDED.
Grenzen und Fehler
- Noch bevor sie deinen Schlüssel prüft, erlaubt die API 20 Anfragen pro Sekunde von einer Adresse (Spitzen bis 60). Danach gelten 10 pro Sekunde für jeden Workspace (Spitzen bis 30). Workspaces anzulegen oder zurückzuholen ist auf 5 pro Minute und Adresse begrenzt.
- Über einer Grenze lautet die Antwort 429 mit dem Code rate_limited, und ein Retry-After-Header sagt, wann du es wieder versuchen kannst.
- Fehler unter /v1 sind JSON: {"error":{"code":"...","message":"..."}}. Richte dich nach code: invalid_body, missing_credentials, invalid_credentials, not_found, conflict, precondition_failed, quota_exceeded, not_verified, rate_limited oder internal_error.
Der vollständige Vertrag ist ein OpenAPI-Dokument, das beim Quellcode liegt, und der ist noch nicht öffentlich. Bis dahin beschreiben die Aufrufe oben, die Beschreibungen der MCP-Tools und frwrd.to/llms.txt die API.