API v2 + SDK TypeScript

API et SDK Revolink
Gérez vos liens depuis votre code

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

terminal
npm install revolink

Installation en une ligne

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.

Démarrage rapide

De zéro à votre premier lien court en trois étapes.

1

Créez une clé d'API

Dans Revolink, ouvrez Profil → API et créez une clé. Ne choisissez que les permissions dont elle a besoin.

2

Copiez l'identifiant de votre espace de travail

L'identifiant de l'espace est envoyé avec chaque requête : la clé agit donc toujours dans un seul espace.

3

Créez un lien

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.

Intégrez votre projet en toute simplicité

Avec le SDK Revolink, créez des liens courts avec des règles de routage en quelques lignes de code.

index.ts
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/k3x9a

Explorez les endpoints de l'API

Requête

TypeScript
await revolink.links.create({
  url: 'https://example.com',
});

Réponse

JSON
{
  id: "65f1c0a2e4b0a1d2c3b4a5f6",
  name: "example.com",
  domain: "rvlnk.link",
  slug: "k3x9a",
  shortLink: "https://rvlnk.link/k3x9a",
  url: "https://example.com",
  active: true,
  clicks: 0,
  ...
}

Ce que couvre le SDK

Quatre ressources et un appel me. Chaque méthode correspond à un endpoint REST.

RessourceMéthodesCe 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é.

Routage intelligent par le code

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.

routing.ts
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'],
    },
  ],
});

Clés d'API et permissions

Chaque clé porte des scopes. Un endpoint répond 403 quand le scope requis manque : donnez à chaque intégration uniquement ce qu'elle utilise.

En-têtes d'authentification

Authorization: Bearer <key>

Envoyez la clé comme jeton bearer.

X-Api-Key

Ou envoyez la clé dans cet en-tête.

X-Workspace-Id

Obligatoire. L'espace de travail dans lequel la requête agit. Le propriétaire de la clé doit en être membre.

Scopes

ScopeAutorise
links:readLister et lire les liens
links:writeCréer, upsert et mettre à jour les liens
links:deleteSupprimer les liens
links:bulkCréer, mettre à jour et supprimer en masse (jusqu'à 100 liens par requête)
analytics:readLire les statistiques de clics
tags:readLister et lire les tags
tags:writeCréer et mettre à jour les tags
tags:deleteSupprimer les tags
domains:readLister et lire les domaines personnalisés
domains:writeAjouter des domaines personnalisés
domains:deleteSupprimer 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.

Erreurs et nouvelles tentatives

Chaque requête échouée lève une RevolinkError avec le statut HTTP, un code lisible par machine et un message indiquant quoi corriger.

errors.ts
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
  }
}

Des nouvelles tentatives qui ne dupliquent jamais un lien

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.

CodeSignification
invalid_requestLa requête est incorrecte (400). Le message dit pourquoi.
unauthorizedPas de clé, ou clé invalide ou expirée (401).
forbiddenIl manque une permission à la clé, ou votre rôle ne le permet pas (403).
license_limit_reachedLa limite du forfait est atteinte : liens, tags, domaines ou appels d'API (403).
not_foundCet élément n'existe pas dans cet espace (404).
conflictExiste déjà, par exemple un slug ou un nom de tag déjà pris (409).
rate_limitedPlus de 300 requêtes par minute pour la clé (429).
network_errorPas de réponse : panne réseau ou délai dépassé (le statut est 0).

Questions fréquentes

Dois-je utiliser le SDK ?

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.

Quels environnements le SDK prend-il en charge ?

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.

Quelles sont les limites de requêtes ?

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.

Que devient l'API v1 ?

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.

Le SDK peut-il créer des liens en double lors d'une nouvelle tentative ?

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.

Puis-je utiliser Revolink depuis un agent IA ?

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.

Prêt à démarrer avec Revolink ?

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 gratuitement

Plan gratuit · Sans carte de crédit · Annulez à tout moment

Vous avez déjà des liens ? Importez-les