API REST (Desarrolladores)
Autenticacion

Autenticacion

La API de DPOLab utiliza JWT (JSON Web Tokens) para autenticacion. Cada request debe incluir un token valido en el header Authorization.

Flujo de autenticacion

1. POST /v1/auth/register  →  Crear cuenta
2. POST /v1/auth/login     →  Obtener access_token + refresh_token
3. Usar access_token en cada request
4. POST /v1/auth/refresh   →  Renovar tokens cuando expiren

Registro

curl -X POST https://api.dpolab.com/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "password": "M1Contrasena!segura",
    "name": "Maria Garcia",
    "companyName": "Mi Empresa SpA",
    "companyRut": "76123456-7"
  }'

Respuesta exitosa (201):

{
  "success": true,
  "data": {
    "user": {
      "id": "usr_abc123",
      "email": "[email protected]",
      "name": "Maria Garcia"
    },
    "tenant": {
      "id": "tnt_xyz789",
      "slug": "mi-empresa-spa",
      "name": "Mi Empresa SpA"
    }
  }
}
⚠️

El campo companyRut se valida con el algoritmo modulo 11 chileno. Si el RUT no es valido, la API retorna un error INVALID_RUT.

Login

curl -X POST https://api.dpolab.com/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "password": "M1Contrasena!segura"
  }'

Respuesta exitosa (200):

{
  "success": true,
  "data": {
    "accessToken": "eyJhbGciOiJIUzI1NiIs...",
    "refreshToken": "eyJhbGciOiJIUzI1NiIs...",
    "expiresIn": 900
  }
}
TokenDuracionUso
accessToken15 minutosIncluir en header Authorization: Bearer {token}
refreshToken7 diasUsar para obtener un nuevo accessToken

Refresh token

curl -X POST https://api.dpolab.com/v1/auth/refresh \
  -H "Content-Type: application/json" \
  -d '{
    "refreshToken": "eyJhbGciOiJIUzI1NiIs..."
  }'

Respuesta exitosa (200):

{
  "success": true,
  "data": {
    "accessToken": "eyJhbGciOiJIUzI1NiIs...",
    "refreshToken": "eyJhbGciOiJIUzI1NiIs...",
    "expiresIn": 900
  }
}

Usar el token

Incluye el accessToken en todas las requests:

curl -X GET https://api.dpolab.com/v1/rat/activities \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Errores de autenticacion

CodigoHTTPDescripcion
INVALID_CREDENTIALS401Email o contrasena incorrectos
TOKEN_EXPIRED401El access token expiro, usa refresh
TOKEN_INVALID401Token malformado o invalido
REFRESH_TOKEN_EXPIRED401El refresh token expiro, vuelve a hacer login
INVALID_RUT422RUT de empresa no valido
EMAIL_ALREADY_EXISTS409Ya existe una cuenta con ese correo
TENANT_NOT_FOUND404El tenant no existe

Formato de error:

{
  "success": false,
  "error": {
    "code": "TOKEN_EXPIRED",
    "message": "El token de acceso ha expirado. Usa el refresh token para obtener uno nuevo."
  }
}

El tenant se obtiene automaticamente del JWT. No es necesario (ni permitido) enviarlo como parametro en body o query string. Esto garantiza el aislamiento multi-tenant.