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. Always sorted by last_modified (desc), then release_date. 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
  • 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

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",
            "last_modified": "YYYY-MM-DD"  
        }
        // ... 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",
    "last_modified": "YYYY-MM-DD"
}

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

[
    {
        "changed_columns": ["FeatureDescription", "ReleaseDate"],
        "last_modified": "2025-01-12"
    },
    // ... newest first
]

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=1800, stale-while-revalidate=900 (30 min fresh, 15 min serve-stale)

Server-side Redis cache keeps a 24h fresh + 24h stale copy; client-facing headers use shorter periods for responsiveness.

Caching & Performance

Summary of server-side caching layers:

  • Redis Fresh Window: 24h (immediate responses)
  • Redis Stale Window: +24h (served while background refresh occurs)
  • Key Dimensions (collection): product_name, release_type, release_status, modified_within_days, q, page, page_size
  • Key Dimensions (single item): release_item_id
  • Background Refresh: Locking avoids thundering herd; stale responses annotated with X-Cache: STALE
  • Client Cache: Shorter 30m TTL encourages conditional revalidation with ETag