Crea enlaces con reglas de enrutamiento, gestiona etiquetas y dominios propios y lee las analíticas de clics con una API REST con especificación OpenAPI 3.1 o con el SDK de TypeScript tipado y sin dependencias.
Crea una clave en Perfil → API
Última actualización: noviembre de 2026
npm install revolink
Funciona en Node.js 18+ y en cualquier entorno con fetch global. Sin dependencias y con tipos TypeScript completos generados a partir de la especificación de la API.
De cero a tu primer enlace corto en tres pasos.
En Revolink abre Perfil → API y crea una clave. Elige solo los permisos que necesita.
El id del espacio se envía con cada petición, así que la clave siempre actúa en un solo espacio.
Inicializa el cliente con la clave y el id del espacio y llama a links.create.
Guarda la clave en tu servidor. Quien la tenga puede actuar en tu espacio dentro de los permisos de la clave.
Con el SDK de Revolink creas enlaces cortos con reglas de enrutamiento en pocas líneas de código.
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/k3x9aPetición
await revolink.links.create({
url: 'https://example.com',
});Respuesta
{
id: "65f1c0a2e4b0a1d2c3b4a5f6",
name: "example.com",
domain: "rvlnk.link",
slug: "k3x9a",
shortLink: "https://rvlnk.link/k3x9a",
url: "https://example.com",
active: true,
clicks: 0,
...
}Cuatro recursos y una llamada me. Cada método corresponde a un endpoint REST.
| Recurso | Métodos | Qué hace |
|---|---|---|
| revolink.links | createupsertgetlistiterateupdatedeletecreateManyupdateManydeleteMany | Crear, leer, actualizar y eliminar enlaces, upsert por slug, listar con filtros y paginación, recorrer todas las páginas y operar en lote (hasta 100 por llamada). |
| revolink.tags | listgetcreateupdatedelete | Crear, listar, renombrar y eliminar etiquetas. |
| revolink.domains | listgetcreatedelete | Añadir un dominio propio, comprobar su estado de verificación y eliminarlo. |
| revolink.analytics | linkworkspace | Analíticas de clics de un enlace o de todo el espacio en un intervalo de fechas. |
| revolink.me() | Quién actúa con la clave, el espacio de trabajo y los permisos de la clave. |
Envía a distintos visitantes a distintos destinos. Exactamente una regla es la predeterminada; las demás se aplican según país, dispositivo, sistema operativo y otras condiciones.
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'],
},
],
});Cada clave lleva scopes. Un endpoint responde 403 si falta el scope que necesita, así que da a cada integración solo lo que usa.
Authorization: Bearer <key>Envía la clave como token bearer.
X-Api-KeyO envía la clave en esta cabecera.
X-Workspace-IdObligatoria. El espacio de trabajo en el que actúa la petición. El propietario de la clave debe ser miembro.
| Scope | Permite |
|---|---|
links:read | Listar y leer enlaces |
links:write | Crear, hacer upsert y actualizar enlaces |
links:delete | Eliminar enlaces |
links:bulk | Crear, actualizar y eliminar en lote (hasta 100 enlaces por petición) |
analytics:read | Leer analíticas de clics |
tags:read | Listar y leer etiquetas |
tags:write | Crear y actualizar etiquetas |
tags:delete | Eliminar etiquetas |
domains:read | Listar y leer dominios propios |
domains:write | Añadir dominios propios |
domains:delete | Eliminar dominios propios |
Las llamadas a la API cuentan para la cuota mensual de API del plan del propietario del espacio. Cuando un límite del plan detiene una petición, el código de error es license_limit_reached.
Cada petición fallida lanza un RevolinkError con el estado HTTP, un código legible por máquina y un mensaje que indica qué corregir.
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 siempre se reintenta tras la espera indicada por Retry-After. Los errores de red y las respuestas 5xx se reintentan solo para GET, PUT y DELETE. Un POST o PATCH que pudo haberse procesado nunca se repite, así que un enlace no se crea dos veces. Valores por defecto: 30 segundos de tiempo de espera por intento y 2 reintentos; maxRetries en 0 desactiva los reintentos.
| Código | Significado |
|---|---|
invalid_request | La petición es incorrecta (400). El mensaje dice qué falla. |
unauthorized | Falta la clave, o es inválida o ha caducado (401). |
forbidden | A la clave le falta un permiso, o tu rol no puede hacerlo (403). |
license_limit_reached | Se alcanzó el límite del plan: enlaces, etiquetas, dominios o llamadas a la API (403). |
not_found | No existe ese elemento en este espacio (404). |
conflict | Ya existe, por ejemplo un slug o un nombre de etiqueta ocupado (409). |
rate_limited | Más de 300 peticiones por minuto para la clave (429). |
network_error | Sin respuesta: fallo de red o tiempo de espera agotado (el estado es 0). |
No. El SDK es una capa fina y tipada sobre la API REST. Puedes llamar directamente a https://api.revolink.link/apiv2 desde cualquier lenguaje con una clave de API y la cabecera X-Workspace-Id, o generar un cliente a partir de la especificación OpenAPI 3.1.
Node.js 18 o superior y cualquier entorno con fetch global. No tiene dependencias e incluye compilaciones ESM y CommonJS con tipos TypeScript generados a partir de la especificación de la API.
Las peticiones están limitadas a 300 por minuto por clave de API. Por encima, la API responde 429 con una cabecera Retry-After, y el SDK espera y reintenta por sí solo. Aparte, las llamadas a la API cuentan para la cuota mensual del plan del propietario del espacio.
La API v1 está congelada y sus respuestas incluyen cabeceras Deprecation. Las nuevas integraciones deberían usar la API v2.
No. Un POST o PATCH que pudo haberse procesado nunca se reintenta. Solo se reintentan las respuestas 429 y las peticiones idempotentes (GET, PUT, DELETE).
Sí. El servidor MCP de Revolink permite a Claude, Cursor y otros clientes MCP gestionar enlaces en lenguaje natural. El SDK es la opción para tu propio código y tus scripts.
Únete a equipos y creadores que controlan cada clic con enrutamiento inteligente. Lanza campañas más inteligentes, optimiza el tráfico en tiempo real y crece sin límites.
Empieza gratisPlan gratuito · Sin tarjeta de crédito · Cancela cuando quieras
¿Ya tienes enlaces? Impórtalos