Forms
Forms are structured feedback collections with typed questions (ratings, text, emoji, image choice, etc.). They are separate from rooms and have their own public submission URLs.
All management endpoints require authentication. Submission endpoints are public.
List forms
GET /api/forms
Returns all forms in the organization.
Create a form
POST /api/forms
{
"title": "Event Feedback",
"description": "Tell us about your experience",
"questions": [
{
"type": "rating",
"text": "How would you rate the event?",
"required": true
},
{
"type": "text",
"text": "Any additional comments?",
"required": false
}
]
}
Question types: rating, text, emoji, options, image_choice, scale
Response 201 — returns the created form including its generated slug.
Get a form
GET /api/forms/:formId
Update a form
PUT /api/forms/:formId
Accepts a partial form object. Only provided fields are updated.
Delete a form
DELETE /api/forms/:formId
Also deletes associated question images from storage.
Clone a form
POST /api/forms/:formId/clone
Creates a copy of the form with a new slug. Useful for reusing question sets across events.
Toggle active status
PUT /api/forms/:formId/active
{ "active": false }
Public form endpoints
Get form by slug
GET /api/forms/public/:slug
Returns the form structure for rendering. No auth required.
Submit a response
POST /api/forms/public/:slug/submit
{
"responses": [
{ "questionId": "q1", "value": 4 },
{ "questionId": "q2", "value": "Great event, very organized." }
]
}
Rate limited — 10 submissions per IP per 15 minutes.
Analytics & insights
Form analytics
GET /api/forms/analytics
Returns aggregated response counts and completion rates across all forms.
Form statistics
GET /api/forms/:formId/stats
Per-question breakdown: response counts, average ratings, option distributions.
Form responses
GET /api/forms/:formId/responses
Paginated list of all individual responses.
Analyse responses (AI)
GET /api/forms/:formId/analyze
Triggers AI analysis of responses. Returns themes, sentiment, and key findings.
Get saved analyses
GET /api/forms/:formId/analyses
Returns previously generated AI analyses for the form.
Summarize text responses
POST /api/forms/:formId/summarize-text
{ "questionId": "q2" }
Returns an AI-generated summary of all free-text responses for a question.
Text summaries
GET /api/forms/:formId/text-summaries
Returns all saved text summaries for the form.
Word cloud data
GET /api/forms/formcloud
Returns word frequency data across all form text responses for rendering a word cloud.
Image uploads
Upload question image
POST /api/forms/:formId/questions/:questionId/upload-image
Content-Type: multipart/form-data
Maximum file size: 5 MB.
Delete question image
DELETE /api/forms/:formId/questions/:questionId/delete-image
Upload image choice option
POST /api/forms/:formId/questions/:questionId/options/:optionId/upload-image
Content-Type: multipart/form-data
Delete image choice option
DELETE /api/forms/:formId/questions/:questionId/options/:optionId/delete-image