Autenticación
Wiservet expone dos esquemas de autenticación según la superficie:
| Superficie | Token | Header | Vida útil |
|---|---|---|---|
| API REST | JWT firmado HS256 | Authorization: Bearer <jwt> |
15 minutos (refresh 7 días) |
| MCP público | API key per-clínica | Authorization: Bearer wsv_<32-char> |
Sin expiración (rotable) |
API key MCP¶
1. Crear desde la consola admin¶
curl -X POST https://wiservet.com/api/v1/mcp/keys \
-H "Authorization: Bearer <jwt-clinic-owner>" \
-H "Content-Type: application/json" \
-d '{
"name": "Mi integración Claude",
"scopes": ["read", "query"],
"rate_limit_per_day": 1000
}'
Respuesta (la API key se devuelve una sola vez):
{
"api_key": "wsv_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
"id": "9f...",
"key_prefix": "wsv_a1b2",
"scopes": ["read", "query"],
"rate_limit_per_day": 1000,
"expires_at": null
}
2. Rotar¶
curl -X POST https://wiservet.com/api/v1/mcp/keys/{id}/rotate \
-H "Authorization: Bearer <jwt-clinic-owner>"
La key vieja deja de funcionar inmediatamente (sin grace period).
3. Revocar¶
curl -X DELETE https://wiservet.com/api/v1/mcp/keys/{id} \
-H "Authorization: Bearer <jwt-clinic-owner>"
JWT (REST API)¶
Login con email + password retorna access_token (15 min) + cookie httpOnly wiservet_refresh (7 días).
curl -X POST https://wiservet.com/api/v1/auth/login \
-H "Content-Type: application/json" \
--cookie-jar cookies.txt \
-d '{"email":"...", "password":"..."}'
Refresh transparente:
curl -X POST https://wiservet.com/api/v1/auth/refresh \
--cookie cookies.txt --cookie-jar cookies.txt
Buenas prácticas¶
- Nunca commitear API keys ni JWT (incluido logs/screenshots).
- Rotar cada 90 días las API keys productivas.
- Scopes mínimos: para reportes solo lectura, otorga
read+query. No agreguesclinic_contexta integraciones que no lo usen. - Rate limit: 1.000 req/día default. Pedí incremento en
soporte@wiservet.comsi excede de forma legítima.