Feedback & Feature Requests
Collect structured feedback from your users. Supports bugs, feature requests, and general feedback with upvote/downvote voting.
Quick Start
Section titled “Quick Start”curl -X POST https://api.sassmaker.com/v1/feedback \ -H "Content-Type: application/json" \ -H "X-Project-Key: pk_your_api_key" \ -d '{ "title": "Add dark mode", "description": "Would love a dark mode option for the dashboard", "type": "feature", "submitter_email": "user@example.com" }'Feedback Types
Section titled “Feedback Types”| Type | Description |
|---|---|
bug | Something is broken |
feature | A new feature request |
feedback | General feedback |
Status Workflow
Section titled “Status Workflow”All feedback types share three statuses:
| Status | Description |
|---|---|
new | Just submitted (default) |
dismissed | Won’t act on this |
on_roadmap | Promoted to the Roadmap |
Use the “Move to Roadmap” action in the dashboard to promote feedback. This creates a roadmap item and sets the status to on_roadmap.
Voting
Section titled “Voting”Users can upvote or downvote entries. Vote counts (upvote_count, downvote_count) are returned with each feedback entry, helping you prioritize what to build.
Public Board
Section titled “Public Board”Every project gets a public feedback board at:
https://app.sassmaker.com/f/[project-slug]Users can browse and vote on existing feedback without needing an API key.
API Endpoints
Section titled “API Endpoints”Submit feedback
Section titled “Submit feedback”POST /v1/feedbackAuth: API Key
curl -X POST https://api.sassmaker.com/v1/feedback \ -H "Content-Type: application/json" \ -H "X-Project-Key: pk_your_api_key" \ -d '{ "title": "Add dark mode", "description": "Would love a dark mode option", "type": "feature", "submitter_email": "user@example.com", "submitter_name": "Jane Doe" }'| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Short summary |
description | string | Yes | Detailed description |
type | string | Yes | bug, feature, or feedback |
submitter_email | string | Yes | Email of the person submitting |
submitter_name | string | No | Name of the person submitting |
image_url | string | No | Screenshot or attachment URL |
Response (201):
{ "id": "abc-123", "project_id": "proj_456", "type": "feature", "status": "new", "title": "Add dark mode", "description": "Would love a dark mode option", "submitter_email": "user@example.com", "submitter_name": "Jane Doe", "image_url": null, "upvote_count": 0, "downvote_count": 0, "created_at": "2025-01-01T00:00:00Z"}Errors:
| Status | Message | Cause |
|---|---|---|
400 | "title is required" | Missing title field |
400 | "Invalid type" | Type is not bug, feature, or feedback |
List feedback
Section titled “List feedback”GET /v1/feedbackAuth: API Key
curl "https://api.sassmaker.com/v1/feedback?type=feature&sort=upvotes&page=1" \ -H "X-Project-Key: pk_your_api_key"| Param | Type | Default | Description |
|---|---|---|---|
type | string | all | Filter by bug, feature, or feedback |
status | string | all | Filter by status |
sort | string | newest | newest or upvotes |
page | number | 1 | Page number (20 items per page) |
Response (200):
{ "data": [{ "id": "...", "title": "...", "upvote_count": 5, ... }], "total": 42, "page": 1, "limit": 20}List feedback by project slug (public)
Section titled “List feedback by project slug (public)”GET /v1/feedback/by-project/:slugAuth: None (public endpoint)
curl "https://api.sassmaker.com/v1/feedback/by-project/my-app?sort=upvotes"Same query params as above. Response includes project info:
{ "data": [...], "total": 42, "page": 1, "limit": 20, "project": { "name": "My App", "slug": "my-app" }}Errors:
| Status | Message | Cause |
|---|---|---|
404 | "Project not found" | Invalid slug |
Upvote / Downvote
Section titled “Upvote / Downvote”POST /v1/feedback/:id/upvotePOST /v1/feedback/:id/downvoteDELETE /v1/feedback/:id/upvoteDELETE /v1/feedback/:id/downvoteAuth: Session Token
POST adds a vote, DELETE removes it. Each user can have one vote per feedback entry.
Response (200): { "ok": true }
Update status
Section titled “Update status”PATCH /v1/feedback/:idAuth: Session Token (project owner only)
curl -X PATCH https://api.sassmaker.com/v1/feedback/abc-123 \ -H "Authorization: Bearer SESSION_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "status": "dismissed" }'Errors:
| Status | Message | Cause |
|---|---|---|
400 | "Invalid status" | Status not new, dismissed, or on_roadmap |
403 | "Forbidden" | Not the project owner |
404 | "Not found" | Feedback entry doesn’t exist |
Delete feedback
Section titled “Delete feedback”DELETE /v1/feedback/:idAuth: Session Token (project owner only)
Response (200): { "ok": true }
SDK Usage
Section titled “SDK Usage”import { SaaSMakerClient } from '@saas-maker/sdk';
const client = new SaaSMakerClient({ apiKey: 'pk_your_api_key' });
// Submit feedbackawait client.feedback.submit({ title: 'Add dark mode', description: 'Would love a dark mode option', type: 'feature', submitter_email: 'user@example.com',});
// List feedbackconst { data, total } = await client.feedback.list({ type: 'feature', sort: 'upvotes',});