Primeros pasos con la API
La API de TinyLink da a tus herramientas (un script, Zapier, Make, tu sitio web) los mismos gestos que la aplicación: crear una página y añadirle enlaces, acortar una dirección, poner etiquetas, generar un código QR, leer las estadísticas. Está incluida en los planes Pro y Business.
Cómo hacerlo
- Abre Biblioteca y luego la pestaña Integraciones: la tarjeta API de TinyLink es la primera.
- Haz clic en Generar un token: se abre un panel a la derecha. Elige los ámbitos del token (Lectura, Escritura para crear, modificar, añadir enlaces y generar códigos QR, y Eliminación) y confirma. Marca solo lo que necesite tu herramienta.
- El token aparece en la parte superior del panel, oculto como una contraseña: el ojo lo muestra y el botón de al lado lo copia. Sigue disponible en ese mismo lugar, así que podrás recuperarlo más tarde con el botón Gestionar de la tarjeta.
- Envíalo en la cabecera de cada petición:
Authorization: Bearer tl_…, a la direcciónhttps://api.tinylink.fr/v1.
Un token por espacio de trabajo
El token abre solo el espacio de trabajo en el que se generó: tus demás espacios quedan fuera de su alcance. Actúa en nombre del administrador que lo generó y deja de funcionar si esa persona deja de ser administradora del espacio de trabajo.
El panel Gestionar está reservado a los administradores: solo ellos ven el token y lo modifican. TinyLink lo guarda cifrado. Los ámbitos se cambian sin cambiar el token: tus herramientas no tienen que modificar nada. Regenerar crea uno nuevo y desactiva el anterior al instante; hazlo si crees que se ha filtrado. Revocar lo elimina. El panel indica también la fecha de la última llamada y el número de llamadas.
Primera llamada
GET/v1/me
Todas las respuestas son en JSON. GET /v1/me comprueba el token y devuelve el espacio de trabajo, los ámbitos y los límites del plan. A partir del 1 de noviembre de 2026 se añade limits.visits_per_month: las visitas del mes (used), el cupo del plan (max, null si no hay cupo) y la fecha de puesta a cero (resets_on).
curl https://api.tinylink.fr/v1/me \
-H "Authorization: Bearer tl_tu_token"
const response = await fetch('https://api.tinylink.fr/v1/me', {
headers: { Authorization: 'Bearer tl_tu_token' },
});
const data = await response.json();
$ch = curl_init('https://api.tinylink.fr/v1/me');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_tu_token'],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
response = requests.get(
'https://api.tinylink.fr/v1/me',
headers={'Authorization': 'Bearer tl_tu_token'},
)
data = response.json()
Respuestas posibles
{
"environment": {
"id": "Env_60c7cf02dd971TT",
"name": "Mi equipo",
"color": "#1e90ff",
"description": null,
"personal": false,
"blocked": false
},
"token": {
"scopes": [
"read",
"write"
],
"created_at": "2026-10-05T21:56:57+02:00",
"created_by": "Camille Martin",
"last_used_at": "2026-10-05T21:57:19+02:00"
},
"plan": "Pro",
"limits": {
"pages": {
"used": 4,
"max": 10
},
"links": {
"used": 27,
"max": 100
},
"links_per_page": 50,
"socials_per_page": 8,
"requests_per_minute": 120
}
} Falta el token en la petición
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token desconocido o revocado
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} El plan del propietario no incluye la API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} El token no tiene el ámbito Lectura
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"read\" scope.",
"details": {
"required_scope": "read"
}
}
} Más de 120 peticiones en el minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
} Sin escribir código: la extensión del navegador
El mismo token conecta la extensión de TinyLink para Chrome: acorta la página que estás leyendo y lista tus enlaces cortos desde la barra del navegador.
En tu lenguaje
Cada ejemplo de esta documentación existe en curl, JavaScript, PHP y Python: elige la pestaña y tu elección se conserva de una página a otra. Nada obliga a usar uno de ellos: la API es HTTP y JSON, y cualquier otro cliente sirve también: Postman, o el módulo HTTP de Zapier y de Make. Acortar una dirección, por ejemplo:
curl -X POST https://api.tinylink.fr/v1/links \
-H "Authorization: Bearer tl_tu_token" \
-H "Content-Type: application/json" \
-d '{"url":"https://exemple.fr/promo","slug":"promo"}'
const response = await fetch('https://api.tinylink.fr/v1/links', {
method: 'POST',
headers: {
Authorization: 'Bearer tl_tu_token',
'Content-Type': 'application/json',
},
body: JSON.stringify({ url: 'https://exemple.fr/promo', slug: 'promo' }),
});
const data = await response.json();
$ch = curl_init('https://api.tinylink.fr/v1/links');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_tu_token', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['url' => 'https://exemple.fr/promo', 'slug' => 'promo']),
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
response = requests.post(
'https://api.tinylink.fr/v1/links',
headers={'Authorization': 'Bearer tl_tu_token'},
json={'url': 'https://exemple.fr/promo', 'slug': 'promo'},
)
data = response.json()
Convenciones
Las mismas reglas valen para todas las rutas:
- La dirección base es
https://api.tinylink.fr/v1.GET /v1, sin token, devuelve el nombre de la API, su versión y la dirección de esta documentación. - El cuerpo de una petición es un objeto JSON, enviado con
Content-Type: application/json. GETlee, con el ámbito Lectura.POSTcrea,PATCHmodifica yPUTpone una etiqueta, con el ámbito Escritura.DELETEelimina, con el ámbito Eliminación.- Una creación responde
201con el objeto creado, una modificación200con el objeto actualizado y una eliminación204sin contenido. - Las listas de páginas, de enlaces cortos y de elementos de una etiqueta están paginadas:
?page=y?per_page=(50 por defecto, 100 como máximo). La respuesta incluye un objetopagination:page,per_page,total,total_pages. - Una página o un enlace corto se designa por su identificador o por su dirección personalizada (slug). En los límites,
nullsignifica ilimitado.