Documentación de la API

API REST para acortar y administrar URLs desde cualquier aplicación externa, usando las mismas reglas y redirecciones que la web (http://rwsn.ar).

  • Base URL: https://rwsn.ar/api/v1
  • Formato: JSON (pedís y recibís application/json)
  • Autenticación: Bearer token, uno por usuario/aplicación

1. Obtener un token

Los tokens se generan desde tu cuenta, no vía API (por seguridad, no hay endpoint para crear tokens con otro token).

  1. Iniciá sesión y andá a tu menú de cuenta (arriba a la derecha) → API Tokens
  2. Ponele un nombre al token (ej. "Mi App") y creá
  3. Copiá el token en ese momento — se muestra una sola vez y no se puede recuperar después
  4. Podés revocar cualquier token desde esa misma pantalla en cualquier momento

Cada link que crees vía API queda asociado a la cuenta dueña del token, igual que si lo hubieras creado logueado en la web.

2. Autenticación

Todas las peticiones requieren el header:

Authorization: Bearer <TU_TOKEN>
Accept: application/json

Sin token válido, la API responde 401:

{ "message": "Unauthenticated." }

3. Endpoints

Crear (acortar una URL)

POST /api/v1/urls
Campo Tipo Requerido Descripción
long_url string La URL a acortar. Debe ser una URL válida (con esquema, ej. https://).
custom_key string No Keyword personalizada en vez de una generada al azar. Entre 3 y 11 caracteres, solo letras/números/guiones, no puede estar ya en uso.

Ejemplo:

curl -X POST https://rwsn.ar/api/v1/urls \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"long_url":"https://ejemplo.com/pagina-muy-larga"}'

Respuesta 201:

{
  "data": {
    "keyword": "1ee17",
    "short_url": "https://rwsn.ar/1ee17",
    "long_url": "https://ejemplo.com/pagina-muy-larga",
    "title": "Título obtenido automáticamente de la página",
    "is_custom": false,
    "created_at": "2026-08-26T22:26:30.000000Z",
    "updated_at": "2026-08-26T22:26:30.000000Z"
  }
}

Con keyword personalizada:

curl -X POST https://rwsn.ar/api/v1/urls \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"long_url":"https://ejemplo.com","custom_key":"mi-link"}'

Consultar detalle / estadísticas

GET /api/v1/urls/{keyword}
curl https://rwsn.ar/api/v1/urls/1ee17 \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"

Cualquier usuario autenticado puede consultar el detalle de cualquier keyword (igual que la página pública de detalle de la web).

Editar

PUT /api/v1/urls/{keyword}

Solo el dueño del link (o un admin) puede editarlo. title es opcional — si no se envía, se conserva el título actual.

curl -X PUT https://rwsn.ar/api/v1/urls/1ee17 \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"long_url":"https://ejemplo.com/nueva-pagina"}'

Borrar

DELETE /api/v1/urls/{keyword}

Solo el dueño del link (o un admin) puede borrarlo. Devuelve 204 si se borró correctamente.

curl -X DELETE https://rwsn.ar/api/v1/urls/1ee17 \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json"

4. Errores

Todas las respuestas de error son JSON.

401 Token ausente, inválido o revocado.
403 El link existe pero no te pertenece (para editar/borrar).
404 El keyword no existe.
422 Validación fallida o URL interna/blacklisteada.
503 El servicio alcanzó su capacidad máxima de keywords generables (mantenimiento).

5. Reglas heredadas de la web

  • No se pueden acortar URLs que apunten al propio dominio.
  • No se pueden usar dominios de la lista negra interna.
  • La keyword personalizada debe tener entre 3 y 11 caracteres, solo letras/números/guiones.
  • El link corto redirige exactamente igual que cualquiera creado desde la web.

6. Notas de seguridad

  • Tratá cada token como una contraseña: no lo publiques en repos públicos ni en el frontend de tu app.
  • Si un token se filtra, revocalo desde API Tokens en tu cuenta — es inmediato.
  • Podés tener varios tokens (uno por aplicación) para revocar acceso a una integración sin afectar a las demás.