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+):

bash
npm install @stackbe/sdk@latest
typescript
import { 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:

  1. Go to App Settings
  2. Enable "Feature Requests"
  3. Optionally configure voting, comments, and categories

Customer-Facing Features

These endpoints require a customer session token (from magic link auth):

List Feature Requests

typescript
// 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

typescript
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

typescript
// 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

typescript
// 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

typescript
// 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.

typescript
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.

typescript
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

typescript
// Delete spam or duplicate requests
await stackbe.featureRequests.delete('req_123');

Data Model

Every feature request tracks:

FieldDescription
idUnique identifier (req_xxx)
titleFeature title
descriptionDetailed description
statusCurrent status (new, planned, etc.)
categoryOptional grouping
authorId + authorEmailWho submitted the request
voteCountNumber of upvotes
votes[]List of voters with customerId, email, votedAt
comments[]Customer and admin comments
createdAt / updatedAtTimestamps

Example UI Flow

A typical feature request board might include:

  1. Feature Board - List requests sorted by votes, filter by status
  2. Submit Form - Title, description, optional category
  3. Detail View - Show request, votes, comments, upvote button
  4. Customer Profile - Show their submitted requests + votes
  5. Admin Dashboard - See interested customers, update status, notify users

API Reference

For direct API access without the SDK:

MethodEndpointAuth
GET/v1/apps/{appId}/feature-requestsAPI Key
POST/v1/apps/{appId}/feature-requestsSession
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}/voteSession
DELETE/v1/apps/{appId}/feature-requests/{id}/voteSession
POST/v1/apps/{appId}/feature-requests/{id}/commentsSession
GET/v1/apps/{appId}/feature-requests/{id}/interestedAPI Key
GET/v1/apps/{appId}/feature-requests/customer/{customerId}/activityAPI Key

Full API Reference (Swagger) →

Where to Go Next