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
}