API REST
Créez des liens, des Smart Links, des formulaires et des pages Multilink depuis votre code, et lisez leurs statistiques, avec les règles de l’application.
L’API Walink permet à un script, à un backend ou à tout outil no-code capable d’envoyer des requêtes HTTP de faire ce que vous faites dans l’application. Chaque requête passe par les règles de l’application : les adresses, le quota et la propriété sont donc vérifiés de la même façon. Chaque création donne un brouillon, sauf pour un lien gratuit : rien n’est donc mis en ligne par accident.
Cette page vous amène jusqu’à un premier appel. Tous les points de terminaison et tous les champs figurent dans la référence complète de l’API, qui comporte aussi une console pour essayer des requêtes.
Ce que vous pouvez automatiser
| Ressource | Ce que fait l’API |
|---|---|
Liens Premium (/v1/links) |
Lister, créer des brouillons, modifier, publier, dépublier, supprimer, personnaliser le code QR |
Smart Links (/v1/smart-links) |
La même chose, avec les destinations et le routage |
Formulaires (/v1/forms) |
La même chose, plus les réponses que les gens ont envoyées |
Pages Multilink (/v1/multilinks) |
La même chose |
Liens gratuits (/v1/free-links) |
Lister, créer, lire, supprimer |
Statistiques (/v1/analytics) |
Chiffres et répartitions par pays, source, appareil et plus encore |
Compte (/v1/account) |
Profil, quota utilisé, liens gratuits détenus |
N’importe quel compte Walink peut utiliser l’API. Les brouillons sont gratuits. Publier utilise le quota de votre abonnement et les statistiques demandent un abonnement, comme dans l’application.
Créer un jeton
- Connectez-vous à Walink, ouvrez le menu du compte (le bouton rond en haut à droite) et sélectionnez Developers (développeurs).
- Sous API Tokens (jetons d’API), sélectionnez Create token (créer un jeton).
- Donnez-lui un Name (nom), comme « Script de rapports », et choisissez quand il expire sous Expires after (expire après) : 30 days, 90 days, 1 year (la valeur par défaut) ou No expiration (sans expiration).
- Sous Scopes (autorisations), ne cochez que ce dont le jeton a besoin. Quick presets (préréglages rapides) remplit Read only (lecture seule) ou Full access (accès complet). Les autorisations ne peuvent pas être modifiées ensuite.
- Sélectionnez Create token. La fenêtre Save your token (enregistrez votre jeton) ne l’affiche qu’une fois : copiez-le dans un endroit sûr, comme un gestionnaire de mots de passe, puis sélectionnez I’ve saved it (je l’ai enregistré).
Les jetons commencent par wlk_live_, et un compte peut avoir 25 jetons actifs. Dans le tableau des jetons, Rotate (renouveler) vous donne un nouveau jeton avec le même nom et les mêmes autorisations, tandis que l’ancien continue de fonctionner pendant 7 jours. Revoke (révoquer) arrête définitivement un jeton, en moins de 30 secondes.
Autorisations
write inclut read. Rien n’inclut publish, delete ni responses:read : chacune s’accorde séparément, et aucune n’est activée par défaut.
| Autorisation | Permet de |
|---|---|
links:read |
Lire les Liens Premium, les Smart Links et les liens gratuits |
links:write |
Créer et modifier des brouillons |
links:publish |
Publier, dépublier, modifier tout ce qui est publié, créer des liens gratuits |
links:delete |
Supprimer |
forms:*, multilinks:* |
Les quatre mêmes pour les formulaires et les pages Multilink |
account:read |
Profil, quota et utilisation |
analytics:read |
Statistiques |
responses:read |
Les réponses aux formulaires, qui contiennent des données personnelles que les gens vous ont envoyées |
analytics:read et multilinks:read montrent aussi les noms de vos liens, Smart Links et formulaires publiés, même sans leur propre autorisation de lecture.
Votre première requête
L’URL de base est https://api.walink.com/v1. Envoyez le jeton sous la forme Authorization: Bearer <token> et les corps de requête en JSON. Les exemples lisent le jeton dans une variable d’environnement WALINK_API_TOKEN : il reste ainsi en dehors de votre code.
Lister vos Liens Premium (demande 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
}
Les listes vont du plus récent au plus ancien. Elles acceptent limit (25 par défaut, 100 au maximum) et cursor : transmettez next_cursor pour obtenir la page suivante.
Créer un brouillon
Une création donne toujours un brouillon (demande links:write). Celui-ci ouvre une discussion avec un numéro américain :
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"
}'
La réponse est un 201 avec l’enregistrement complet, son id et "status": "draft".
handleest l’adresse qui suitwa.link/. Elle ne peut plus être modifiée une fois le lien créé, et un brouillon ne la réserve pas : le premier compte qui publie avec elle l’obtient.planest le type de lien :chat,catalog,channelougroup.Idempotency-Keyrend une nouvelle tentative sans risque pendant 24 heures : la même clé et le même corps renvoient la première réponse au lieu de créer un second brouillon.
Publier
La publication est un appel à part, et elle demande links:publish :
curl -X POST https://api.walink.com/v1/links/lnk_3f2a9c1e-7b4d-4e8a-9f10-2c6d8e4b1a77/publish \
-H "Authorization: Bearer $WALINK_API_TOKEN"
Comme Publish (publier) dans l’application, elle utilise une unité de votre quota de Liens Premium ($9 USD par an et par lien). Sans unité libre, la réponse est 402 pool_exhausted, avec les chiffres dans details. Ajoutez du quota sur la page Billing de l’application (fonctionnement de la facturation).
POST .../publish-checkest un essai à blanc : ce qui bloque encore la publication et la quantité de quota qu’elle utiliserait.POST .../unpublishmet le lien hors ligne et libère son unité. Son adresse cesse de fonctionner, codes QR imprimés compris, et un autre compte peut alors l’obtenir.PATCH /v1/links/{id}ne change que les champs que vous envoyez. Sur un lien publié, le changement est en ligne aussitôt : il demande donc aussilinks:publish.
Les Smart Links, les formulaires et les pages Multilink suivent les mêmes étapes, sous leurs propres chemins. Les Smart Links utilisent les autorisations links.
Les liens gratuits dans l’API
/v1/free-links crée les liens gratuits que chaque compte peut détenir, jusqu’à 5. Ils fonctionnent différemment :
- Un lien gratuit est en ligne dès sa création, jamais en brouillon. C’est pourquoi en créer un demande
links:publish, paslinks:write. - Walink choisit son adresse aléatoire. Vous envoyez un numéro de téléphone ou un nom d’utilisateur WhatsApp, un message facultatif et un
titleprivé facultatif, qui ne peut pas être modifié ensuite. - Il peut être listé, lu et supprimé, jamais modifié. Son
idcommence parfln_, et/v1/linksne le montre jamais. - Le modifier ou voir ses statistiques demande de le passer à Premium dans l’application, ce qui change son
idenlnk_.
Avec 5 liens déjà présents, une création répond 409 free_link_limit_reached, et en supprimer un libère son emplacement. Pour en savoir plus, voir les liens gratuits.
Erreurs et limites de débit
Toutes les erreurs ont la même forme :
{
"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"] }
}
}
| Statut | Codes courants | Signification |
|---|---|---|
| 401 | invalid_token |
Jeton manquant, expiré ou révoqué |
| 402 | pool_exhausted, past_due_locked, subscription_required |
Quota ou facturation, à régler dans l’application |
| 403 | insufficient_scope |
details.required nomme l’autorisation |
| 404 | not_found |
Aussi pour les id d’autres comptes |
| 409 | handle_taken, free_link_limit_reached |
L’adresse est prise, ou une limite est atteinte |
| 422 | validation_failed, handle_immutable |
Requête invalide. details.fields détaille les problèmes |
| 429 | rate_limited |
Attendez Retry-After secondes |
| Requêtes | Limite |
|---|---|
| Lectures | 120 par minute et par jeton |
| Créations, modifications, publications et suppressions | 30 par minute et par compte |
| Statistiques | 10 par minute et par compte |
| Vérifications d’adresse | 30 par minute et par compte |
Les limites sont approximatives, et un quota épuisé ne donne jamais un 429. Par l’API, un compte peut avoir jusqu’à 500 brouillons par produit. Chaque réponse porte un en-tête Request-Id : citez-le quand vous contactez l’assistance.
Référence complète
- Référence de l’API : tous les points de terminaison et tous les champs, avec une console.
- Document OpenAPI 3.1 et énumérations et limites, sans jeton.
- llms.txt : les règles de l’API, pour les outils d’IA.
Le même jeton connecte aussi les assistants IA : voir Connecter des assistants IA.