Autenticación
Cada llamada a la API pública de Wiselook lleva un bearer token emitido desde un cliente OAuth2 que el administrador de tu organización creó en la página de Clientes API.
Token client-credentials (tu backend)
Tu integración de servidor a servidor usa un token OAuth2 client-credentials:
curl -X POST https://<WISELOOK_HOST>/auth/application/o/token/ \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=<YOUR_CLIENT_ID>' \
--data-urlencode 'client_secret=<YOUR_CLIENT_SECRET>' \
--data-urlencode 'scope=<space-separated scopes>'
La respuesta contiene un access_token (un JWT) y expires_in. Envíalo en cada llamada a la
API:
Authorization: Bearer <access_token>
Solicita solo los scopes que se concedieron a tu cliente. Solicitar un scope que el cliente no tiene hace que falle la petición del token.
Scopes disponibles
Los scopes se nombran <resource>:<verb>. En el portal se llaman permisos: un administrador
los elige al crear el cliente en Clientes API, y quedan
fijos durante toda la vida del cliente. Estos son todos los scopes que se pueden conceder a un
cliente:
| Scope | Etiqueta en el portal | Abre |
|---|---|---|
widget_sessions:write | Crear sesiones de visitante del widget | POST /v1/widgets/{id}/sessions (Integrar el widget) |
access_codes:write | Crear y revocar códigos de invitación | POST /v1/access-codes, DELETE /v1/access-codes/{id} |
access_codes:read | Listar códigos de invitación y su uso | GET /v1/access-codes |
tenant_methodologies:read | Listar metodologías adoptadas | GET /v1/adopted-methodologies |
tags:read | Listar etiquetas (equipos, departamentos, cohortes) | GET /v1/tags |
tenant_users:read | Listar los usuarios de tu organización (membresías, roles, etiquetas) | GET /v1/tenant-users, …/{id}, …/{id}/tags |
tenant_users:write | Actualizar nombre, rol, estado y etiquetas de un usuario | PATCH /v1/tenant-users/{id}, POST …/{id}/tags, DELETE …/{id}/tags/{tag_id} |
evaluations:write | Iniciar una evaluación para un miembro y llevar su conversación | POST /v1/members/{id}/evaluations, POST …/evaluations/{evaluation_id}/chat/messages |
evaluations:read | Consultar una evaluación y su resultado | GET /v1/members/{id}/evaluations/{evaluation_id} |
Integrar el widget solo necesita widget_sessions:write. Una vez emitida una sesión de visitante,
el widget lleva la conversación por sí mismo (ver
Emitir una sesión de visitante).
Las Guías recorren cada una de las demás integraciones.
JWT de visitante (el widget, en el navegador)
Un navegador no puede guardar de forma segura un secreto de cliente, así que el widget usa en su
lugar un JWT de visitante de corta duración. Tu backend emite uno por sesión de visitante
llamando al endpoint público de emisión con tu token client-credentials (scope
widget_sessions:write):
curl -X POST https://<WISELOOK_HOST>/v1/widgets/<WIDGET_ID>/sessions \
-H "Authorization: Bearer <CLIENT_CREDENTIALS_TOKEN>" \
-H 'Content-Type: application/json' \
-d '{"external_user_id": "<your-stable-user-id>", "methodology_id": "<METHODOLOGY_UUID>"}'
La respuesta contiene el JWT de visitante. Entrégaselo al widget; el widget lo envía como bearer
en la superficie de evaluación (GET /v1/widgets/{id}, /v1/evaluations, /v1/chat/*). El JWT
está firmado con Ed25519, caduca en unos 15 minutos y está ligado a los orígenes permitidos del
widget, de modo que un token filtrado no puede reutilizarse desde otro sitio.
Consulta Integrar el widget para el flujo completo, incluida la reemisión cuando una sesión caduca en mitad de la conversación.
A qué puede acceder tu token
- Solo a tu organización. Cada token está limitado a tu organización (tenant). No puedes leer datos de otra organización; adivinar o proporcionar ids de otra organización no devuelve nada.
- Solo a tus scopes concedidos. Un token solo puede hacer lo que sus scopes permiten; una llamada que vaya más allá se rechaza.
- La superficie pública de la API. Todos los endpoints documentados en este sitio (las rutas
/v1/*) están a tu disposición con el token y el scope adecuados.