Feature Requests
Collect, track, and prioritize feature requests from your users. Built-in voting, comments, and customer tracking.
Why Use StackBE Feature Requests?
Know Your Users
Track who requested or voted on each feature for user research and notifications.
Prioritize by Demand
Sort by votes to see what your users actually want.
Two-Way Communication
Customers can comment, and you can reply with official updates.
Close the Loop
Get a list of interested users to notify when you ship a feature.
Quick Start
Install the SDK (v0.7.0+):
npm install @stackbe/sdk@latestimport { StackBE } from '@stackbe/sdk';
const stackbe = new StackBE({
apiKey: process.env.STACKBE_API_KEY!,
appId: process.env.STACKBE_APP_ID!,
});
// List all feature requests, sorted by popularity
const { data: requests } = await stackbe.featureRequests.list({
sortBy: 'votes',
});
// Submit a new feature request (requires customer session)
const request = await stackbe.featureRequests.create({
title: 'Dark mode support',
description: 'Would love a dark theme option for late-night work',
category: 'UI',
});
// Upvote a request (idempotent)
await stackbe.featureRequests.vote('req_123');Enable Feature Requests
In the StackBE dashboard:
- Go to App Settings
- Enable "Feature Requests"
- Optionally configure voting, comments, and categories
Customer-Facing Features
These endpoints require a customer session token (from magic link auth):
List Feature Requests
// Get all requests
const { data, total } = await stackbe.featureRequests.list();
// Filter by status
const planned = await stackbe.featureRequests.list({
status: 'planned'
});
// Sort by votes (most popular first)
const popular = await stackbe.featureRequests.list({
sortBy: 'votes'
});
// Filter by category
const uiRequests = await stackbe.featureRequests.list({
category: 'UI',
sortBy: 'newest',
});Status values: new, under_review, planned, in_progress, completed, declined
Sort options: newest, votes, recent_activity
Submit a Feature Request
const request = await stackbe.featureRequests.create({
title: 'Export to PDF',
description: 'Allow exporting reports as PDF documents',
category: 'Export', // optional
});
console.log(request.id); // 'req_abc123'Voting
// Upvote a request (idempotent - safe to call multiple times)
const { voteCount, alreadyVoted } = await stackbe.featureRequests.vote('req_123');
// Remove your vote
const { voteCount } = await stackbe.featureRequests.removeVote('req_123');Comments
// Add a comment
await stackbe.featureRequests.addComment('req_123', {
content: 'This would save me hours every week!',
});
// Get request with all comments
const request = await stackbe.featureRequests.get('req_123');
request.comments.forEach(c => {
console.log(`${c.customerEmail}: ${c.content}`);
if (c.isAdminReply) console.log(' ^ Official response');
});Admin Features
These endpoints require your API key (backend/admin calls):
Update Status
// Mark as planned
await stackbe.featureRequests.update('req_123', {
status: 'planned',
});
// Start working on it
await stackbe.featureRequests.update('req_123', {
status: 'in_progress',
category: 'Q1 2025',
});
// Mark as completed
await stackbe.featureRequests.update('req_123', {
status: 'completed',
});Get Interested Customers
See everyone who requested or voted on a feature. Perfect for user research or sending notifications when the feature ships.
const {
author,
voters,
totalInterested
} = await stackbe.featureRequests.getInterestedCustomers('req_123');
console.log(`${totalInterested} users want this feature`);
// Author info
console.log(`Submitted by: ${author.email} on ${author.submittedAt}`);
// All voters
voters.forEach(v => {
console.log(`Voted: ${v.email} on ${v.votedAt}`);
});
// Get all emails to notify when feature ships
const emails = [author.email, ...voters.map(v => v.email)];
await sendNotification(emails, 'Your requested feature is now live!');Get Customer's Feature Activity
See what features a specific customer has requested or voted on. Great for displaying on their profile or understanding what they care about.
const activity = await stackbe.featureRequests.getCustomerActivity('cust_123');
console.log(`Submitted ${activity.totalSubmitted} requests`);
console.log(`Voted on ${activity.totalVotes} requests`);
// Their submitted requests
activity.submitted.forEach(r => {
console.log(`Submitted: ${r.title} (${r.status}) - ${r.voteCount} votes`);
});
// Requests they voted on
activity.votedOn.forEach(r => {
console.log(`Interested in: ${r.title} (${r.status})`);
});Delete a Request
// Delete spam or duplicate requests
await stackbe.featureRequests.delete('req_123');Data Model
Every feature request tracks:
| Field | Description |
|---|---|
| id | Unique identifier (req_xxx) |
| title | Feature title |
| description | Detailed description |
| status | Current status (new, planned, etc.) |
| category | Optional grouping |
| authorId + authorEmail | Who submitted the request |
| voteCount | Number of upvotes |
| votes[] | List of voters with customerId, email, votedAt |
| comments[] | Customer and admin comments |
| createdAt / updatedAt | Timestamps |
Example UI Flow
A typical feature request board might include:
- Feature Board - List requests sorted by votes, filter by status
- Submit Form - Title, description, optional category
- Detail View - Show request, votes, comments, upvote button
- Customer Profile - Show their submitted requests + votes
- Admin Dashboard - See interested customers, update status, notify users
API Reference
For direct API access without the SDK:
| Method | Endpoint | Auth |
|---|---|---|
| GET | /v1/apps/{appId}/feature-requests | API Key |
| POST | /v1/apps/{appId}/feature-requests | Session |
| GET | /v1/apps/{appId}/feature-requests/{id} | API Key |
| PATCH | /v1/apps/{appId}/feature-requests/{id} | API Key |
| DELETE | /v1/apps/{appId}/feature-requests/{id} | API Key |
| POST | /v1/apps/{appId}/feature-requests/{id}/vote | Session |
| DELETE | /v1/apps/{appId}/feature-requests/{id}/vote | Session |
| POST | /v1/apps/{appId}/feature-requests/{id}/comments | Session |
| GET | /v1/apps/{appId}/feature-requests/{id}/interested | API Key |
| GET | /v1/apps/{appId}/feature-requests/customer/{customerId}/activity | API Key |