Saltar a contenido

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 agregues clinic_context a integraciones que no lo usen.
  • Rate limit: 1.000 req/día default. Pedí incremento en soporte@wiservet.com si excede de forma legítima.