REST-API
Erstelle Links, Smart Links, Formulare und Multilink-Seiten aus deinem eigenen Code und lies ihre Statistiken, mit denselben Regeln wie in der Walink-App.
Mit der Walink-API erledigt ein Skript, ein Backend oder jedes No-Code-Tool, das HTTP-Anfragen sendet, was du sonst in der App machst. Jede Anfrage läuft durch die Regeln der App. Adressen, Kontingent und Eigentum werden also genauso geprüft. Jedes Erstellen ergibt einen Entwurf, außer bei einem kostenlosen Link. So geht nichts versehentlich online.
Diese Seite bringt dich bis zum ersten Aufruf. Jeder Endpunkt und jedes Feld steht in der vollständigen API-Referenz. Dort gibt es auch eine Konsole, um Anfragen auszuprobieren.
Was du automatisieren kannst
| Ressource | Was die API macht |
|---|---|
Premium-Links (/v1/links) |
Auflisten, Entwürfe erstellen, bearbeiten, veröffentlichen, zum Entwurf machen, löschen, QR-Code gestalten |
Smart Links (/v1/smart-links) |
Dasselbe, mit Zielen und Routing |
Formulare (/v1/forms) |
Dasselbe, dazu die Antworten, die Leute gesendet haben |
Multilink-Seiten (/v1/multilinks) |
Dasselbe |
Kostenlose Links (/v1/free-links) |
Auflisten, erstellen, lesen, löschen |
Statistiken (/v1/analytics) |
Zahlen und Aufschlüsselungen nach Land, Quelle, Gerät und mehr |
Konto (/v1/account) |
Profil, genutztes Kontingent, vorhandene kostenlose Links |
Jedes Walink-Konto kann die API nutzen. Entwürfe sind kostenlos. Das Veröffentlichen verbraucht das Kontingent deines Abos, und Statistiken brauchen ein Abo, wie in der App.
Ein Token erstellen
- Melde dich bei Walink an, öffne das Kontomenü (der runde Button oben rechts) und wähle Developers.
- Wähle unter API Tokens den Punkt Create token (Token erstellen).
- Gib ihm einen Name, etwa „Reporting-Skript“, und leg bei Expires after fest, wann es abläuft: 30 days, 90 days, 1 year (der Standard) oder No expiration (kein Ablauf).
- Hake unter Scopes (Berechtigungen) nur an, was das Token braucht. Quick presets füllt Read only (nur lesen) oder Full access (voller Zugriff) aus. Scopes lassen sich später nicht ändern.
- Wähle Create token. Das Fenster Save your token zeigt es ein einziges Mal: Kopiere es an einen sicheren Ort, etwa in einen Passwortmanager, und wähle dann I've saved it (ich habe es gespeichert).
Tokens beginnen mit wlk_live_, und ein Konto kann 25 aktive Tokens haben. In der Token-Tabelle gibt dir Rotate ein neues Token mit demselben Namen und denselben Scopes, während das alte noch 7 Tage funktioniert. Revoke (widerrufen) stoppt ein Token endgültig, innerhalb von 30 Sekunden.
Scopes
write schließt read ein. Nichts schließt publish, delete oder responses:read ein: Jeder davon wird einzeln vergeben, und keiner ist standardmäßig an.
| Scope | Erlaubt |
|---|---|
links:read |
Premium-Links, Smart Links und kostenlose Links lesen |
links:write |
Entwürfe erstellen und bearbeiten |
links:publish |
Veröffentlichen, zum Entwurf machen, alles Veröffentlichte bearbeiten, kostenlose Links erstellen |
links:delete |
Löschen |
forms:*, multilinks:* |
Dieselben vier für Formulare und Multilink-Seiten |
account:read |
Profil, Kontingent und Nutzung |
analytics:read |
Statistiken |
responses:read |
Formularantworten. Darin stehen persönliche Daten, die Leute dir gesendet haben |
analytics:read und multilinks:read zeigen auch die Namen deiner veröffentlichten Links, Smart Links und Formulare, selbst ohne deren eigenen Lese-Scope.
Deine erste Anfrage
Die Basis-URL ist https://api.walink.com/v1. Sende das Token als Authorization: Bearer <token> und den Inhalt von Anfragen als JSON. Die Beispiele lesen das Token aus der Umgebungsvariable WALINK_API_TOKEN. So bleibt es aus deinem Code heraus.
Deine Premium-Links auflisten (braucht links:read):
curl https://api.walink.com/v1/links \
-H "Authorization: Bearer $WALINK_API_TOKEN"
{
"data": [
{
"id": "lnk_3f2a9c1e-7b4d-4e8a-9f10-2c6d8e4b1a77",
"title": "Tienda Luna orders",
"handle": "tienda-luna",
"plan": "chat",
"status": "published",
"url": "https://wa.link/tienda-luna",
"created_at": "2026-11-05T14:32:07.000Z",
"updated_at": "2026-11-05T14:32:07.000Z"
}
],
"has_more": false,
"next_cursor": null
}
Listen beginnen mit dem Neuesten. Dazu gibt es limit (standardmäßig 25, höchstens 100) und cursor: Übergib next_cursor, um die nächste Seite zu bekommen.
Einen Entwurf erstellen
Ein Erstellen ergibt immer einen Entwurf (braucht links:write). Dieser hier öffnet einen Chat mit einer US-Nummer:
curl -X POST https://api.walink.com/v1/links \
-H "Authorization: Bearer $WALINK_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: tienda-luna-promo-1" \
-d '{
"handle": "tienda-luna-promo",
"plan": "chat",
"title": "Tienda Luna promo",
"phone": "4155550123",
"country_code": "1",
"country_alpha": "US",
"message": "Hello Tienda Luna, I saw your promo"
}'
Die Antwort ist 201 mit dem vollständigen Datensatz, seiner id und "status": "draft".
handleist die Adresse nachwa.link/. Die Adresse lässt sich nicht mehr ändern, sobald der Link erstellt ist, und ein Entwurf reserviert sie nicht: Das erste Konto, das unter ihr veröffentlicht, bekommt sie.planist der Linktyp:chat,catalog,channelodergroup.Idempotency-Keymacht eine Wiederholung 24 Stunden lang sicher: Derselbe Schlüssel mit demselben Inhalt liefert die erste Antwort statt eines zweiten Entwurfs.
Veröffentlichen
Das Veröffentlichen ist ein eigener Aufruf und braucht links:publish:
curl -X POST https://api.walink.com/v1/links/lnk_3f2a9c1e-7b4d-4e8a-9f10-2c6d8e4b1a77/publish \
-H "Authorization: Bearer $WALINK_API_TOKEN"
Wie Publish in der App verbraucht es eine Einheit deines Premium-Links-Kontingents ($9 USD pro Jahr pro Link). Ohne freie Einheit ist die Antwort 402 pool_exhausted, mit den Zahlen in details. Kontingent fügst du auf der Seite Billing der App hinzu (so funktioniert die Abrechnung).
POST .../publish-checkist ein Probelauf: was das Veröffentlichen noch blockiert und wie viel Kontingent es verbrauchen würde.POST .../unpublishnimmt den Link offline und gibt seine Einheit frei. Seine Adresse funktioniert nicht mehr, auch nicht auf gedruckten QR-Codes, und ein anderes Konto kann sie sich dann sichern.PATCH /v1/links/{id}ändert nur die Felder, die du sendest. Bei einem veröffentlichten Link ist die Änderung sofort online. Dafür brauchst du deshalb ebenfallslinks:publish.
Smart Links, Formulare und Multilink-Seiten folgen denselben Schritten unter ihren eigenen Pfaden. Smart Links nutzen die links-Scopes.
Kostenlose Links über die API
/v1/free-links erstellt die kostenlosen Links, von denen jedes Konto bis zu 5 haben kann. Diese Links funktionieren anders:
- Ein kostenloser Link ist online, sobald er erstellt ist, und nie ein Entwurf. Deshalb braucht das Erstellen
links:publish, nichtlinks:write. - Walink wählt seine zufällige Adresse. Du sendest eine Telefonnummer oder einen WhatsApp-Benutzernamen, optional eine Nachricht und optional einen privaten
title, der sich später nicht ändern lässt. - Er lässt sich auflisten, lesen und löschen, aber nie bearbeiten. Seine ID beginnt mit
fln_, und/v1/linkszeigt ihn nie. - Um ihn zu bearbeiten oder seine Statistiken zu sehen, brauchst du ein Upgrade auf Premium in der App. Dabei ändert sich seine ID zu
lnk_.
Sind es schon 5, antwortet ein Erstellen mit 409 free_link_limit_reached. Löschst du einen, wird sein Platz frei. Mehr dazu unter Kostenlose Links.
Fehler und Ratenlimits
Jeder Fehler hat denselben Aufbau:
{
"error": {
"code": "insufficient_scope",
"message": "This token needs the links:publish scope.",
"param": null,
"doc_url": "https://api.walink.com/docs#description/errors",
"request_id": "req_4f1c9a0b7d2e4c8f9a1b3c5d7e9f0a2b",
"details": { "required": ["links:publish"] }
}
}
| Status | Häufige Codes | Bedeutung |
|---|---|---|
| 401 | invalid_token |
Token fehlt, ist abgelaufen oder widerrufen |
| 402 | pool_exhausted, past_due_locked, subscription_required |
Kontingent oder Abrechnung, in der App zu beheben |
| 403 | insufficient_scope |
details.required nennt den Scope |
| 404 | not_found |
Auch bei IDs anderer Konten |
| 409 | handle_taken, free_link_limit_reached |
Die Adresse ist vergeben, oder eine Grenze ist erreicht |
| 422 | validation_failed, handle_immutable |
Ungültige Anfrage. details.fields listet die Probleme auf |
| 429 | rate_limited |
Warte Retry-After Sekunden |
| Anfragen | Limit |
|---|---|
| Lesen | 120 pro Minute pro Token |
| Erstellen, Bearbeiten, Veröffentlichen und Löschen | 30 pro Minute pro Konto |
| Statistiken | 10 pro Minute pro Konto |
| Adressprüfungen | 30 pro Minute pro Konto |
Die Limits sind Richtwerte, und ein aufgebrauchtes Kontingent ist nie ein 429. Über die API kann ein Konto bis zu 500 Entwürfe pro Produkt haben. Jede Antwort trägt einen Request-Id-Header: Nenn ihn, wenn du dich an den Support wendest.
Vollständige Referenz
- API-Referenz: jeder Endpunkt und jedes Feld, mit Konsole.
- OpenAPI-3.1-Dokument und Enums und Limits, ohne Token.
- llms.txt: die Regeln der API, für KI-Tools.
Dasselbe Token verbindet auch KI-Assistenten: siehe KI-Assistenten verbinden.