A valid request URL is required to generate request examples{
"posts": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"body": "<string>",
"status": "open",
"votes": 123,
"weight": {
"currency": "<string>",
"amount_minor": 123,
"paying_customers": 123,
"other_currency_customers": 123,
"free_customers": 123
},
"author_contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"merged_into_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"statuses": [
"<string>"
],
"currency": "<string>"
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}The feedback board
Requires feedback:read — held by owner, admin and member, unlike the rest of Phase 5. Triage is support work: a member who could not open this board would have to be made an admin to find out whether the thing a customer is asking about has already been asked forty times.
Merged duplicates are absent. A merged post is a pointer rather than a line item, and every board read carries that filter in its own SQL.
?currency= is what turns this into the ranking the module exists for. With it, every post carries weight: the summed monthly value of the active subscriptions of the distinct customers behind its voters. A team of five people is worth its revenue once, not five votes — and one person who belongs to three paying teams brings all three, because three teams are three accounts that want it.
The currency is an argument and never a guess: there is no exchange rate here, so summing minor units across currencies would produce a number that is neither. sort=weight without one answers 400 currency_required rather than picking one for you, and the weight reports other_currency_customers and free_customers beside it so a ranking can never quietly be over a subset of your accounts.
The weight exists here and nowhere else. It is not on GET /v1/roadmap/{publishable_key}, not on GET /v1/contact/feedback and not on any webhook — the public board says how many people asked, never who pays.
A valid request URL is required to generate request examples{
"posts": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"body": "<string>",
"status": "open",
"votes": 123,
"weight": {
"currency": "<string>",
"amount_minor": 123,
"paying_customers": 123,
"other_currency_customers": 123,
"free_customers": 123
},
"author_contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"merged_into_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"statuses": [
"<string>"
],
"currency": "<string>"
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Authorizations
A staff session token, uk_st_…. Minted by sign-up, sign-in or the two-factor exchange. Only a 401 means it is spent; not_a_member (403) is about the organization named in X-Organization-Id and leaves the token good for the others.
Headers
The organization the caller is acting on — the org_… code that appears in the panel URL. It identifies; the membership JOIN is what authorizes, so a forged code reads nothing: the answer is not_a_member (403), which does not mean the session is over. Absent, the session's default organization answers, or — if that membership was revoked while the session was open — any other one the caller still holds.
Query Parameters
Which environment to act in. A view parameter, valid only on the staff surface — a machine credential never chooses its environment, it is resolved from the key.
live, test One column of the board.
open, planned, in_progress, shipped, declined ISO 4217, e.g. BRL. Computes weight on every post, in this currency.
weight needs currency.
votes, weight Response
The live posts, most-wanted first.