API del acortador de URLs
Crea enlaces cortos de iny.one desde tus propios scripts, backends o automatizaciones con un solo POST JSON. La API aplica el mismo etiquetado UTM, la misma revisión de seguridad y la misma analítica que el acortador web — y, como todo aquí, nunca pone una página de anuncios delante de tus visitantes.
Endpoint
Un solo endpoint hace el trabajo. Envía la URL de destino más un objeto utm con source, medium y campaign; pasa strings vacíos en los campos UTM que no quieras etiquetar.
POST https://iny.one/api/shorten
Request
- url — string · requerido
- URL de destino. Solo http(s); a los dominios sin protocolo se les añade https://. Se rechazan direcciones IP e iny.one mismo.
- utm.source — string · requerido (puede ir vacío)
- De dónde viene el tráfico, p. ej. newsletter, google. Se sanitiza a letras, números, guiones y guiones bajos.
- utm.medium — string · requerido (puede ir vacío)
- Tipo de canal, p. ej. email, cpc, social.
- utm.campaign — string · requerido (puede ir vacío)
- Nombre de campaña, p. ej. lanzamiento_julio.
cURL
curl -X POST https://iny.one/api/shorten \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/landing",
"utm": {
"source": "newsletter",
"medium": "email",
"campaign": "july_launch"
}
}'JavaScript (fetch)
const res = await fetch("https://iny.one/api/shorten", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
url: "https://example.com/landing",
utm: { source: "newsletter", medium: "email", campaign: "july_launch" },
}),
});
const json = await res.json();
// json.data.short -> "https://iny.one/abc1234"Respuesta
Las llamadas exitosas devuelven HTTP 200 con el enlace corto en data.short. Los problemas de validación devuelven 422, y alcanzar tu cuota mensual devuelve 429 — ambos con el mismo formato de error.
200 OK
{
"success": true,
"data": {
"short": "https://iny.one/abc1234"
},
"meta": {
"requestId": "3f6f4c1e-…",
"timestamp": "2026-07-21T12:00:00.000Z"
}
}422 / 429
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "…",
"status": 429,
"type": "…"
},
"meta": { "requestId": "…", "timestamp": "…" }
}Límites de uso
| Nivel | Límite | Notas |
|---|---|---|
| Anónimo (por IP) | 5 enlaces / mes | Los enlaces expiran a los 180 días |
| Cuenta gratuita | 50 enlaces / mes | Los enlaces no expiran; incluye panel de analítica |
| Basic | 1.000 enlaces / mes | Añade utm_content y utm_term |
| Pro | 10.000 enlaces / mes | Añade utm_id |
Bueno saberlo
- Solo POST con cuerpo JSON — no existe un endpoint GET /shorten?url=, así los destinos no se filtran en logs ni referrers.
- Los dominios de destino se revisan contra una lista de dominios inseguros antes de crear el enlace.
- Las llamadas autenticadas hoy reutilizan la sesión web (cookies). Las API keys dedicadas están en el roadmap.
- Las redirecciones responden con HTTP 307 y quedan excluidas del índice de búsqueda, así tu página de destino conserva las señales SEO.
Preguntas frecuentes del API
¿La API es gratis?
Sí, dentro de los mismos límites mensuales que la app web — mira la tabla de arriba. Sin tarjeta para los niveles anónimo y gratuito.
¿Necesito una API key?
No para uso anónimo. Las API keys dedicadas están planificadas; hoy las llamadas autenticadas usan la misma sesión que la web.
¿Hay endpoint GET?
No — solo POST JSON. Así las URLs y los valores UTM no quedan en logs ni referrers.
¿Los enlaces creados por API expiran?
Los anónimos expiran a los 180 días; los creados con sesión iniciada no expiran.
¿Necesitas más volumen? Compara planes¿Prefieres el formulario web? Acorta una URL