pk_live_… del canal Widget (API) autoriza llamadas directas a la API de sesiones del agente — conversaciones duraderas con stream de eventos, preguntas y aprobaciones que el agente puede plantear, y control de sesión. El widget web usa exactamente esta API por debajo.
- Base:
https://agents.juryo.ai - Autenticación: cabecera
Authorization: Bearer pk_live_…
¿Qué API?
Ambas usan la misma clave. Elige según lo que necesite tu integración:
Si no necesitas los controles de sesión, usa la API de chat.
La clave identifica a tu despacho como inquilino. Cualquier sistema que la presente puede iniciar conversaciones con tu agente — igual que cualquier visitante de tu web puede abrir el widget.
Rutas
Las rutas de sesión usan únicamente identificadores de sesión duraderos. Crea la sesión explícitamente y usa el ID devuelto en la ruta de cada seguimiento, control y stream.
Iniciar una sesión
sessionIdes el identificador permanente de la sesión. Guárdalo — va en la ruta URL de todas las llamadas posteriores. El mismo id se devuelve también en la cabecerax-eve-session-id.status: "accepted"significa que el mensaje quedó encolado de forma duradera. La respuesta del agente no viene en esta respuesta — léela del stream de eventos.
Enviar un mensaje de seguimiento
Cuando la sesión espera el siguiente mensaje del usuario:message o inputResponses. Usa inputResponses para responder a una pregunta o solicitud de aprobación pendiente del agente (un evento input.requested en el stream):
409 con {"code": "session_not_active", "error": "The session is no longer active.", "ok": false}. La ruta nunca crea una sesión de reemplazo — inicia una nueva explícitamente con POST /eve/v1/session.
Seguir la respuesta en directo
La sesión emite eventos JSON delimitados por saltos de línea (application/x-ndjson) mientras el agente trabaja — un objeto JSON por línea:
message.completed— la respuesta completa del agente para ese turno.session.waiting— el turno terminó y la sesión está lista para tu siguiente seguimiento.input.requested— el agente pregunta algo o pide una aprobación; respóndela coninputResponsesen la ruta de seguimiento.turn.failed/session.failed— el turno o la sesión fallaron;data.messagelleva el motivo.
*.appended y quedarse solo con los *.completed.
Por compatibilidad, el evento
session.waiting aún incluye un campo data.continuationToken. Es simplemente el ID de sesión — ignóralo y sigue usando el sessionId que ya tienes.Gestionar una sesión
Todas las rutas de control son asíncronas:"accepted" significa que la petición quedó encolada de forma duradera, y el resultado se confirma en el stream de eventos. Nunca crean sesiones — un ID de sesión inactivo devuelve "no_active_session" (o "no_active_turn" en cancel).
Cancelar el turno en curso (cuerpo vacío, o pasa el turnId de los eventos de ese turno para acotarla):
Errores
Los cuerpos de error siguen
{"code": "...", "error": "...", "ok": false} con un code estable para tratarlos por código.
Migrar desde tokens de continuación
Las integraciones construidas antes de agosto de 2026 usaban uncontinuationToken devuelto por la ruta de inicio. La correspondencia con la API actual:
En resumen: guarda el
sessionId de la respuesta inicial, ponlo en la ruta URL y elimina continuationToken de todos los cuerpos de petición.
