Two Minute Reports Logo
Platform

List roadmap

List public product roadmap items, optionally filtered by status.
GET /tmr/roadmap

Returns the public product roadmap as an array of items, ordered by upvotes (highest first), then by creation date (newest first). The hasUpvoted flag reflects whether the authenticated user has upvoted each item.

Authentication: Bearer token · Permission:platform:read · Rate limit: default (120 / 60s)

Query parameters

status
string
Filter by status. One of open, planned, in_progress, done, not_planned, or all. Defaults to all (no filtering). See statuses.

Request

curl "https://api.twominutereports.com/v1/tmr/roadmap?status=in_progress" \
  -H "Authorization: Bearer tmrc_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Response

{
  "success": true,
  "data": [
    {
      "id": "0190f8a1-2b3c-7d4e-8f90-1a2b3c4d5e6f",
      "title": "Slack delivery for scheduled reports",
      "description": "Send report snapshots straight to a Slack channel.",
      "category": {
        "id": "0190f8b0-1a2b-7c3d-8e4f-5a6b7c8d9e0f",
        "name": "Integrations",
        "hexColor": "#4A90D9",
        "icon": "plug"
      },
      "status": "in_progress",
      "statusNote": "Targeting October.",
      "statusChangedAt": "2026-09-03T10:00:00.000Z",
      "changelog": null,
      "upvotes": 128,
      "hasUpvoted": true,
      "commentCount": 14,
      "createdBy": {
        "id": "0190f8c1-2b3c-7d4e-8f90-1a2b3c4d5e6f",
        "name": "Priya Raman",
        "firstName": "Priya",
        "lastName": "Raman",
        "avatarUrl": null
      },
      "updatedBy": null,
      "createdAt": "2026-02-10T08:15:00.000Z",
      "completedAt": null
    },
    {
      "id": "0190f8a1-9c8b-7a6d-8e5f-4a3b2c1d0e9f",
      "title": "GoHighLevel",
      "description": null,
      "category": {
        "id": "0190f8b0-1a2b-7c3d-8e4f-5a6b7c8d9e0f",
        "name": "Integrations",
        "hexColor": "#4A90D9",
        "icon": "plug"
      },
      "status": "done",
      "statusNote": null,
      "statusChangedAt": "2026-08-21T12:00:00.000Z",
      "changelog": {
        "slug": "gohighlevel-connector",
        "title": "GoHighLevel Connector: CRM and Pipeline Reporting"
      },
      "upvotes": 10,
      "hasUpvoted": false,
      "commentCount": 0,
      "createdBy": null,
      "updatedBy": null,
      "createdAt": "2026-05-10T11:07:00.000Z",
      "completedAt": "2026-08-21T12:00:00.000Z"
    }
  ]
}

The roadmap item object

id
string
Roadmap item identifier.
title
string
Short title of the item.
description
string | null
Longer description, or null if none.
category
object | null
The item's category, or null if uncategorized. Contains id, name, hexColor, and icon (string | null) — the name of a Lucide icon, such as plug.
status
string
Current status. One of open, planned, in_progress, done, not_planned. See statuses.
statusNote
string | null
Why the item has its current status, in our words — for example "Targeting October". Always set for not_planned. Cleared whenever the status changes.
statusChangedAt
string | null
When the status last changed. Editing the title or description does not move it.
changelog
object | null
For a shipped item, the What's New entry that announced it: slug and title. The entry is at https://hub.twominutereports.com/changelog/{slug}. Only published entries appear here.
upvotes
number
Total number of upvotes.
hasUpvoted
boolean
Whether the authenticated user has upvoted this item.
commentCount
number
Number of comments on the item.
createdBy
object | null
The user who submitted the item, or null if unknown. Readable outside the owning team, so the object carries id, name, firstName, lastName and avatarUrl — neveremail.
updatedBy
object | null
The user who last edited it, or null if it has not been edited since. Readable outside the owning team, so id, name, firstName, lastName and avatarUrl only — never email.
createdAt
string
When the item was created.
completedAt
string | null
When the item was completed, or null if not completed.

Statuses

ValueShown in the Hub asMeans
openUnder reviewSuggested; not decided yet
plannedPlannedCommitted, not started
in_progressIn progressBeing built
doneShippedLive. completedAt is set, and changelog links the announcement when there is one
not_plannedNot plannedDecided against. statusNote says why
Copyright © 2026