Skip to main content
publisherQuery allows your own services to query a user’s products and entitlements including their XBOX Game Pass subscription status. Your service shouldn’t regularly poll for user purchases to avoid call rate limits based on a per-user time window. Currently, the limit is 100 query requests within a five-minute window for the same user. Triggering a rate limit causes a 429 HTTP response with information about when the next request can be made. Results include only products directly owned or entitled by the user account your service is calling on-behalf-of. Shared entitlements that can appear on client aren’t returned. See Product sharing model for games. For specific info on querying a user’s Game Pass subscription status, see Detecting XBOX Game Pass subscription access from your service.
publisherQuery only supports calls from partner services.
Client apps or games aren’t able to call this service directly.

Updates and improvements in publisherQuery (Collections Query v9)

publisherQuery is the latest Collections Query API (v9). If migrating from b2bLicensePreview (v8), review this section for behavior differences. publisherQuery has the following changes and improvements over b2bLicensePreview:
  • Ability to query for a user’s XBOX Game Pass subscription status
  • Requires a predefined list of products to return. A best practice, but not required with v8 b2bLicensePreview. Titles who didn’t follow this best practice often had post-release issues where the request would timeout due to the large scope of content based on their query parameters. This prevented users from getting in-game credit until the game’s service was updated to specify which ProductIds they wanted within the query request.
  • Streamlined response data fields to remove unused or unnecessary values
  • Streamlined request parameters based on developer feedback
Removed from the request body:
  • Market - All requests have context for all regions in publisherQuery
  • ExpandSatisfyingItems - All results expand satisfying entitlements in publisherQuery
  • EntitlementsFilter - Not used as a predefined list of productIds of the query are required
publisherQuery doesn’t support LegacyProductIds (ProductIds generated from the retired XBOX Developer Portal and used as ProductId from the XBOX Inventory service).
If migrating your service from XBOX Inventory, you need to internally map the StoreId (ProductId value from Collections) to the matching LegacyProductId on your own service. Otherwise, you can look at v8 b2bLicensePreview, which returns both StoreId and LegacyProductIds.
For more information, see the corresponding article Selecting the right Collections Query API for your needs

Prerequisites

Review Prerequisites for service-to-service APIs. This API supports both Microsoft Entra ID and delegated auth X-token auth types. If product configuration isn’t published in Partner Center, calls can succeed but return no results.

Request

Request syntax

Request header

Request body

The ProductSkuId object contains the following parameters.

Request example

The v9 publisherQuery API supports a maximum of 100 productSkuIds per request. Providing more than 100 productIds in the productSkuIds the API returns an HTTP 400 error.
Default maxPageSize is 100, but in the example it’s lower to demonstrate requesting the remaining items.

Response

Response body

The PublisherQueryItemContractV9 object contains the following parameters. The TrialInformation object contains the parameters that are shown in the following table.

Product type values and meaning

Product status values and meaning

Product acquisitionType values and meaning

Understanding the results of Satisfied Entitlements with the satisfiedByProductIds field

If the satisfiedByProductIds array is empty, the user has a direct entitlement from a direct purchase to the item. Otherwise if the satisfiedByProductIds array has one or more ProductIds, the item is entitled to the user from those products (bundles, subscriptions, etc.). If the user has both a direct and satisfying entitlement to an item, if excludeDuplicates in the request is True then the direct entitlement will take priority and satisfiedByProductIds will be empty.

Response example

Requesting remaining results with the continuation token

If your query has more results than can be returned in a single response (controlled by the maxPageSize), your initial query response has a continuationToken. You can then use this continuationToken in a follow-up request by adding the continuation token to a copy of the previous request body. Example continuation request:
Even if you specify the excludeDuplicates flag, when using a continuation token it’s possible to get entries of entitlements that have different status. So verify the results for duplicate entries and if they have a status that isn’t Active.

See also

Manage products from your services Authenticating your service with the Microsoft Store APIs Managing consumable products from your service
Last modified on August 20, 2026