Skip to main content

Endpoint

GET /api/events
Standard SSE connection. The server sends events as they occur.

Connecting

const events = new EventSource('http://localhost:3001/api/events');

events.addEventListener('task:created', (e) => {
  const task = JSON.parse(e.data);
  console.log('New task:', task.title);
});

events.addEventListener('execution:progress', (e) => {
  const progress = JSON.parse(e.data);
  console.log(`Task ${progress.taskId}: ${progress.status}`);
});

events.onerror = () => {
  console.log('SSE connection lost, reconnecting...');
};

Event Types

Task Events

EventPayloadTrigger
task:createdFull task objectTask created
task:updatedFull task objectTask modified or status changed
task:deleted{ id }Task archived

Project Events

EventPayloadTrigger
project:createdFull project objectProject created
project:updatedFull project objectProject modified
project:deleted{ id }Project deleted

Team Events

EventPayloadTrigger
team:createdFull team objectTeam created
team:updatedFull team objectTeam modified
team:deleted{ id }Team deleted

Label Events

EventPayloadTrigger
label:createdFull label objectLabel created
label:updatedFull label objectLabel modified
label:deleted{ id }Label deleted
task:label:assigned{ taskId, label }Label assigned to task
task:label:removed{ taskId, labelId }Label removed from task

Execution Events

EventPayloadTrigger
execution:progress{ taskId, status, message, ... }Execution state change

Permission Events

EventPayloadTrigger
permission:new{ taskId, permission }Agent requests tool permission
permission:resolved{ taskId, permissionId }Permission responded to

Batch Events

EventPayloadTrigger
batch:createdBatch objectBatch created
batch:updatedBatch objectBatch status changed
batch:completedBatch objectBatch finished

Event Format

Each SSE message follows the standard format:
event: task:created
data: {"id":"uuid","title":"Add endpoint","status":"todo",...}
The data field is always valid JSON. Parse it with JSON.parse(event.data).