Roadmap
The roadmap view of posts by status category, and its visibility.
Set up the SDK client used in the examples
API key or Dashboard session:
import { UpVoiced } from '@upvoiced/sdk';
const apiKey = process.env['UPVOICED_API_KEY']; // uv_live_… (Settings → API keys)
const workspace = process.env['UPVOICED_WORKSPACE_ID']; // sent as X-Workspace
if (!apiKey || !workspace) throw new Error('Set UPVOICED_API_KEY and UPVOICED_WORKSPACE_ID.');
const upvoiced = new UpVoiced({ apiKey, workspace });curl examples read $UPVOICED_API_KEY and $UPVOICED_WORKSPACE_IDfrom your shell. MCP examples are the tools/call request an MCP client sends to the MCP server with the same API key.
GET/v1/roadmap
Roadmap columns (statuses shown on the roadmap, in order) with cards of non-excluded boards, private/unlisted and unapproved included and flagged; filter by board (any member)
| Name | Type | Required |
|---|---|---|
board | string (uuid) | No |
limit | integervalue 1–50default 20 | No |
| Name | Type | Required |
|---|---|---|
x-workspace | string (uuid) | Yes |
Response 200: 23 fields
| Name | Type | Required |
|---|---|---|
visibility | "public" | "hidden" | Yes |
boards | array of object | Yes |
boards[].id | string (uuid) | Yes |
boards[].name | stringlength 1–100 | Yes |
boards[].slug | stringlength 3–32pattern ^[a-z0-9][a-z0-9-]*[a-z0-9]$ | Yes |
boards[].visibility | "public" | "private" | "unlisted" | Yes |
columns | array of object | Yes |
columns[].status | object | Yes |
columns[].status.id | string (uuid) | Yes |
columns[].status.name | stringlength 1–100 | Yes |
columns[].status.color | stringpattern ^#[0-9a-fA-F]{6}$ | Yes |
columns[].status.category | "open" | "active" | "done" | "closed" | Yes |
columns[].cards | array of objectitems ≤ 50 | Yes |
columns[].cards[].id | string (uuid) | Yes |
columns[].cards[].slug | stringlength 1–200pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ | Yes |
columns[].cards[].title | stringlength 1–140 | Yes |
columns[].cards[].excerpt | string | Yes |
columns[].cards[].vote_count | integervalue ≥ 0 | Yes |
columns[].cards[].tags | array of objectitems ≤ 50 | Yes |
columns[].cards[].last_activity_at | string (date-time) | Yes |
columns[].cards[].board | object | Yes |
columns[].cards[].approved | boolean | Yes |
columns[].total | integervalue ≥ 0 | Yes |
Errors: 400, 401, 403, 404, 409, 413, 422, 429, 500, 503, all in the standard error shape.
curl 'https://api.upvoiced.com/v1/roadmap' \
-H "Authorization: Bearer $UPVOICED_API_KEY" \
-H "X-Workspace: $UPVOICED_WORKSPACE_ID"const data = await upvoiced.get('/v1/roadmap');{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_roadmap",
"arguments": {
"board": "0190f5e2-4c1d-7a3b-8c2d-5e6f7a8b9c0d"
}
}
}Tool get_roadmap.
PATCH/v1/roadmap/visibility
Show the roadmap on Portal and Widget or hide it until ready; purges cache tags (owner/admin)
| Name | Type | Required |
|---|---|---|
x-workspace | string (uuid) | Yes |
| Name | Type | Required |
|---|---|---|
visibility | "public" | "hidden" | Yes |
Response 200: 1 fields
| Name | Type | Required |
|---|---|---|
visibility | "public" | "hidden" | Yes |
Errors: 400, 401, 403, 404, 409, 413, 422, 429, 500, 503, all in the standard error shape.
curl -X PATCH 'https://api.upvoiced.com/v1/roadmap/visibility' \
-H "Authorization: Bearer $UPVOICED_API_KEY" \
-H "X-Workspace: $UPVOICED_WORKSPACE_ID" \
-H "Content-Type: application/json" \
-d '{
"visibility": "public"
}'const data = await upvoiced.patch('/v1/roadmap/visibility', { body: { visibility: 'public' } });No MCP tool for this operation. The MCP server covers the everyday reads and writes.