REST API
Crea enlaces cortos, consulta estadísticas de clics y genera códigos QR desde tu propio código. JSON sobre HTTPS y una sola cabecera para autenticarte.
- URL base
- https://urlik.xyz/api/
- Autenticación
- X-Api-Key
- Formato
- JSON · UTF-8
- Métodos
- 10
- Webhooks
- Webhooks
Inicio rápido
Tu primer enlace corto en una sola petición.
Obtén una clave
Créala en tu cuenta, en la sección API. Puedes limitar sus permisos.
Envía la petición
Haz un POST con la URL larga y la cabecera X-Api-Key, y un alias si lo quieres.
Usa el resultado
return.url es el enlace corto, return.qr su código QR y return.stats la página de estadísticas.
Tu primera petición
curl -X POST https://urlik.xyz/api/getLink.json \ -H "X-Api-Key: $URLIK_KEY" \ -d "url=https://example.com/spring-sale" \ -d "alias=spring" \ -d "mode=redirect"
const res = await fetch("https://urlik.xyz/api/getLink.json", {
method: "POST",
headers: { "X-Api-Key": process.env.URLIK_KEY },
body: new URLSearchParams({ url: "https://example.com/spring-sale", alias: "spring" })
});
const data = await res.json();
console.log(data.return.url); // https://urlik.xyz/spring$ch = curl_init("https://urlik.xyz/api/getLink.json");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["X-Api-Key: " . getenv("URLIK_KEY")],
CURLOPT_POSTFIELDS => ["url" => "https://example.com/spring-sale", "alias" => "spring"],
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
echo $data["return"]["url"]; // https://urlik.xyz/springimport os, requests
r = requests.post(
"https://urlik.xyz/api/getLink.json",
headers={"X-Api-Key": os.environ["URLIK_KEY"]},
data={"url": "https://example.com/spring-sale", "alias": "spring"},
)
print(r.json()["return"]["url"]) # https://urlik.xyz/spring{
"status": "success",
"return": {
"hex": "spring",
"url": "https://urlik.xyz/spring",
"qr": "https://urlik.xyz/qr/spring.png",
"stats": "https://urlik.xyz/spring+",
"mode": "redirect"
}
}Autenticación
Envía tu clave en la cabecera X-Api-Key. El acortado básico funciona sin clave; los enlaces creados con clave pertenecen a tu cuenta.
Formato de respuesta
Cada método responde con JSON: status es success o error, message explica el error y return contiene los datos.
{ "status": "success", "message": "...", "return": { ... } }Enlaces
POST/api/getLink.jsonCrear un enlace cortoClave opcional
| Parámetro | Obligatorio | Descripción |
|---|---|---|
url | obligatorio | URL de destino, http o https |
alias | opcional | Código propio, 2–32 caracteres: letras, cifras, _ y - |
mode | opcional | redirect (por defecto), preview o frame |
expire | opcional | Duración en segundos; 0 significa sin caducidad |
password | opcional | Contraseña que se pide para continuar |
curl -X POST https://urlik.xyz/api/getLink.json -H "X-Api-Key: $URLIK_KEY" \ -d "url=https://example.com/spring-sale"
const res = await fetch("https://urlik.xyz/api/getLink.json", {
method: "POST",
headers: { "X-Api-Key": process.env.URLIK_KEY },
body: new URLSearchParams({ url: "https://example.com/spring-sale" })
});
console.log(await res.json());$ch = curl_init("https://urlik.xyz/api/getLink.json");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["X-Api-Key: " . getenv("URLIK_KEY")],
CURLOPT_POSTFIELDS => ["url" => "https://example.com/spring-sale"],
CURLOPT_RETURNTRANSFER => true,
]);
print_r(json_decode(curl_exec($ch), true));import os, requests
r = requests.post(
"https://urlik.xyz/api/getLink.json",
headers={"X-Api-Key": os.environ["URLIK_KEY"]},
data={"url": "https://example.com/spring-sale"},
)
print(r.json())POST/api/stats.jsonEstadísticas del enlace: clics por día, fuentes, dispositivos y navegadoresClave opcional
| Parámetro | Obligatorio | Descripción |
|---|---|---|
code | obligatorio | Código corto del enlace |
curl -X POST https://urlik.xyz/api/stats.json -H "X-Api-Key: $URLIK_KEY" \ -d "code=spring"
const res = await fetch("https://urlik.xyz/api/stats.json", {
method: "POST",
headers: { "X-Api-Key": process.env.URLIK_KEY },
body: new URLSearchParams({ code: "spring" })
});
console.log(await res.json());$ch = curl_init("https://urlik.xyz/api/stats.json");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["X-Api-Key: " . getenv("URLIK_KEY")],
CURLOPT_POSTFIELDS => ["code" => "spring"],
CURLOPT_RETURNTRANSFER => true,
]);
print_r(json_decode(curl_exec($ch), true));import os, requests
r = requests.post(
"https://urlik.xyz/api/stats.json",
headers={"X-Api-Key": os.environ["URLIK_KEY"]},
data={"code": "spring"},
)
print(r.json())POST/api/links.jsonLista de tus enlacesRequiere clave
Sin parámetros: la clave identifica tu cuenta.
curl -X POST https://urlik.xyz/api/links.json -H "X-Api-Key: $URLIK_KEY"
const res = await fetch("https://urlik.xyz/api/links.json", {
method: "POST",
headers: { "X-Api-Key": process.env.URLIK_KEY },
body: new URLSearchParams({ })
});
console.log(await res.json());$ch = curl_init("https://urlik.xyz/api/links.json");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["X-Api-Key: " . getenv("URLIK_KEY")],
CURLOPT_POSTFIELDS => [],
CURLOPT_RETURNTRANSFER => true,
]);
print_r(json_decode(curl_exec($ch), true));import os, requests
r = requests.post(
"https://urlik.xyz/api/links.json",
headers={"X-Api-Key": os.environ["URLIK_KEY"]},
data={},
)
print(r.json())POST/api/update.jsonModificar un enlaceRequiere clave
| Parámetro | Obligatorio | Descripción |
|---|---|---|
code | obligatorio | Código corto del enlace |
url, mode, expire, password | opcional | Nuevos valores de los campos que cambias |
curl -X POST https://urlik.xyz/api/update.json -H "X-Api-Key: $URLIK_KEY" \ -d "code=spring"
const res = await fetch("https://urlik.xyz/api/update.json", {
method: "POST",
headers: { "X-Api-Key": process.env.URLIK_KEY },
body: new URLSearchParams({ code: "spring" })
});
console.log(await res.json());$ch = curl_init("https://urlik.xyz/api/update.json");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["X-Api-Key: " . getenv("URLIK_KEY")],
CURLOPT_POSTFIELDS => ["code" => "spring"],
CURLOPT_RETURNTRANSFER => true,
]);
print_r(json_decode(curl_exec($ch), true));import os, requests
r = requests.post(
"https://urlik.xyz/api/update.json",
headers={"X-Api-Key": os.environ["URLIK_KEY"]},
data={"code": "spring"},
)
print(r.json())POST/api/delete.jsonEliminar un enlaceRequiere clave
| Parámetro | Obligatorio | Descripción |
|---|---|---|
code | obligatorio | Código corto del enlace |
curl -X POST https://urlik.xyz/api/delete.json -H "X-Api-Key: $URLIK_KEY" \ -d "code=spring"
const res = await fetch("https://urlik.xyz/api/delete.json", {
method: "POST",
headers: { "X-Api-Key": process.env.URLIK_KEY },
body: new URLSearchParams({ code: "spring" })
});
console.log(await res.json());$ch = curl_init("https://urlik.xyz/api/delete.json");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["X-Api-Key: " . getenv("URLIK_KEY")],
CURLOPT_POSTFIELDS => ["code" => "spring"],
CURLOPT_RETURNTRANSFER => true,
]);
print_r(json_decode(curl_exec($ch), true));import os, requests
r = requests.post(
"https://urlik.xyz/api/delete.json",
headers={"X-Api-Key": os.environ["URLIK_KEY"]},
data={"code": "spring"},
)
print(r.json())Medios, QR y correo temporal
Estos métodos requieren la cabecera X-Api-Key o una llamada a través de RapidAPI.
GET/api/download.jsonDescargar vídeo o foto de más de 1000 sitios: formatos con enlaces firmadosRequiere clave
| Parámetro | Obligatorio | Descripción |
|---|---|---|
url | obligatorio | Dirección de una página con vídeo o foto |
curl -H "X-Api-Key: $URLIK_KEY" "https://urlik.xyz/api/download.json?url=https%3A%2F%2Fexample.com%2Fspring-sale"
const res = await fetch("https://urlik.xyz/api/download.json?" + new URLSearchParams({ url: "https://example.com/spring-sale" }), {
headers: { "X-Api-Key": process.env.URLIK_KEY }
});
console.log(await res.json());$ch = curl_init("https://urlik.xyz/api/download.json?" . http_build_query(["url" => "https://example.com/spring-sale"]));
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["X-Api-Key: " . getenv("URLIK_KEY")],
CURLOPT_RETURNTRANSFER => true,
]);
print_r(json_decode(curl_exec($ch), true));import os, requests
r = requests.get(
"https://urlik.xyz/api/download.json",
headers={"X-Api-Key": os.environ["URLIK_KEY"]},
params={"url": "https://example.com/spring-sale"},
)
print(r.json())GET/api/qr.jsonGenerar un código QR en PNG o SVGRequiere clave
| Parámetro | Obligatorio | Descripción |
|---|---|---|
data | obligatorio | Texto o dirección a codificar |
format | opcional | png o svg |
fg, bg | opcional | Color del código y del fondo, hex |
ecc | opcional | Corrección de errores: L, M, Q o H |
size | opcional | Tamaño de la imagen en píxeles |
curl -H "X-Api-Key: $URLIK_KEY" "https://urlik.xyz/api/qr.json?data=https%3A%2F%2Furlik.xyz"
const res = await fetch("https://urlik.xyz/api/qr.json?" + new URLSearchParams({ data: "https://urlik.xyz" }), {
headers: { "X-Api-Key": process.env.URLIK_KEY }
});
console.log(await res.json());$ch = curl_init("https://urlik.xyz/api/qr.json?" . http_build_query(["data" => "https://urlik.xyz"]));
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["X-Api-Key: " . getenv("URLIK_KEY")],
CURLOPT_RETURNTRANSFER => true,
]);
print_r(json_decode(curl_exec($ch), true));import os, requests
r = requests.get(
"https://urlik.xyz/api/qr.json",
headers={"X-Api-Key": os.environ["URLIK_KEY"]},
params={"data": "https://urlik.xyz"},
)
print(r.json())GET/api/mailbox.jsonObtener o crear una dirección temporalRequiere clave
| Parámetro | Obligatorio | Descripción |
|---|---|---|
address | username | opcional | Dirección temporal o nombre para una nueva; vacío crea una aleatoria |
curl -H "X-Api-Key: $URLIK_KEY" "https://urlik.xyz/api/mailbox.json?address=demo%40example.com"
const res = await fetch("https://urlik.xyz/api/mailbox.json?" + new URLSearchParams({ address: "[email protected]" }), {
headers: { "X-Api-Key": process.env.URLIK_KEY }
});
console.log(await res.json());$ch = curl_init("https://urlik.xyz/api/mailbox.json?" . http_build_query(["address" => "[email protected]"]));
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["X-Api-Key: " . getenv("URLIK_KEY")],
CURLOPT_RETURNTRANSFER => true,
]);
print_r(json_decode(curl_exec($ch), true));import os, requests
r = requests.get(
"https://urlik.xyz/api/mailbox.json",
headers={"X-Api-Key": os.environ["URLIK_KEY"]},
params={"address": "[email protected]"},
)
print(r.json())GET/api/messages.jsonLista de mensajes de un buzón temporalRequiere clave
| Parámetro | Obligatorio | Descripción |
|---|---|---|
address | obligatorio | Dirección temporal |
curl -H "X-Api-Key: $URLIK_KEY" "https://urlik.xyz/api/messages.json?address=demo%40example.com"
const res = await fetch("https://urlik.xyz/api/messages.json?" + new URLSearchParams({ address: "[email protected]" }), {
headers: { "X-Api-Key": process.env.URLIK_KEY }
});
console.log(await res.json());$ch = curl_init("https://urlik.xyz/api/messages.json?" . http_build_query(["address" => "[email protected]"]));
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["X-Api-Key: " . getenv("URLIK_KEY")],
CURLOPT_RETURNTRANSFER => true,
]);
print_r(json_decode(curl_exec($ch), true));import os, requests
r = requests.get(
"https://urlik.xyz/api/messages.json",
headers={"X-Api-Key": os.environ["URLIK_KEY"]},
params={"address": "[email protected]"},
)
print(r.json())GET/api/message.jsonLeer un mensajeRequiere clave
| Parámetro | Obligatorio | Descripción |
|---|---|---|
address | obligatorio | Dirección temporal |
id | obligatorio | Id del mensaje de la lista del buzón |
curl -H "X-Api-Key: $URLIK_KEY" "https://urlik.xyz/api/message.json?address=demo%40example.com&id=1"
const res = await fetch("https://urlik.xyz/api/message.json?" + new URLSearchParams({ address: "[email protected]", id: "1" }), {
headers: { "X-Api-Key": process.env.URLIK_KEY }
});
console.log(await res.json());$ch = curl_init("https://urlik.xyz/api/message.json?" . http_build_query(["address" => "[email protected]", "id" => "1"]));
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["X-Api-Key: " . getenv("URLIK_KEY")],
CURLOPT_RETURNTRANSFER => true,
]);
print_r(json_decode(curl_exec($ch), true));import os, requests
r = requests.get(
"https://urlik.xyz/api/message.json",
headers={"X-Api-Key": os.environ["URLIK_KEY"]},
params={"address": "[email protected]", "id": "1"},
)
print(r.json())No se encontró nada
Ningún método coincide. Prueba con una ruta como qr o stats.
Pruébalo en vivo
Explora y llama a cada endpoint aquí mismo. Pega tu clave de API con el botón Authorize para hacer peticiones autenticadas.
Insertar el acortador
Pegue este fragmento en cualquier página para añadir un acortador de URL funcional con enlace a urlik.xyz:
<iframe src="https://urlik.xyz/embed" style="width:100%;max-width:520px;height:150px;border:0" title="URL shortener by urlik.xyz" loading="lazy"></iframe>
Una API REST sencilla para enlaces cortos
La API REST de Urlik te permite crear, leer, actualizar y eliminar enlaces cortos desde tu propio código y obtener las estadísticas de clics en JSON. Es una API HTTPS sin complicaciones — envías una petición POST y recibes una respuesta JSON predecible — así que funciona desde cualquier lenguaje o plataforma.
El acortado básico no necesita credenciales. Para asociar los enlaces a tu cuenta y gestionarlos después, envía tu clave en la cabecera X-Api-Key, que encontrarás en tu cuenta. Las respuestas siguen siempre la misma estructura de status, message y return que se muestra abajo.
¿Necesito una clave API?
No para el acortado básico — puedes crear un enlace de forma anónima. Una clave, disponible en tu cuenta, asocia los enlaces a ti y es necesaria para listarlos, actualizarlos o eliminarlos.
¿En qué formato están las respuestas?
Cada endpoint devuelve JSON con un status, un message legible y un objeto return con los datos, así que el análisis es consistente entre llamadas.
¿Hay un límite de peticiones?
Sí, las peticiones tienen un límite por cliente para mantener el servicio rápido y justo. Las claves autenticadas tienen un margen mayor que el tráfico anónimo.
¿Puedo usarla desde cualquier lenguaje?
Sí. Es una API JSON sobre HTTPS estándar, así que cualquier cosa capaz de enviar una petición POST — curl, Python, PHP, JavaScript o Go — puede usarla.
Urlik reúne un conjunto de herramientas web rápidas y respetuosas con la privacidad en un solo lugar, para que resuelvas las tareas cotidianas con enlaces sin hacer malabares con servicios sueltos ni crear cuentas. Ya sea que compartas una campaña, cobres un pago, verifiques un alta o envíes un archivo confidencial, hay una herramienta gratuita y dedicada lista para el trabajo.