API Documentation
Access Fabric roadmap data.
Follow updates with RSS
Paste this URL into your feed reader to follow recently modified roadmap items.
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.
https://www.fabric-gps.com/api/releases?page_size=10
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.
https://www.fabric-gps.com/mcp
For Claude Code:
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. sortlast_modified(default) orrelease_date, descending.page,page_size- Page starts at 1. Page size defaults to 50; range 1–200. Collection responses include
Linkheaders and page links. Refreshes can shift pages. include_inactivetrueor1includes 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-DDis exclusive UTC, within the past 366 days or tomorrow. product_name- Exact product name.
metricall(default),addition,edit,removal,restoration,status,target, orupcoming.bucket- A UTC day for
status, orYYYY-QN/unknownforupcoming. 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. detailsitems,total,previous_url,next_url, andcapped. 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; overridesdays. 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=TOKENreturns JSON;GET /verify-email?token=TOKENopens the verification page.GET /unsubscribe?token=TOKENopens the unsubscribe page.POST /api/send-preferences-linkaccepts an email address;GET/POST /api/preferences?token=TOKENmanages preferences.POST/DELETE /api/watchmanages feature watches;/watch/RELEASE_IDopens 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.