Skip to content

Roadmap

Share what you’re building with your users. The roadmap is a public Kanban board with four fixed columns, upvoting, and the ability to promote feedback items directly onto the board.

Fetch the public roadmap for a project:

Terminal window
curl https://api.sassmaker.com/v1/roadmap/public/my-app
ColumnDescription
backlogIdeas and tasks not yet scheduled
plannedCommitted to building
in_progressCurrently being worked on
doneShipped

Each roadmap item has a public flag. Private items (public: false) are only visible to the project owner in the dashboard. The public roadmap page and API only return public items.

Feedback items can be promoted to roadmap items via the dashboard or the API. When promoted, the feedback status is automatically set to on_roadmap and a new roadmap item is created in the planned column with the feedback’s title and description.

Every project gets a public roadmap at:

https://app.sassmaker.com/roadmap/[project-slug]

Users can browse the board and upvote items without needing an API key.

GET /v1/roadmap/public/:slug

Auth: None (public endpoint)

Terminal window
curl https://api.sassmaker.com/v1/roadmap/public/my-app

Response (200):

{
"data": [
{
"id": "abc-123",
"project_id": "proj_456",
"feedback_id": null,
"title": "Add dark mode",
"description": "Theme support for dark mode",
"column": "planned",
"position": 0,
"public": true,
"upvote_count": 12,
"downvote_count": 0,
"created_at": "2025-01-01T00:00:00Z",
"updated_at": "2025-01-01T00:00:00Z"
}
],
"project": { "name": "My App", "slug": "my-app" }
}

Errors:

StatusMessageCause
404"Project not found"Invalid slug
POST /v1/roadmap/public/:slug/:id/vote

Auth: None (public endpoint)

Terminal window
curl -X POST https://api.sassmaker.com/v1/roadmap/public/my-app/abc-123/vote \
-H "Content-Type: application/json" \
-d '{ "user_identifier": "user_fingerprint", "vote": 1 }'
FieldTypeRequiredDescription
user_identifierstringYesUnique identifier for the voter (e.g. localStorage UUID)
votenumberYes1 for upvote, -1 for downvote

Response (200): { "ok": true }

Errors:

StatusMessageCause
400"user_identifier is required"Missing user_identifier
400"vote must be 1 or -1"Invalid vote value
404"Item not found"Item doesn’t exist or is private
DELETE /v1/roadmap/public/:slug/:id/vote?user_identifier=...

Auth: None (public endpoint)

Response (200): { "ok": true }

POST /v1/roadmap/dashboard/:projectId

Auth: Session Token (project owner only)

Terminal window
curl -X POST https://api.sassmaker.com/v1/roadmap/dashboard/proj_456 \
-H "Authorization: Bearer SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Add dark mode",
"description": "Theme support",
"column": "backlog",
"public": true
}'
FieldTypeRequiredDefaultDescription
titlestringYesItem title
descriptionstringNonullItem description
columnstringNobacklogbacklog, planned, in_progress, or done
publicbooleanNotrueVisible on public roadmap

Response (201): Full roadmap item object.

Errors:

StatusMessageCause
400"Title is required"Missing title
400"Invalid column"Column not one of the four valid values
403"Forbidden"Not the project owner
POST /v1/roadmap/dashboard/:projectId/from-feedback/:feedbackId

Auth: Session Token (project owner only)

Creates a roadmap item from a feedback entry. The item is placed in the planned column and the feedback status is set to on_roadmap.

Response (201): Full roadmap item object with feedback_id set.

Errors:

StatusMessageCause
403"Forbidden"Not the project owner
404"Feedback not found"Invalid feedback ID or wrong project
PATCH /v1/roadmap/dashboard/:projectId/:id

Auth: Session Token (project owner only)

Terminal window
curl -X PATCH https://api.sassmaker.com/v1/roadmap/dashboard/proj_456/abc-123 \
-H "Authorization: Bearer SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "column": "in_progress" }'

All fields are optional: title, description, column, position, public.

Response (200): Updated roadmap item object.

DELETE /v1/roadmap/dashboard/:projectId/:id

Auth: Session Token (project owner only)

Response (200): { "ok": true }

POST /v1/roadmap/dashboard/:projectId/reorder

Auth: Session Token (project owner only)

Used after drag-and-drop to persist new positions.

Terminal window
curl -X POST https://api.sassmaker.com/v1/roadmap/dashboard/proj_456/reorder \
-H "Authorization: Bearer SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "id": "abc-123", "column": "in_progress", "position": 0 },
{ "id": "def-456", "column": "in_progress", "position": 1 }
]
}'

Response (200): { "ok": true }