API Documentation

Comprehensive guide to accessing Microsoft Fabric roadmap data through our RSS and JSON endpoints.

GET RSS Feed

Endpoints: /rss and /rss.xml

Description: Returns an RSS 2.0 feed of recently modified releases with optional filtering.

Parameters

  • product_name - Filter by exact product name (case-sensitive)
  • release_type - Filter by exact release type
  • release_status - Filter by exact release status
  • limit - Maximum number of items (1-25, default: 25)

Examples

GET JSON API

Endpoint: /api/releases

Description: Returns a paginated envelope of releases. Sorted by last_modified (desc) by default, or by release_date (desc) when specified via the sort parameter. Supports filtering, full-text style partial search (simple ILIKE %q%) and page-based navigation. All collection responses are wrapped; a single-item lookup via release_item_id returns just the object (legacy compatibility) without the envelope.

Parameters

  • product_name - Exact match on product name
  • release_type - Exact match on release type
  • release_status - Exact match on release status
  • modified_within_days - Items modified within last N days (1–30)
  • q - Case-insensitive substring search across feature_name, feature_description, product_name. When Azure OpenAI embeddings are configured, q uses vector (semantic) search instead.
  • sort - Sort order: last_modified (default) or release_date
  • page - 1-based page number (default 1)
  • page_size - Items per page (default 50, max 200, min 1)
  • release_item_id - If provided, bypasses pagination and returns a single release object
  • include_inactive - Include releases removed from the roadmap (true or 1). Default: only active releases are returned.

Notes:

  • q trimming applied; empty/whitespace-only search is ignored.
  • When release_item_id is supplied, all other filter / paging parameters are ignored.
  • Stable, stateless pagination: combine your filters + page/page_size; use links.next until it becomes null.
  • Returns Link response header with rel="next"/rel="prev" when applicable.

Examples

Response Format & Schemas

Collection responses (/api/releases without release_item_id) are wrapped in an envelope that includes pagination metadata and HATEOAS-style links.

Collection Envelope

{
    "data": [
        {
            "release_item_id": "uuid",
            "feature_name": "string",
            "release_date": "YYYY-MM-DD|null",
            "release_type": "string",
            "release_status": "string",
            "product_id": "uuid|null",
            "product_name": "string",
            "feature_description": "string|null",
            "blog_title": "string|null",
            "blog_url": "string|null",
            "last_modified": "YYYY-MM-DD",
            "active": true
        }
        // ... up to page_size items
    ],
    "pagination": {
        "page": 1,
        "page_size": 50,
        "total_items": 1234,
        "total_pages": 25,
        "has_next": true,
        "has_prev": false,
        "next_page": 2,
        "prev_page": null
    },
    "links": {
        "self": "/api/releases?product_name=Power%20BI&page=1&page_size=50",
        "first": "/api/releases?product_name=Power%20BI&page=1&page_size=50",
        "last": "/api/releases?product_name=Power%20BI&page=25&page_size=50",
        "next": "/api/releases?product_name=Power%20BI&page=2&page_size=50",
        "prev": null
    }
}

Single Item (release_item_id)

{
    "release_item_id": "uuid",
    "feature_name": "string",
    "release_date": "YYYY-MM-DD|null",
    "release_type": "string",
    "release_status": "string",
    "product_id": "uuid|null",
    "product_name": "string",
    "feature_description": "string|null",
    "blog_title": "string|null",
    "blog_url": "string|null",
    "last_modified": "YYYY-MM-DD",
    "active": true
}

History Endpoint /api/releases/history/<release_item_id>

Returns the change history for a single release item, newest first. Each entry shows which fields changed. Possible change descriptions include field diffs (e.g. Release Date 2025-06-01 -> 2025-09-01), Roadmap Item Added, Removed from Roadmap, and Restored to Roadmap.

[
    {
        "changed_columns": "Removed from Roadmap",
        "last_modified": "2026-03-20"
    },
    {
        "changed_columns": "Release Status In Development -> Shipped",
        "last_modified": "2026-02-15"
    },
    {
        "changed_columns": "Roadmap Item Added",
        "last_modified": "2025-01-12"
    }
]

Changelog /api/changelog

Returns releases grouped by last_modified date with change annotations showing what was modified. Useful for building daily/weekly change reports.

Parameters

  • days - Look-back window in days (default: 30, max: 90)
  • product_name - Filter by exact product name
  • release_type - Filter by exact release type
  • release_status - Filter by exact release status
  • include_inactive - Include removed items (true or 1, default: true)
{
    "total_items": 48,
    "days": [
        {
            "date": "2026-04-04",
            "count": 5,
            "items": [
                {
                    "release_item_id": "uuid",
                    "feature_name": "string",
                    "product_name": "string",
                    "release_type": "string",
                    "release_status": "string",
                    "release_date": "YYYY-MM-DD|null",
                    "last_modified": "YYYY-MM-DD",
                    "active": true,
                    "changed_columns": [
                        "Release Date 2026-04-21 -> 2027-05-05"
                    ]
                }
            ]
        }
    ]
}

Examples

Filter Options /api/filter-options

{
    "product_names": ["Power BI", "Data Factory", ...],
    "release_types": ["Public Preview", "GA", ...],
    "release_statuses": ["In Development", "Launched", ...]
}

Email Subscription

POST /api/subscribe JSON body:

{
    "email": "user@example.com",
    "products": ["Power BI"],      // optional array
    "types": ["GA"],               // optional array
    "statuses": ["Launched"]       // optional array
}

Verification link sent if new/unverified. Other related endpoints:

  • GET /api/verify-email?token=... (JSON result)
  • GET /verify-email?token=... (HTML page)
  • GET /unsubscribe?token=... (HTML page)

HTTP Caching

All JSON & RSS endpoints emit:

  • ETag - Weak hash for conditional GET (send If-None-Match to receive 304)
  • Last-Modified - Based on build time (collection) or entity timestamp
  • Cache-Control - public, max-age=14400, stale-while-revalidate=3600 (4h fresh, 1h serve-stale)

Caching is handled by Azure Front Door at the CDN edge. The server sets appropriate HTTP cache headers on responses.

Caching & Performance

Summary of caching strategy:

  • CDN Cache (Azure Front Door): Responses cached at edge based on Cache-Control headers
  • Cache-Control: public, max-age=14400, stale-while-revalidate=3600 (4h fresh, 1h stale)
  • ETag: Weak content hash enables conditional GET (304 Not Modified)
  • Last-Modified: Build timestamp for conditional revalidation