Docs
Autenticación API

Autenticación API

Cómo autenticarse con la API de BeatsCode.

Todas las rutas protegidas de la API requieren un JWT access token en el header Authorization.

Obtener tokens

Login con email/contraseña

curl -X POST "https://api.beatscode.co/api/v1/auth/login" \
  --data-urlencode "username=tu@email.com" \
  --data-urlencode "password=tuContraseña"

Respuesta:

{
  "success": true,
  "message": "Successfully authenticated",
  "data": {
    "user": {
      "id": "uuid-del-usuario",
      "email": "tu@email.com",
      "name": "Tu Nombre",
      "is_verified": true,
      "is_active": true,
      "role": "USER"
    },
    "access_token": "eyJhbGciOi...",
    "refresh_token": "eyJhbGciOi...",
    "token_type": "bearer"
  }
}

Login con Google OAuth

curl -X POST "https://api.beatscode.co/api/v1/auth/google" \
  -H "Content-Type: application/json" \
  -d '{"token": "google-id-token"}'

Usar el token

Incluye el access token en el header Authorization de cada solicitud:

curl "https://api.beatscode.co/api/v1/auth/me" \
  -H "Authorization: Bearer eyJhbGciOi..."

Renovar tokens

Cuando el access token expire (30 minutos), usa el refresh token para obtener uno nuevo:

curl -X POST "https://api.beatscode.co/api/v1/auth/refresh" \
  -H "Content-Type: application/json" \
  -d '{"refresh_token": "eyJhbGciOi..."}'

Respuesta:

{
  "success": true,
  "data": {
    "access_token": "nuevo-access-token",
    "refresh_token": "nuevo-refresh-token",
    "token_type": "bearer"
  }
}

Cada refresh genera un nuevo par de tokens. El refresh token anterior no se invalida automáticamente, pero tiene una expiración de 7 días.

Cerrar sesión

Para cerrar sesión e invalidar el token actual:

curl -X POST "https://api.beatscode.co/api/v1/auth/logout" \
  -H "Authorization: Bearer eyJhbGciOi..."

El token se agrega a la lista negra de Redis y no puede reutilizarse.

Códigos de error

CódigoDescripción
401Token inválido, expirado o revocado
403Sin permisos suficientes para el recurso
400Usuario inactivo