API Documentation

Access Fabric roadmap data.

Follow updates with RSS

Paste this URL into your feed reader to follow recently modified roadmap items.

RSS feed URL
https://www.fabric-gps.com/rss

Open the RSS feed (RSS 2.0). /rss.xml is an alias.

RSS filters and examples

Use exact product_name, release_type, or release_status values from Filter Options. limit accepts 1–25 items, default 25.

Build with REST

Start with ten recently modified releases. Follow links.next for the next page.

REST starter URL
https://www.fabric-gps.com/api/releases?page_size=10

Open the JSON response · Releases reference

Connect an assistant with MCP

Connect an AI assistant to search Fabric roadmap releases, look up individual releases, and read their history. Use the public, read-only Streamable HTTP endpoint below.

MCP endpoint
https://www.fabric-gps.com/mcp

For Claude Code:

Claude Code command
claude mcp add --transport http fabric-gps https://www.fabric-gps.com/mcp

Search uses substring matching, not semantic search. Tools also list filters; none can change data or manage email or feedback.

Included automatically in web mode. Python clients, tool contracts, limits, and hosting: MCP client and deployment reference.

GET Releases

/api/releases returns a paginated collection, or one object when release_item_id is supplied.

product_name, release_type, release_status
Exact values from Filter Options. Availability, such as General availability, is a release type; Planned and Shipped are statuses.
modified_within_days
Inclusive UTC date window, 1–30 days.
q
Case-insensitive substring search of name, description, and product. When embeddings are configured, REST uses semantic search instead. Whitespace is trimmed; an empty query is ignored. Semantic results can include distance.
sort
last_modified (default) or release_date, descending.
page, page_size
Page starts at 1. Page size defaults to 50; range 1–200. Collection responses include Link headers and page links. Refreshes can shift pages.
include_inactive
true or 1 includes removed items; default false.
release_item_id
Returns one object instead of the collection; other filters and paging are ignored. An unknown ID returns 404.

Two useful variations

For a single item, replace RELEASE_ID with an ID returned by the collection:

/api/releases?release_item_id=RELEASE_ID
Release response example

Illustrative data, not a live record. Dates are quarters or null; description HTML is sanitized at read time. The original description is unchanged.

{
  "data": [{
    "release_item_id": "11111111-1111-1111-1111-111111111111",
    "feature_name": "Example feature",
    "release_date": "Q4 2026",
    "release_type": "General availability",
    "release_status": "Shipped",
    "product_id": null,
    "product_name": "Power BI",
    "feature_description": "Example description.",
    "feature_description_html": "<p>Example description.</p>",
    "blog_title": null,
    "blog_url": null,
    "last_modified": "2026-10-19",
    "active": true
  }],
  "pagination": {
    "page": 1, "page_size": 1, "total_items": 1, "total_pages": 1,
    "has_next": false, "has_prev": false, "next_page": null, "prev_page": null
  },
  "links": {
    "self": "/api/releases?page=1&page_size=1",
    "first": "/api/releases?page=1&page_size=1",
    "last": "/api/releases?page=1&page_size=1",
    "next": null, "prev": null
  }
}

A single-item request returns the object inside data, without the collection envelope.

GET Insights

/api/insights returns observed activity, status transitions, release-window changes, planned quarters, and paginated evidence. Open the dashboard.

days, end
30 (default) or 90 days. Optional end=YYYY-MM-DD is exclusive UTC, within the past 366 days or tomorrow.
product_name
Exact product name.
metric
all (default), addition, edit, removal, restoration, status, target, or upcoming.
bucket
A UTC day for status, or YYYY-QN/unknown for upcoming.
page
1–200, 50 evidence rows per page. Aggregate totals are not truncated.

Release-window changes over 90 days. Invalid filters return 400; unavailable data returns 503.

Insights response fields and coverage
activity
Product/kind rows with event and distinct-feature counts.
transitions, target_changes
Daily status/type counts and the number of release-date change events.
upcoming, products
Current quarter counts and product choices.
filters, coverage
Resolved UTC window/query and retained-history coverage, always complete: false.
details
items, total, previous_url, next_url, and capped. Links target dashboard evidence.
visuals
Derived dashboard chart values and links.

Counts describe observed events, not delivery guarantees. Repeated transitions count separately; pipeline-only writes do not. Additions are first retained observations. Retention/import coverage is unverified. Planned quarters are a current snapshot, independent of the historical window.

GET Release history

Replace RELEASE_ID with an ID from the releases collection:

/api/releases/history/RELEASE_ID

Returns newest changes first. Each entry has a changed_columns array and a last_modified date or null. Changes include field diffs, additions, removals, and restorations.

History response example
[
  {
    "changed_columns": ["Release Status Planned -> Shipped"],
    "last_modified": "2026-10-19"
  },
  {
    "changed_columns": ["Roadmap Item Added"],
    "last_modified": "2026-09-01"
  }
]

GET Changelog

/api/changelog groups items by their modified date, with change annotations. Open the last seven days.

days
Look back 1–90 days, default 30.
date
One historical YYYY-MM-DD; overrides days.
product_name, release_type, release_status
Exact filter values.
include_inactive
Includes removed items by default; set false to exclude them.
Changelog response example
{
  "total_items": 1,
  "days": [{
    "date": "2026-10-19", "count": 1,
    "items": [{
      "release_item_id": "11111111-1111-1111-1111-111111111111",
      "feature_name": "Example feature",
      "product_name": "Power BI",
      "release_type": "General availability",
      "release_status": "Shipped",
      "release_date": "Q4 2026",
      "last_modified": "2026-10-19",
      "active": true,
      "changed_columns": ["Release Status Planned -> Shipped"]
    }]
  }]
}
Temporal ranges and browser visit snapshots

since=YYYY-MM-DD is a legacy inclusive UTC range, today through 90 days ago. It overrides days and cannot be combined with date. Historical filters include removals/restorations by default. Repeated same-day tracked-field events count separately; pipeline/blog-only writes are excluded.

The response adds since, through, total_events, total_features, and complete: true. In this mode, last_modified is the observed UTC temporal-event day. Recorded history began August 27, 2025.

visit=1 returns the full unfiltered 90-day event snapshot for browser-local highlights, not a server visitor record. It adds mode, complete, exact UTC cutoff, and window_start; items carry stable content-event identities. Filters are display-only. It cannot combine with date, since, or event_date. Above 10,000 events, it returns 503 with complete: false rather than a partial acknowledgement.

Daily permalinks use event_date=YYYY-MM-DD for all tracked UTC events on one day, including repeated edits and removals. This ignores days, cannot combine with another temporal mode, and adds mode: "events", event_date, total_events, and total_features without reading or advancing visit state. Legacy date selection remains unchanged. All three event modes are private/no-store.

GET Filter Options

Open /api/filter-options for current exact values. Lists may be empty. Choose availability from release_types, not release_statuses.

{
  "product_names": ["Power BI", "Data Factory"],
  "release_types": ["Public preview", "General availability"],
  "release_statuses": ["Planned", "Shipped"]
}

Response examples illustrate structure, not the current dataset. Discover values rather than hard-coding them.

Email management reference

For normal use, get email updates or manage preferences. Subscription creation requires email verification.

Subscription request and related endpoints

POST /api/subscribe requires email. Filter arrays are optional; cadence is daily or weekly (default weekly). Requests are limited to five per hour.

{
  "email": "user@example.com",
  "products": ["Power BI"],
  "types": ["General availability"],
  "statuses": ["Shipped"],
  "cadence": "weekly"
}

A successful request returns a generic confirmation to protect subscription privacy; it does not confirm delivery or reveal whether an address is subscribed.

  • GET /api/verify-email?token=TOKEN returns JSON; GET /verify-email?token=TOKEN opens the verification page.
  • GET /unsubscribe?token=TOKEN opens the unsubscribe page.
  • POST /api/send-preferences-link accepts an email address; GET/POST /api/preferences?token=TOKEN manages preferences.
  • POST/DELETE /api/watch manages feature watches; /watch/RELEASE_ID opens the watch page.

Use the verification/preferences links sent by email; never share their tokens.

HTTP caching

Public releases, RSS, history, Filter Options, and ordinary changelog responses use 60 minutes fresh and 10 minutes stale-while-revalidate:

public, max-age=3600, stale-while-revalidate=600, must-revalidate

ETags support conditional GET (304); Last-Modified reflects supplied data timestamps or the build timestamp. Azure Front Door uses response cache headers.

Insights uses 60 minutes fresh, content ETags, and must-revalidate, without the stale window. MCP and /api/version use no-store; changelog since/visit/event_date modes are private/no-store. Sensitive email/feedback routes are not part of this public-data caching contract. Always respect the actual response headers.