Microsoft Store API endpoint
Returns products related to a seed product id, paginated. product_type must match the seed product's own media type (apps -> Application, games -> Game, passes -> Passes) -- any other value is rejected upstream. Omit product_type to have it resolved automatically from product_id via one extra lightweight lookup; pass it explicitly to skip that lookup.
/microsoftstore/relatedReturns products related to a seed Microsoft Store product id, paginated.
Query parameters:
product_id (required) — seed Microsoft Store product id, e.g. 9NCBCSZSJRSB.product_type (optional) — the seed product's own type. One of Application, Game, Passes (matches the product's own media_type: apps → Application, games → Game, passes → Passes). Any other value is rejected by the upstream itself with 500, surfaced here as a client-side 400 before the request is even sent. Omit it and this endpoint resolves it automatically from product_id via one extra lightweight lookup (the same approach the real /related/<id> page itself uses) — pass it explicitly only to skip that lookup when you already know the type.page (optional, default 1) — 1-based page number.page_size (optional, default 10, max 24) — related products per page.country (optional, default US) — store country/region code (ISO-2).locale (optional, default en-US) — display locale (BCP-47).Known upstream quirk, worked around automatically: the upstream endpoint silently returns zero items (and total_count: 0) whenever it is asked for 5 or fewer items, even when real related-product data exists — confirmed live against a product with 50 real related products. This client always requests at least 6 items from upstream internally and trims the result to page_size, so a small page_size never trips this bug; you do not need to work around it yourself.
Returns product_id, product_type, page, page_size, total_count, has_more_pages, items[] (same shape as /microsoftstore/search's items[]), and source_url. A product with no related products returns 200 with total_count: 0 and an empty items[].
| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| product_id | 20 | |
| title | 20 | “Discord” and 19 other values |
| description | 20 | median 455 characters |
| publisher | 20 | “Discord, Inc.” and 18 other values |
| categories | 20 | median 1 entry |
| media_type | 20 | Apps in all 20 |
| kind | 20 | app in all 20 |
| average_rating | 20 | 3.1 to 4.9, median 4.4 |
| rating_count | 20 | “18K” and 13 other values |
| price | 20 | 0 |
| display_price | 20 | Free in all 20 |
| free | 20 | true in 20 of 20 |
| icon_url | 20 | images-eds-ssl.xboxlive.com and 1 other host |
| poster_art_url | 20 | images-eds-ssl.xboxlive.com and 1 other host |
| url | 20 | apps.microsoft.com |
| is_application | 20 | true in 20 of 20 |
| release_date_utc | 14 | 2010-10-18 to 2024-09-07 |
| is_pwa | 9 | true in 9 of 9 |
| award | 1 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| product_id | string | Yes | Seed Microsoft Store product id | 9NCBCSZSJRSB | |
| product_type | string | No | The seed product's own type. Omit to auto-resolve from product_id. Allowed values: Application, Game, Passes. | ||
| page | integer | No | 1-based page number | ||
| page_size | integer | No | Related products per page (max 24) | ||
| country | string | No | Store country/region code (ISO-2) | ||
| locale | string | No | Display locale (BCP-47) | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/microsoftstore/related?product_id=9NCBCSZSJRSB&product_type=Application&page=1&country=us" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"product_id": "9ncbcszsjrsb",
"product_type": "Application",
"page": 1,
"page_size": 10,
"total_count": 50,
"has_more_pages": true,
"items": [
{
"product_id": "xpdc2rh70k22mn",
"title": "Discord",
"publisher": "Discord, Inc.",
"media_type": "Apps",
"kind": "app",
"price": 0,
"display_price": "Free",
"free": true,
"url": "https://apps.microsoft.com/detail/xpdc2rh70k22mn"
}
],
"source_url": "https://apps.microsoft.com/api/Reco/GetRelatedProductsList/9NCBCSZSJRSB?noItems=10&pgNo=1&productType=Application&gl=US&hl=en-US"
}
}Request schema
No body schema
Response schema
#/definitions/microsoftstore.relatedResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | microsoftstore.RelatedResponse | No | ||||
| data.has_more_pages | boolean | No | true | |||
| data.items | array | No | Product record, 27 fields: average_rating, award, categories, description, display_price, free, icon_url, is_application, is_game, is_pwa, is_subscription, is_theme and 10 more. Described under Microsoft Store Charts API. | |||
| data.page | integer | No | 1 | |||
| data.page_size | integer | No | 10 | |||
| data.product_id | string | No | 9ncbcszsjrsb | |||
| data.product_type | string | No | Application | |||
| data.source_url | string | No | ||||
| data.total_count | integer | No | 50 | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/microsoftstore/related?product_id=9NCBCSZSJRSB&product_type=Application&page=1&country=us" \
-H "x-api-key: $CRAWLORA_API_KEY"