Skip to content
UpVoiced Docs

API reference

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)

Authentication
API key or Dashboard session; API key scope read
Operation id
getRoadmap
Query parameters
NameTypeRequired
boardstring (uuid)No
limitintegervalue 1–50default 20No
Headers
NameTypeRequired
x-workspacestring (uuid)Yes
Response 200: 23 fields
Response 200 (application/json)
NameTypeRequired
visibility"public" | "hidden"Yes
boardsarray of objectYes
boards[].idstring (uuid)Yes
boards[].namestringlength 1–100Yes
boards[].slugstringlength 3–32pattern ^[a-z0-9][a-z0-9-]*[a-z0-9]$Yes
boards[].visibility"public" | "private" | "unlisted"Yes
columnsarray of objectYes
columns[].statusobjectYes
columns[].status.idstring (uuid)Yes
columns[].status.namestringlength 1–100Yes
columns[].status.colorstringpattern ^#[0-9a-fA-F]{6}$Yes
columns[].status.category"open" | "active" | "done" | "closed"Yes
columns[].cardsarray of objectitems ≤ 50Yes
columns[].cards[].idstring (uuid)Yes
columns[].cards[].slugstringlength 1–200pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$Yes
columns[].cards[].titlestringlength 1–140Yes
columns[].cards[].excerptstringYes
columns[].cards[].vote_countintegervalue ≥ 0Yes
columns[].cards[].tagsarray of objectitems ≤ 50Yes
columns[].cards[].last_activity_atstring (date-time)Yes
columns[].cards[].boardobjectYes
columns[].cards[].approvedbooleanYes
columns[].totalintegervalue ≥ 0Yes

Errors: 400, 401, 403, 404, 409, 413, 422, 429, 500, 503, all in the standard error shape.

curl
curl 'https://api.upvoiced.com/v1/roadmap' \
  -H "Authorization: Bearer $UPVOICED_API_KEY" \
  -H "X-Workspace: $UPVOICED_WORKSPACE_ID"
TypeScript SDK
const data = await upvoiced.get('/v1/roadmap');
MCP
{
  "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)

Authentication
API key or Dashboard session; API key scope admin
Operation id
updateRoadmapVisibility
Headers
NameTypeRequired
x-workspacestring (uuid)Yes
Request body (JSON)
NameTypeRequired
visibility"public" | "hidden"Yes
Response 200: 1 fields
Response 200 (application/json)
NameTypeRequired
visibility"public" | "hidden"Yes

Errors: 400, 401, 403, 404, 409, 413, 422, 429, 500, 503, all in the standard error shape.

curl
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"
}'
TypeScript SDK
const data = await upvoiced.patch('/v1/roadmap/visibility', { body: { visibility: 'public' } });
MCP

No MCP tool for this operation. The MCP server covers the everyday reads and writes.