AllyOneCRM / Autenticación

Autenticación

AllyOneCRM tiene dos modelos de credencial, para dos usos distintos: sesión de usuario (producto/dashboard) e integración servidor a servidor (API).

Sesión de usuario — JWT

La usa la propia aplicación web y cualquier cliente que necesite actuar como un usuario con sesión iniciada.

POST/v1/auth/register

Crea el tenant y el primer usuario en una sola llamada — no existe una etapa manual de aprobación para empezar a probar.

Respuesta
{
  "accessToken": "eyJhbGciOiJIUzI1NiIs...",
  "refreshToken": "9f2c9e7a-...",
  "tenant": { "id": "...", "name": "..." },
  "user": { "id": "...", "email": "...", "role": "owner" }
}

Envía el token en toda llamada autenticada:

Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
  • Algoritmo HS256, expira en 4 horas.
  • El payload contiene userId, tenantId y role — el tenant siempre se resuelve a partir del token, nunca de un header suelto.
  • refreshToken es un UUID opaco con TTL deslizante de 24 h — cada uso renueva la ventana.

Integración servidor a servidor — API Key

Para llamar a la API desde tu backend, sin un usuario con sesión iniciada detrás.

POST/v1/api-keys

Solo el owner del tenant crea claves. La clave se muestra en texto plano una única vez, al crearla — el backend guarda solo su hash (SHA-256). Si pierdes el valor, debes generar una nueva.

Formato de la clave
crm_live_3f9a1c...  (prefijo + 64 caracteres hex)

Úsala en el header en cada llamada:

X-API-Key: crm_live_3f9a1c...

Alcance

Toda clave lleva una lista explícita de permisos, por ejemplo:

contacts.readcontacts.writejourneys.readsettings.manage

O ["*"] para acceso irrestricto — una elección consciente del owner al crearla, nunca el valor implícito por defecto. Para ajustar permisos sin invalidar la clave existente:

PATCH/v1/api-keys/:id/permissions
Rate limit

300 solicitudes por minuto por usuario con sesión, o por dirección IP de origen con API key (rutas de login y registro: 5 cada 15 minutos). Toda respuesta trae X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset; al excederlo, la API responde 429 con Retry-After. Detalles en Errores y límites. Si tu integración necesita más throughput, habla con el equipo de AllyOne.

Autenticación — AllyOneCRM