Zum Inhalt springen
LinkProfit

API für Entwickler

Eine REST-API, die alles abdeckt, was das Dashboard kann

Links anlegen, Analytics auslesen, Domains verbinden und Kunden-Workspaces verwalten — über HTTP mit einem Bearer-Schlüssel. Die API entsteht aus denselben Validierungsschemas wie das Produkt, ist als OpenAPI veröffentlicht und in Version 1 eingefroren: Breaking Changes kommen ausschließlich als neue Version.

Redirects served from the location closest to the click

Zwei Schlüsselbereiche, weil es zwei Arten von Aufrufern gibt

Ein Workspace-Schlüssel wirkt innerhalb eines Workspace: Links, Analytics, die ihm zur Verfügung stehenden Domains und seine eigene Nutzung. Ein Partner-Schlüssel wirkt über das ganze Geschäft: Kunden und ihre Abos, die Tarife, die Sie verkaufen, alle Domains, Zahlungen samt Gebührenaufschlüsselung, Auszahlungen und eine aggregierte Analytics-Übersicht. Die beiden Präfixe sind sichtbar verschieden, ein in den falschen Dienst eingefügter Schlüssel scheitert also sofort, statt etwas Überraschendes zu tun.

Schlüssel entstehen im Dashboard, werden einmal angezeigt und nur als Hash gespeichert. Jeder Schlüssel trägt seine eigene Rechteliste: Eine Integration, die nur Analytics lesen muss, bekommt einen Schlüssel, der nichts anlegen und nichts löschen kann. Schlüssel können ein Ablaufdatum bekommen und sind sofort widerrufbar, und zu jedem wird angezeigt, wann er zuletzt genutzt wurde — so finden Sie die Integration, an deren Einrichtung sich niemand mehr erinnert.

  • POST /links, GET /links, GET /links/{id}, PATCH /links/{id}, DELETE /links/{id}
  • POST /links/bulk — bis zu hundert Links pro Aufruf
  • GET /links/{id}/qr — PNG oder SVG, mit Vorlage und Größe
  • GET /analytics/summary, /timeseries, /breakdown, /links/top, /export.csv
  • GET und POST /domains — eine Domain verbinden und die nötigen DNS-Einträge auslesen
  • GET /workspace — Tariflimits und aktuelle Nutzung
  • GET /partner/clients, /partner/plans, /partner/payments, /partner/payouts

Vorhersagbar in genau den Punkten, die um drei Uhr nachts zählen

Jeder Fehler hat dieselbe Form — ein Code, eine für Menschen lesbare Meldung und eine Doku-URL —, eine Client-Bibliothek kann also auf den Code verzweigen und ein Mensch die Meldung lesen. Listen werden mit Cursorn statt mit Seitenzahlen paginiert, was die Ergebnisse stabil hält, während unter Ihnen neue Links entstehen.

Die Rate-Limits liegen standardmäßig bei sechshundert Anfragen pro Minute für einen Workspace-Schlüssel und dem Doppelten für einen Partner-Schlüssel; Limit, Restkontingent und Zurücksetzzeitpunkt kommen als Header in jeder Antwort zurück. Wer sie überschreitet, bekommt 429 mit einem Retry-After-Header statt eines abgebrochenen Verbindungsaufbaus, wohlerzogene Clients drosseln sich also korrekt. Analytics-Exporte streamen, hunderttausend Zeilen müssen also auf keiner der beiden Seiten im Speicher gehalten werden.

Webhooks für die Ereignisse, die Sie sonst abfragen müssten

Registrieren Sie einen Endpunkt und empfangen Sie das Anlegen, Ändern und Löschen von Links, Ereignisse aus dem Domain-Lebenszyklus, wenn ein Hostname von „SSL ausstehend“ auf „aktiv“ oder in einen Fehlerzustand wechselt, und auf Partner-Schlüsseln Ereignisse zu Kundenabos und Zahlungen. Einen Domain-Status-Endpunkt jede Minute abzufragen ist genau die Art Code, die niemand schreiben sollte.

Jede Zustellung trägt eine mit Zeitstempel versehene HMAC-SHA256-Signatur im Header, damit Ihr Empfänger prüfen kann, dass die Nutzdaten von uns stammen und keine Wiedereinspielung sind. Fehlgeschlagene Zustellungen werden fünfmal mit wachsenden Abständen wiederholt — eine Minute, fünf, dreißig, zwei Stunden, zwölf —, danach gilt der Endpunkt als gestört und eine E-Mail geht raus. Ein Testereignis lässt sich aus dem Dashboard senden, die Integration ist also überprüfbar, bevor etwas Echtes davon abhängt.

Dokumentation, erzeugt aus dem Code, der tatsächlich läuft

Die OpenAPI-Spezifikation entsteht aus denselben Schemas, gegen die die API validiert — sie kann also nicht von der Implementierung abdriften, wie es eine handgeschriebene Referenz tut. Sie ist als Datei veröffentlicht, die Sie einem Client-Generator vorwerfen können, und auf dieser Website als durchblätterbare Referenz aufbereitet, neben handgeschriebenen Anleitungen zu Schnellstart, Pagination, Fehlern, Webhooks und Rate-Limits.

Version 1 ist eingefroren. Neue Felder dürfen hinzukommen, bestehendes Verhalten ändert sich nicht, und alles, was einen Aufrufer brechen würde, wartet auf eine Version 2 unter einem anderen Pfad. Wenn Sie einen Shortener auswählen, um darauf zu bauen, statt ihn nur zu benutzen, ist dieses Versprechen mehr wert als jeder einzelne Endpunkt.

Code, der für sich spricht

Link anlegen — curl
curl -X POST https://api.linkprofit.com/v1/links \
  -H 'Authorization: Bearer lp_live_XXXXXXXX' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://example.com/spring-collection",
    "domain_id": "dom_8kq2vn41",
    "slug": "spring",
    "title": "Spring collection",
    "utm": {
      "utm_source": "newsletter",
      "utm_medium": "email",
      "utm_campaign": "spring-2026"
    }
  }'
Link anlegen — JavaScript fetch
const response = await fetch("https://api.linkprofit.com/v1/links", {
  method: "POST",
  headers: {
    Authorization: "Bearer lp_live_XXXXXXXX",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    url: "https://example.com/spring-collection",
    domain_id: "dom_8kq2vn41",
    slug: "spring",
  }),
});

if (!response.ok) {
  const { error } = await response.json();
  throw new Error(error.code + ": " + error.message);
}

const link = await response.json();
console.log(link, response.headers.get("X-RateLimit-Remaining"));
Link anlegen — Python requests
import requests

response = requests.post(
    "https://api.linkprofit.com/v1/links",
    headers={"Authorization": "Bearer lp_live_XXXXXXXX"},
    json={
        "url": "https://example.com/spring-collection",
        "domain_id": "dom_8kq2vn41",
        "slug": "spring",
    },
    timeout=10,
)

if response.status_code == 429:
    raise SystemExit("rate limited, retry after " + response.headers["Retry-After"])

response.raise_for_status()
print(response.json())

Häufige Fragen

Welche Tarife enthalten API-Zugriff?

Für Partner beginnt der API-Zugriff mit dem Growth-Tarif und ist in allem darüber enthalten. Für Ihre eigenen Kunden entscheiden Sie: API-Zugriff ist einer der Schalter an jedem Tarif, den Sie anlegen, er kann also eine Premium-Stufe Ihres Dienstes sein oder überall enthalten.

Kann die API auf meinem eigenen Hostnamen laufen?

In Version 1 nicht. Die API wird von api.linkprofit.com ausgeliefert, und Partner dokumentieren sie ihren Kunden gegenüber als die API ihres Dienstes. Alles, was ein Kunde im Browser sieht — Dashboard, Links, E-Mails, Kasse —, liegt auf Ihren Domains; der API-Hostname ist die eine ehrliche Ausnahme.

Gibt es eine Sandbox zum Testen?

Nutzen Sie einen eigenen Workspace und einen darauf beschränkten Schlüssel. Dort angelegte Links lösen auf einer echten Domain auf und erzeugen echte Analytics, was nützlicher ist als eine simulierte Umgebung, wenn Sie prüfen, ob Weiterleitungen, Targeting und Webhooks sich so verhalten wie dokumentiert.

Starten Sie Ihren Kurzlink-Dienst in eigener Marke

Domain verbinden, Preise veröffentlichen und den ersten Kunden einladen — die meisten Partner gehen an einem Abend live.

Für die Testphase ist keine Karte nötig.