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.
Crea el tenant y el primer usuario en una sola llamada — no existe una etapa manual de aprobación para empezar a probar.
{
"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,tenantIdyrole— el tenant siempre se resuelve a partir del token, nunca de un header suelto. refreshTokenes 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.
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.
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:
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:
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.
