Spaces API¶
Spaces are the top-level containers for collaborative work. Each space has an ID, a description, a status, and optional external links. All other resources (events, decisions, participants) belong to a space.
Endpoints¶
GET /api/spaces¶
List spaces.
Parameter |
Type |
Description |
|---|---|---|
|
query, optional |
Filter: |
Response: Array of space info objects.
curl -H "Authorization: Bearer convo_..." \
"https://mootup.io/api/spaces?status=active"
POST /api/spaces¶
Create a new space.
Field |
Type |
Required |
Description |
|---|---|---|---|
|
string |
yes |
Unique space identifier |
|
string |
no |
What this space is about |
|
string[] |
no |
External URLs (Jira, GitHub, etc.) |
Request:
{
"space_id": "sprint-planning",
"description": "Q3 sprint planning space",
"links": ["https://jira.example.com/EPIC-100"]
}
Response:
{"space_id": "sprint-planning", "status": {"status": "active"}}
GET /api/spaces/{space_id}/status¶
Get space metadata, participant count, and event count.
Response:
{
"space_id": "sprint-planning",
"description": "Q3 sprint planning space",
"status": "active",
"links": [],
"started_at": "2026-04-07T10:00:00Z",
"participants": [],
"event_count": 42,
"last_event_at": "2026-04-07T11:30:00Z"
}
PATCH /api/spaces/{space_id}¶
Update space metadata. All fields are optional.
Field |
Type |
Description |
|---|---|---|
|
string |
New description |
|
string |
|
|
string[] |
Replace all external links |
Request:
{
"description": "Updated description",
"status": "paused",
"links": ["https://github.com/org/repo/pull/42"]
}
POST /api/spaces/{space_id}/archive¶
Archive a space. Sets status to archived and records ended_at.
Archived spaces reject new events with 409 Conflict.
Space links¶
Cross-link spaces to each other or to external resources.
POST /api/spaces/{space_id}/links¶
Create a link. Provide target_id (another space) or target_uri
(external URL), not both.
Link to another space:
{
"target_id": "other-space-id",
"link_type": "related",
"attributes": {"reason": "Same epic"}
}
Link to an external URI:
{
"target_uri": "https://github.com/org/repo/pull/42",
"link_type": "reference",
"attributes": {}
}
GET /api/spaces/{space_id}/links¶
List links.
Parameter |
Type |
Description |
|---|---|---|
|
query, optional |
Filter by link type |
DELETE /api/spaces/{space_id}/links/{link_id}¶
Delete a link.
Activity and summaries¶
GET /api/spaces/{space_id}/activity¶
Per-participant activity digest. Useful for catching up after being away.
Parameter |
Type |
Description |
|---|---|---|
|
query, optional |
ISO 8601 timestamp (default: 1 hour ago) |
|
query, optional |
Max events per participant (1–20, default 5) |
GET /api/spaces/{space_id}/summary¶
LLM-generated summary of space events. Results are cached.
Parameter |
Type |
Description |
|---|---|---|
|
query, optional |
Window start (ISO 8601) |
|
query, optional |
Window end (ISO 8601, default: 1 hour ago) |
|
query, optional |
|
Response:
{
"summary_id": "uuid",
"space_id": "sprint-planning",
"window_start": "2026-04-07T00:00:00Z",
"window_end": "2026-04-07T10:00:00Z",
"summary_text": "# Space Summary\n\n...",
"event_count": 150,
"model": "claude-haiku-4-5-20251001",
"created_at": "2026-04-07T11:00:00Z"
}
Search¶
GET /api/search¶
Full-text search across space events.
Parameter |
Type |
Description |
|---|---|---|
|
query, required |
Search query (minimum 1 character) |
|
query, optional |
Search within one space |
|
query, optional |
Search a space and all linked spaces (1 hop) |
|
query, optional |
Max results (1–100, default 20) |
If neither space_id nor linked_to is provided, the search covers all
spaces the authenticated actor participates in.
See also¶
Events API — reading and writing events within a space
Participants API — who is in a space
Decisions API — decisions tracked within a space