Skip to main content

Rooms API

Rooms (internally called events) are the core feedback channels. Each room has a unique public link and collects anonymous emoji-based responses.

All endpoints require authentication via a valid session cookie or API key.


List rooms

GET /api/events

Returns all rooms for the authenticated user's organization. Public rooms are always included; private rooms are only included if the requesting user created them.

Response 200

{
"activeEvents": [
{
"_id": "64a1b2c3d4e5f6a7b8c9d0e1",
"name": "API Documentation",
"active": true,
"isPrivate": false,
"order": 0,
"createdAt": "2024-01-15T10:30:00.000Z"
}
]
}

Create a room

POST /api/events
{
"eventName": "API Documentation",
"isPrivate": false,
"customTags": {
"happy": ["Clear", "Easy to follow", "Good examples"],
"neutral": ["Could be clearer", "Missing examples"],
"sad": ["Confusing", "Outdated", "Missing info"]
},
"feedbackCustomization": {
"headerText": "How helpful was this documentation?",
"footerText": "Your feedback helps us improve our docs.",
"sentiments": {
"happy": {
"emoji": "😊",
"label": "Helpful",
"title": "What worked well?",
"placeholder": "Tell us what was clear and helpful..."
},
"neutral": {
"emoji": "😐",
"label": "Okay",
"title": "What could be improved?",
"placeholder": "Any gaps or areas that were hard to follow?"
},
"sad": {
"emoji": "😞",
"label": "Confusing",
"title": "What was confusing or missing?",
"placeholder": "Help us understand what didn't work..."
}
}
}
}

Required fields: eventName

Response 201 — returns the created room object.

Error 403 — room limit reached for the organization's plan.

Error 409 — a room with that name already exists in the organization.


Get a room

GET /api/events/:eventName

Lookup is case-insensitive.

Response 200 — returns the full room object including feedbackCustomization and customTags.


Update a room name

PUT /api/events/:eventName
{ "eventName": "New Room Name" }

Renaming a room cascades to update all associated feedback records.


Delete a room

DELETE /api/events/:eventName

Only the room's creator can delete it.

Response 200{ "message": "Event deleted successfully" }


Toggle active status

PUT /api/events/:eventName/active
{ "active": false }

Inactive rooms reject new submissions but retain all existing feedback.


Toggle privacy

PUT /api/events/:eventName/privacy
{ "isPrivate": true }

Making a room public removes it from any private folder automatically.


Update room order

PUT /api/events/order
{
"orderedIds": [
"64a1b2c3d4e5f6a7b8c9d0e1",
"64a1b2c3d4e5f6a7b8c9d0e2"
]
}

Used to persist drag-and-drop ordering in the UI.


Customization

Get customization

GET /api/events/:eventName/customization

Returns the room's feedbackCustomization and customTags.

Update customization

PUT /api/events/:eventName/customization

Accepts a partial object — only provided fields are updated.

{
"feedbackCustomization": {
"headerText": "How helpful was this page?",
"sentiments": {
"happy": {
"title": "What worked well?",
"placeholder": "Tell us what was clear..."
}
}
},
"customTags": {
"happy": ["Clear", "Well structured"],
"neutral": ["Could be clearer"],
"sad": ["Confusing", "Outdated"]
}
}

Update tags only

PUT /api/events/:eventName/tags
{
"customTags": {
"happy": ["Clear", "Helpful"],
"neutral": ["Needs work"],
"sad": ["Confusing"]
}
}

Jira integration settings

GET /api/events/room/:roomId/jira-settings
PUT /api/events/room/:roomId/jira-settings

Requires an active Jira integration. See Integrations.

{
"jiraProjectKey": "ENG",
"jiraEpicKey": "ENG-42",
"jiraCreateTickets": true
}