Skip to content
Back to site

SSE Events

Hivekeep uses Server-Sent Events (SSE) to push real-time updates to the web UI. Connect to the SSE endpoint to receive live notifications about changes.

GET /api/sse

Requires authentication. Returns a text/event-stream response.

  1. Connected: Server sends a connected event with a connectionId
  2. Ping: Server sends ping events every 15 seconds to keep the connection alive
  3. Events: Real-time events are delivered as message events with JSON data
  4. Disconnect: Client closes the connection; server cleans up automatically

Each event is a JSON object with a type field and contextual fields:

{
"type": "event-type",
"agentId": "optional-agent-id",
"data": { ... }
}

Real-time message streaming and conversation events.

EventDescriptionScope
chat:messageNew message created (user or AI)Per-Agent
chat:tokenStreaming token chunk during AI responsePer-Agent
chat:reasoning-tokenStreaming reasoning/thinking token chunkPer-Agent
chat:reasoning-doneReasoning/thinking block finishedPer-Agent
chat:tool-call-startTool call startedPer-Agent
chat:tool-callTool call arguments resolvedPer-Agent
chat:tool-resultTool result receivedPer-Agent
chat:token-usageLive token-usage update for the turnPer-Agent
chat:doneAI response finishedPer-Agent
chat:clearedConversation history clearedPer-Agent
EventDescriptionScope
reaction:addedReaction added to a messagePer-Agent
reaction:removedReaction removed from a messagePer-Agent
EventDescriptionScope
task:statusTask status changed (pending, in_progress, queued, etc.)Broadcast
task:doneTask completed or failedBroadcast
task:deletedTask deletedBroadcast
task:todosSub-agent updated its structured todo listBroadcast
task:token-usageLive token-usage update for a running taskBroadcast
queue:updateQueue/processing state changed (includes processingStartedAt timestamp when processing)Broadcast
EventDescriptionScope
miniapp:createdA mini-app was createdBroadcast
miniapp:updatedA mini-app was updatedBroadcast
miniapp:deletedA mini-app was deletedBroadcast
miniapp:file-updatedA mini-app file was changedBroadcast
miniapp:reloadA mini-app requested a live reloadBroadcast
EventDescriptionScope
memory:createdMemory createdPer-Agent
memory:updatedMemory updatedPer-Agent
memory:deletedMemory deletedPer-Agent
EventDescriptionScope
compacting:startCompaction startedPer-Agent
compacting:doneCompaction completed (includes summary and memories extracted)Per-Agent
compacting:errorCompaction failed (prevents infinite spinner in the UI)Per-Agent
EventDescriptionScope
agent:errorAgent processing errorPer-Agent
agent:createdNew Agent createdBroadcast
agent:updatedAgent metadata changed (avatar, provider, etc.)Broadcast
agent:deletedAgent deletedBroadcast
EventDescriptionScope
provider:createdProvider addedBroadcast
provider:updatedProvider configuration changedBroadcast
provider:deletedProvider removedBroadcast
EventDescriptionScope
mcp-server:createdMCP server addedBroadcast
mcp-server:updatedMCP server config changed or approvedBroadcast
mcp-server:deletedMCP server removedBroadcast
EventDescriptionScope
contact:createdContact createdBroadcast
contact:updatedContact updatedBroadcast
contact:deletedContact deletedBroadcast
EventDescriptionScope
cron:triggeredCron job triggeredBroadcast
cron:createdCron job createdBroadcast
cron:updatedCron job updatedBroadcast
cron:deletedCron job deletedBroadcast
EventDescriptionScope
webhook:createdWebhook createdBroadcast
webhook:updatedWebhook updatedBroadcast
webhook:deletedWebhook deletedBroadcast
webhook:triggeredWebhook received a payloadPer-Agent
EventDescriptionScope
channel:createdChannel createdBroadcast
channel:updatedChannel updatedBroadcast
channel:deletedChannel deletedBroadcast
channel:message-receivedMessage received from external platformPer-Agent
channel:message-sentMessage sent to external platformPer-Agent
channel:user-pendingNew user pending approvalBroadcast
channel:user-approvedUser approvedBroadcast
channel:transferredChannel reassigned to a different AgentBroadcast
EventDescriptionScope
prompt:pendingNew prompt awaiting human responsePer-Agent
prompt:answeredHuman responded to a promptPer-Agent
prompt:expiredA pending prompt timed outPer-Agent
prompt:secret-requestAgent requested a secret via a secure-input popupPer-Agent
prompt:secret-resolvedA secure-input request was answered or dismissedPer-Agent
EventDescriptionScope
notification:newNew notificationPer-User
notification:readNotification marked as readPer-User
notification:read-allAll notifications marked as readPer-User
notification:deletedNotification deletedPer-User
EventDescriptionScope
quick-session:closedQuick session closedPer-Agent

Emitted when an Agent queues an outbound email that needs human approval.

EventDescriptionScope
email:pending-createdAn outbound email is awaiting approvalPer-Agent
email:pending-resolvedA pending email was sent, failed, or rejectedPer-Agent
EventDescriptionScope
plugin:installedPlugin installedBroadcast
plugin:uninstalledPlugin uninstalledBroadcast
plugin:updatedPlugin updated to a new versionBroadcast
plugin:reloadedPlugin reloadedBroadcast
plugin:enabledPlugin enabledBroadcast
plugin:disabledPlugin disabledBroadcast
plugin:configUpdatedPlugin config changedBroadcast
plugin:autoDisabledPlugin auto-disabled due to errorsBroadcast
EventDescriptionScope
settings:hub-changedHub configuration changedBroadcast
settings:defaults-updatedDefault models/services configuration changedBroadcast
EventDescriptionScope
version:update-availableNew Hivekeep version availableBroadcast
EventDescriptionScope
log:entryPlatform log entryBroadcast
card:updatedA live plugin card was updatedBroadcast

Most CRUD resources also broadcast created / updated / deleted events so any open tab stays in sync. Beyond the families above, these include: agent (plus agent:active-project, agent:read), provider, mcp-server, contact, cron, webhook, memory, custom-tool, toolbox, tool-domain, email-account, connected-account, project, project-tag, and ticket (plus ticket:comment-added / comment-updated / comment-deleted). The canonical, exhaustive list of event names lives in src/server/sse/types.ts.

Events are delivered based on scope:

  • Broadcast: Sent to all connected clients (provider changes, MCP updates, settings)
  • Per-Agent: Sent to clients viewing a specific Agent (chat, memories, compacting, reactions)
  • Per-User: Sent to a specific user’s connections (notifications)
const evtSource = new EventSource('/api/sse', {
withCredentials: true
})
evtSource.onmessage = (event) => {
const data = JSON.parse(event.data)
switch (data.type) {
case 'chat:token':
// Append streaming token to UI
appendToken(data.data.token)
break
case 'chat:done':
// Finalize message display
finalizeMessage()
break
case 'miniapp:updated':
// Refresh mini-app data
refreshMiniApp(data.data.app)
break
}
}
evtSource.onerror = () => {
// EventSource auto-reconnects
console.log('SSE connection lost, reconnecting...')
}