Feedback: feature requests, roadmaps and themes
Engage → Feedback is where your customers' ideas come in and where your team decides what to build. It has five tabs:
- Requests — the triage inbox: every feature request, ranked by what it's worth to you.
- Duplicates — pairs of requests that probably ask for the same thing.
- Roadmaps — boards of planned work, private or shared publicly.
- Themes — AI analysis of all your feedback (requests, survey and NPS comments, complaints and Scout conversations): themes, sentiment and trends, and a box to ask questions about it.
- Settings — the Ideas tab, the portal, account weighting, Scout, notifications and API keys.
Where requests come from
| Channel | How | Identity |
|---|---|---|
| Ideas tab in the Scout messenger | Turn on Ideas in the messenger. People browse, search, vote, comment, follow and share ideas. Your app can open it with guidely.openIdeas() or guidely.openIdeas("<request id>"). | What your app passed to identify() (unverified) |
| Feedback portal | A hosted page at /feedback/<address> (Settings → Feedback portal). The messenger's Open the feedback portal button signs the visitor in with the identity the SDK knows. | SDK identity (unverified), or a verified link from your server |
| Scout | When someone asks Scout for something the product doesn't do, Scout explains what's possible today and shows a button to vote for the matching request or suggest it as a new idea. | The conversation's visitor |
| Scout capture | Conversations the Reports classifier marks as feature request are linked to the matching request (shown under Mentions), or filed as a new private request with source Scout for you to review. Nobody gets a vote they didn't cast. | — |
| Your team | New request in the Requests tab, optionally with a vote for an account. | Teammate |
| REST API | POST /api/v1/feedback/requests with a secret key. | Your server (verified) |
Anyone who submits, votes or comments follows the request automatically.
Identity and verification
The SDK's identify() is not authenticated, so by default a visitor's identity is claimed, exactly as for complaints: the dashboard marks such submitters and voters unverified. Guidely has no separate identity-verification scheme for the SDK, so verification comes from your server instead:
- Create a secret key with the
feedback:writescope (Settings → REST API keys). - When a signed-in user opens "Feedback" in your app, call
POST /api/v1/feedback/portal-linkswith{ userId, name?, email?, account?: { id, name?, traits? } }and redirect them to the returnedurl(valid for 15 minutes; the portal session lasts 30 days).
Turn on Require a verified identity to vote and submit to accept writes only from such links (the messenger then browses read-only and offers the portal). Allow visitors who aren't signed in lets anonymous visitors vote and submit (off by default: they can browse).
Votes, priority and account weighting
Each person has one vote per request, with a priority: Nice to have (weight 1), Important (2) or Critical (3), and an optional "why it matters" note. Teammates can vote on behalf of an account (one vote per account, e.g. after a customer call), or of a specific user.
Requests are ranked by:
| Sort | Meaning |
|---|---|
| Score | Sum of priority weights of the votes |
| Votes | Number of votes |
| Accounts | Distinct accounts behind the votes |
| ARR | Total annual revenue of those accounts, each counted once |
| Trending | Votes in the last 30 days |
Revenue and plan come from account traits you choose in Settings → Account weighting (default arr and plan). Pass them with identify()'s account, or with the REST API's account.traits. Numbers and strings like "$12,000" both work. Filters count only matching votes and hide requests with none: plan, account trait (key=value), minimum ARR and audience (votes from members of an audience).
Triage
- Status: New → Under review → Planned → In progress → Released, or Declined, with an optional public note ("Shipping in March"). Followers get an in-app update in the messenger's Ideas tab and the portal.
- Bulk changes: select requests to change status, visibility or product area together.
- Visibility: public requests show in the Ideas tab and portal; private ones only to the team (and to the person who submitted them). With Publish new ideas right away off, user submissions start private.
- Product area: a free-text tag; the list in Settings is offered when submitting.
- Merge: merging a request into another moves its votes (one per voter, keeping the higher priority), followers, comments, mentions and roadmap cards. The merged request keeps its number, and links to it lead to the target. Its followers are told.
- Duplicates: the worker compares new requests with existing ones by text similarity and, with an Anthropic key, confirms them with AI. Merge either way or mark Not duplicates.
- Tickets: Create ticket opens one in the workspace's Jira or Linear (Settings → Integrations) with the demand summary (votes, accounts, ARR, top accounts and what customers said), or link an existing one by key or URL.
- Comments: public replies (shown to customers, followers are told in the app) or internal notes.
- Internal notes on a request are never shown outside the team.
Roadmaps
A roadmap is a board of cards: feature requests and standalone items (your own initiatives). Layouts: Now / Next / Later, by status (moving a request's card changes the request's status and tells its followers) or by quarter. Drag cards to reorder them or move them between columns. Cards can be hidden from the public view.
Make a roadmap public to get a read-only share page (/roadmap/<token>; Rotate link revokes the old one), and pick it in Settings to show it in the portal's Roadmap tab. Private requests never appear on public pages.
Themes (feedback analysis)
The worker (feedback.analyze, every 10 minutes) copies new feedback into one corpus, picking up where it left off:
| Source | What is read |
|---|---|
| Feature requests | Title and description |
| Surveys | Free-text answers; in surveys with an NPS question they count as NPS comments, with the score |
| Complaints | Category and description |
| Scout conversations | The classifier's summary of issues, feedback and feature requests |
Each item gets a sentiment from -1 to 1 and, with an Anthropic key (Scout settings or the server's), a theme. Themes are reused and created as needed (up to 30 per project); rename, merge or delete them on the Themes tab (deleted themes' items are analysed again). Without a key, sentiment comes from a word list (and NPS scores) and there are no AI themes.
The Themes tab shows each theme's volume against the previous period, average sentiment, sources, the accounts behind it (by ARR) and a weekly trend. Ask a question about your feedback finds the matching items and has the AI answer from them, citing the items it used.
Feedback also appears in Reports → Feedback (requests filed and released, votes, top requests and themes for the period) and on Scout insights (the week's top requests and themes, which also feed Scout's brief).
Notifications
- Slack and webhooks: pick Slack or webhook integrations (Integrations) and the events — request created, status changed, voted. Deliveries retry up to 5 times. Webhook integrations receive a JSON payload with
X-Guidely-Event: feedback.<event>:
{
"type": "request.created",
"projectId": "…",
"at": "2026-11-23T10:12:00.000Z",
"request": { "id": "…", "number": 42, "reference": "#42", "title": "Export reports to CSV", "description": "…", "status": "new", "productArea": "Reporting", "source": "portal", "votes": 1, "url": "https://app…/app/<project>/feedback/<id>" },
"person": { "userId": "user_42", "name": "Priya Shah", "email": null, "verified": false },
"account": { "id": "…", "name": "Acme Corp" },
"actor": null
}
- Followers always get in-app updates. Email followers is off by default, in line with complaints sending no end-user emails: when on, emails go only to addresses that came from a verified portal link, never to traits the SDK claimed. Emails use the platform email service (email).
REST API
Secret project keys (Authorization: Bearer gly_sk_…) with feedback:read / feedback:write:
| Method | Path | Body / query | Notes |
|---|---|---|---|
| GET | /api/v1/feedback/requests | status, q, sort, productArea, plan, accountTrait, minArr, page, pageSize | Ranked list with votes, accounts, ARR, score |
| POST | /api/v1/feedback/requests | { title, description?, productArea?, user?: { id, name?, email? }, account?: { id, name?, traits? }, priority?, status?, visibility? } | With user, filed and voted as that user (verified) |
| GET | /api/v1/feedback/requests/:id | — | :id is the id or the number |
| PATCH | /api/v1/feedback/requests/:id | { status?, statusNote?, title?, description?, visibility?, productArea?, internalNotes?, ticket? } | |
| POST | /api/v1/feedback/requests/:id/votes | { user? , account?, priority?, note? } | A user's vote, or an account's |
| POST | /api/v1/feedback/portal-links | { userId, name?, email?, account?, requestId? } | Verified portal link |
The SDK's endpoints (/api/v1/sdk/feedback/*, public key) are listed in api.md terms: requests/query, requests, requests/:id/view|vote|unvote|follow|comments, similar, updates, updates/read, portal-link; identity is always sent in the JSON body, never in the URL.
Permissions
| Action | Needs |
|---|---|
| Read requests, roadmaps and themes | Any workspace member |
| Triage, merge, vote for accounts, comment, tickets, roadmaps, run analysis | Triage feedback (feedback.manage, editors by default) |
| Settings | Project settings |
| API keys | Developer settings |
Data handling
Requests, votes and comments hold what people wrote, their claimed identity and traits, and their account. Delete user removes their votes, follows, updates and analysed feedback; their requests stay without the person. Feedback text is sent to Anthropic for themes, duplicates and questions only when the project (or server) has an Anthropic key; personal details such as emails and numbers are scrubbed from what the AI sees, and its output is scrubbed of links.