Créez des liens avec des règles de routage, gérez les tags et les domaines personnalisés et lisez les statistiques de clics via une API REST avec spécification OpenAPI 3.1, ou via le SDK TypeScript typé et sans dépendances.
Créez une clé dans Profil → API
Dernière mise à jour : novembre 2026
npm install revolink
Fonctionne avec Node.js 18+ et tout environnement doté d'un fetch global. Aucune dépendance, types TypeScript complets générés à partir de la spécification de l'API.
De zéro à votre premier lien court en trois étapes.
Dans Revolink, ouvrez Profil → API et créez une clé. Ne choisissez que les permissions dont elle a besoin.
L'identifiant de l'espace est envoyé avec chaque requête : la clé agit donc toujours dans un seul espace.
Initialisez le client avec la clé et l'identifiant de l'espace, puis appelez links.create.
Gardez la clé sur votre serveur. Quiconque la possède peut agir sur votre espace dans la limite de ses permissions.
Avec le SDK Revolink, créez des liens courts avec des règles de routage en quelques lignes de code.
import {Revolink} from 'revolink';
const revolink = new Revolink({
apiKey: process.env.REVOLINK_API_KEY!,
workspaceId: process.env.REVOLINK_WORKSPACE_ID!,
});
const {shortLink} = await revolink.links.create({
url: 'https://example.com',
});
console.log(shortLink); // https://rvlnk.link/k3x9aRequête
await revolink.links.create({
url: 'https://example.com',
});Réponse
{
id: "65f1c0a2e4b0a1d2c3b4a5f6",
name: "example.com",
domain: "rvlnk.link",
slug: "k3x9a",
shortLink: "https://rvlnk.link/k3x9a",
url: "https://example.com",
active: true,
clicks: 0,
...
}Quatre ressources et un appel me. Chaque méthode correspond à un endpoint REST.
| Ressource | Méthodes | Ce qu'elle fait |
|---|---|---|
| revolink.links | createupsertgetlistiterateupdatedeletecreateManyupdateManydeleteMany | Créer, lire, mettre à jour et supprimer des liens, upsert par slug, lister avec filtres et pagination, parcourir toutes les pages et agir en masse (jusqu'à 100 par appel). |
| revolink.tags | listgetcreateupdatedelete | Créer, lister, renommer et supprimer des tags. |
| revolink.domains | listgetcreatedelete | Ajouter un domaine personnalisé, vérifier son statut de vérification et le supprimer. |
| revolink.analytics | linkworkspace | Statistiques de clics d'un lien ou de tout l'espace sur une période. |
| revolink.me() | Qui agit avec la clé, l'espace de travail et les permissions de la clé. |
Envoyez des visiteurs différents vers des destinations différentes. Exactement une règle est celle par défaut ; les autres s'appliquent selon le pays, l'appareil, le système d'exploitation et d'autres conditions.
await revolink.links.create({
name: 'App download',
rules: [
{isDefault: true, targetUrl: 'https://example.com/download'},
{
isDefault: false,
targetUrl: 'https://apps.apple.com/app/id1',
device: ['mobile'],
os: ['iOS'],
},
],
});Chaque clé porte des scopes. Un endpoint répond 403 quand le scope requis manque : donnez à chaque intégration uniquement ce qu'elle utilise.
Authorization: Bearer <key>Envoyez la clé comme jeton bearer.
X-Api-KeyOu envoyez la clé dans cet en-tête.
X-Workspace-IdObligatoire. L'espace de travail dans lequel la requête agit. Le propriétaire de la clé doit en être membre.
| Scope | Autorise |
|---|---|
links:read | Lister et lire les liens |
links:write | Créer, upsert et mettre à jour les liens |
links:delete | Supprimer les liens |
links:bulk | Créer, mettre à jour et supprimer en masse (jusqu'à 100 liens par requête) |
analytics:read | Lire les statistiques de clics |
tags:read | Lister et lire les tags |
tags:write | Créer et mettre à jour les tags |
tags:delete | Supprimer les tags |
domains:read | Lister et lire les domaines personnalisés |
domains:write | Ajouter des domaines personnalisés |
domains:delete | Supprimer des domaines personnalisés |
Les appels d'API comptent dans le quota mensuel d'API du forfait du propriétaire de l'espace. Quand une limite du forfait arrête une requête, le code d'erreur est license_limit_reached.
Chaque requête échouée lève une RevolinkError avec le statut HTTP, un code lisible par machine et un message indiquant quoi corriger.
import {RevolinkError} from 'revolink';
try {
await revolink.links.create({url: 'https://example.com', slug: 'taken'});
} catch (error) {
if (error instanceof RevolinkError) {
error.status; // 409
error.code; // 'conflict'
error.licenseLimitReached; // true when the plan's limit stopped the request
error.requiredPermission; // e.g. 'tags:write' when the key lacks a scope
error.retryAfter; // seconds, on 429
}
}Un 429 est toujours retenté après le délai Retry-After. Les erreurs réseau et les réponses 5xx ne sont retentées que pour GET, PUT et DELETE. Un POST ou PATCH qui a peut-être déjà été traité n'est jamais répété : un lien n'est donc pas créé deux fois. Par défaut : délai de 30 secondes par tentative et 2 nouvelles tentatives ; maxRetries à 0 les désactive.
| Code | Signification |
|---|---|
invalid_request | La requête est incorrecte (400). Le message dit pourquoi. |
unauthorized | Pas de clé, ou clé invalide ou expirée (401). |
forbidden | Il manque une permission à la clé, ou votre rôle ne le permet pas (403). |
license_limit_reached | La limite du forfait est atteinte : liens, tags, domaines ou appels d'API (403). |
not_found | Cet élément n'existe pas dans cet espace (404). |
conflict | Existe déjà, par exemple un slug ou un nom de tag déjà pris (409). |
rate_limited | Plus de 300 requêtes par minute pour la clé (429). |
network_error | Pas de réponse : panne réseau ou délai dépassé (le statut est 0). |
Non. Le SDK est une fine couche typée au-dessus de l'API REST. Vous pouvez appeler directement https://api.revolink.link/apiv2 depuis n'importe quel langage avec une clé d'API et l'en-tête X-Workspace-Id, ou générer un client à partir de la spécification OpenAPI 3.1.
Node.js 18 ou plus récent et tout environnement avec un fetch global. Il n'a aucune dépendance et fournit des builds ESM et CommonJS avec des types TypeScript générés à partir de la spécification de l'API.
Les requêtes sont limitées à 300 par minute et par clé d'API. Au-delà, l'API répond 429 avec un en-tête Retry-After, et le SDK attend et réessaie tout seul. Par ailleurs, les appels d'API comptent dans le quota mensuel du forfait du propriétaire de l'espace.
L'API v1 est gelée et ses réponses portent des en-têtes Deprecation. Les nouvelles intégrations devraient utiliser l'API v2.
Non. Un POST ou PATCH qui a pu être traité n'est jamais retenté. Seules les réponses 429 et les requêtes idempotentes (GET, PUT, DELETE) sont retentées.
Oui. Le serveur MCP de Revolink permet à Claude, Cursor et d'autres clients MCP de gérer les liens en langage naturel. Le SDK est le choix pour votre propre code et vos scripts.
Rejoignez les équipes et créateurs qui contrôlent chaque clic grâce au routage intelligent. Lancez des campagnes plus intelligentes, optimisez le trafic en temps réel et grandissez sans limites.
Commencer gratuitementPlan gratuit · Sans carte de crédit · Annulez à tout moment
Vous avez déjà des liens ? Importez-les