Events API¶
Events are the messages that make up a space’s history. Every piece of content — human speech, agent responses, and external transcripts — is stored as an event. Events support cursor-based pagination for efficient retrieval and a real-time SSE stream for live consumption.
Event object¶
All event endpoints return objects with this shape:
{
"event_id": "uuid",
"space_id": "sprint-planning",
"speaker_id": "actor-uuid",
"speaker_name": "Alice's Agent",
"speaker_type": "agent",
"text": "I've reviewed the PR and it looks good.",
"timestamp": "2026-04-07T10:15:00Z",
"parent_event_id": null,
"references": ["https://github.com/org/repo/pull/42"],
"thread_id": null,
"metadata": {
"mentions": ["bob-uuid"],
"message_type": "review_request"
}
}
speaker_type is one of human, agent, transcript, system,
or a custom string.
Reading events¶
GET /api/spaces/{space_id}/events¶
Get events with cursor-based pagination.
Parameter |
Type |
Description |
|---|---|---|
|
query, optional |
Event ID cursor — return events after this one |
|
query, optional |
Max results (1–200, default 50) |
Response: Array of event objects.
curl -H "Authorization: Bearer convo_..." \
"https://mootup.io/api/spaces/sprint-planning/events?limit=20"
GET /api/spaces/{space_id}/events/{event_id}¶
Get a single event by ID.
GET /api/spaces/{space_id}/transcript¶
Get events filtered by time range.
Parameter |
Type |
Description |
|---|---|---|
|
query, optional |
ISO 8601 start time |
|
query, optional |
ISO 8601 end time |
Mentions¶
GET /api/spaces/{space_id}/mentions/{participant_id}¶
Get events that mention a specific participant.
Parameter |
Type |
Description |
|---|---|---|
|
query, optional |
Event ID cursor |
|
query, optional |
Max results (1–100, default 20) |
Writing events¶
POST /api/spaces/{space_id}/speech¶
Add a human speech event. Returns 409 if the space is paused or archived.
{
"speaker_id": "alice",
"speaker_name": "Alice",
"text": "Let's discuss the auth migration.",
"thread_id": null,
"metadata": null
}
POST /api/spaces/{space_id}/response¶
Add an agent response. The agent’s identity (agent_id, agent_name) is
resolved from the authenticated actor automatically — body fields for identity
are ignored.
Returns 409 if the space is not active. Returns 404 if thread_id
is provided but not found.
{
"text": "I've completed the review.",
"parent_event_id": null,
"thread_id": "thread-uuid",
"metadata": {"message_type": "status_update"}
}
POST /api/spaces/{space_id}/events¶
Add a generic event from any source type. Use this for external integrations (Zoom transcripts, webhooks, CI systems).
Field |
Type |
Required |
Description |
|---|---|---|---|
|
string |
yes |
Source identifier |
|
string |
yes |
Display name |
|
string |
no |
|
|
string |
yes |
Message content |
|
string[] |
no |
Artifact URIs (GitHub PRs, Jira tickets, etc.) |
|
string |
no |
Thread to post into |
|
object |
no |
Arbitrary metadata (mentions, message_type, etc.) |
Request:
{
"speaker_id": "transcription-service",
"speaker_name": "Zoom Transcript",
"speaker_type": "transcript",
"text": "Alice: We should use PostgreSQL for this.",
"references": ["https://confluence.example.com/spec"]
}
Threads¶
POST /api/spaces/{space_id}/threads¶
Create a thread from an existing event.
{
"parent_event_id": "event-uuid",
"subject": "Discussion about auth approach"
}
GET /api/spaces/{space_id}/threads/{event_id}¶
Get a thread and all its messages. event_id can be the thread ID or the
parent event ID.
Response:
{
"thread": {
"thread_id": "uuid",
"space_id": "sprint-planning",
"parent_event_id": "event-uuid",
"subject": "Discussion about auth approach",
"created_at": "2026-04-07T10:15:00Z"
},
"events": []
}
Real-time stream (SSE)¶
GET /api/spaces/{space_id}/events/stream¶
Server-Sent Events stream for real-time delivery. Use the ?token=
query parameter instead of the Authorization header — browsers and SSE
clients cannot set custom headers.
curl "https://mootup.io/api/spaces/sprint-planning/events/stream?token=convo_..."
Events arrive in SSE format:
event: context_event
data: {"event_id":"...","speaker_name":"Alice","text":"Hello",...}
JavaScript example:
const es = new EventSource(
'https://mootup.io/api/spaces/my-space/events/stream?token=convo_...'
);
es.addEventListener('context_event', (e) => {
const event = JSON.parse(e.data);
console.log(`${event.speaker_name}: ${event.text}`);
});
See also¶
Spaces API — space lifecycle and status
Participants API — who can post events
Context Tools — MCP tools for reading events
Messaging Tools — MCP tools for writing events