Acortar un enlace
Un enlace corto es algo pequeño hasta que el dominio que lleva no es el suyo, y de repente cada clic transmite la marca de otro en vez de la suya. Esta API convierte cualquier URL larga en una corta servida desde su propio dominio, devuelta de forma asíncrona para que encaje en flujos de registro, pipelines de contenido y herramientas de marketing sin frenarlos.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
Por qué importa el dominio del enlace
Un enlace acortado sobre un dominio genérico compartido se reconoce de inmediato como de terceros, y así lo tratan los destinatarios: algunos filtros de correo los marcan, algunos usuarios dudan antes de hacer clic. Servir la redirección desde un dominio en el que su audiencia ya confía cambia esa ecuación por completo. dev.short_url se construyó alrededor de esa diferencia: apunta a un subdominio que controla, y cada enlace que genera refleja su marca, no la de un desconocido.
Qué ocurre en cada llamada
Envía la URL de destino y, opcionalmente, un slug preferido, una expiración personalizada u otras indicaciones de ruteo. La tarea se encola de inmediato con un task_id, y la URL corta final llega por su webhook firmado o por un enlace firmado válido durante 24 horas: el mismo modelo de entrega que el resto de nuestras utilidades de desarrollo, así que no aprende un patrón nuevo por cada endpoint. Una vez activo, el enlace corto se resuelve a través de nuestra infraestructura de redirección sin que tenga que operar un servicio aparte.
Quién necesita un acortador y por qué
Equipos de marketing que quieren saber qué canal generó cada clic. Productos SaaS que generan enlaces compartibles para invitaciones o programas de referidos, donde una URL larga y llena de parámetros se ve poco confiable. Medios impresos o fuera de línea: un código QR o una URL dictada solo son útiles si son lo bastante cortos para leerse en voz alta o escribirse a mano. Herramientas internas que necesitan enlaces estables y memorables hacia paneles o reportes que de otro modo serían una pared de parámetros.
Un poco de historia sobre por qué existe esto
Los acortadores de enlaces se volvieron comunes cuando las redes sociales impusieron límites de caracteres y los equipos de marketing necesitaban rastrear clics sin saturar una publicación; los primeros servicios masivos cambiaron brevedad por un dominio de terceros, un compromiso razonable antes de que el acortamiento con dominio propio fuera accesible a gran escala. El acortamiento sobre dominio propio elimina ese compromiso por completo.
Cómo encaja en un pipeline
Como la generación es asíncrona, puede pedir miles de enlaces cortos a partir de una exportación masiva de campaña o un script de migración de contenido sin mantener una conexión abierta, y procesar los webhooks a medida que llegan. Combínela con el endpoint de analítica de clics si además quiere saber qué pasa después de que alguien hace clic: las dos están pensadas para usarse juntas, no como productos separados.
Qué puede hacer con ella
Enlaces de referidos con marca
Genere un enlace corto sobre su dominio para el código de referido de cada usuario, en vez de exponer una URL larga con parámetros de seguimiento.
Impresos y empaques
Coloque una URL corta y legible en empaques o rótulos donde un enlace completo sería demasiado largo para caber o incómodo de escribir a mano.
Seguimiento de campañas por canal
Cree un enlace corto distinto para cada canal publicitario o boletín, para medir el rendimiento de cada uno por separado más adelante.
Migración de una estructura de enlaces antigua
Genere en lote URL cortas para miles de artículos con slugs viejos durante una migración de sitio, procesando resultados conforme llegan los webhooks.
Preguntas frecuentes
¿Puedo usar mi propio dominio para los enlaces cortos?
Sí, ese es el núcleo de esta API: los enlaces se sirven desde un dominio que controla, no uno genérico compartido.
¿El acortador de URL es gratis?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Qué tan rápido recibo el enlace corto?
La solicitud se acepta de inmediato con un task_id, y el resultado llega por webhook firmado o por un enlace firmado dentro de la ventana normal de procesamiento, sin necesidad de sondeo si usa el webhook.
¿Puedo elegir un slug personalizado en vez de uno aleatorio?
Sí, puede pedir un slug preferido; si ya está tomado recibirá un error claro en vez de una sustitución silenciosa.
¿Se cobran las solicitudes fallidas?
No. Cada tarea tiene hasta tres reintentos, y solo se cobra cuando se completa con éxito.
¿Qué pasa con la URL de destino después de procesarla?
Se conserva solo durante el período de retención activo y se elimina después; nunca se usa para entrenar modelos.
¿Cuánto cuesta por enlace?
0.002 dólares por solicitud, sin cargo oculto por clic en el paso de acortamiento.
¿Puedo generar enlaces cortos en lote?
Sí: como cada llamada es asíncrona y no bloqueante, puede lanzar lotes grandes y dejar que los webhooks lleguen conforme cada uno se completa.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/dev/short-url \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/dev/short-url", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/short-url",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/short-url", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/short-url", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"input": "…"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.short_url",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |