Skip to main content
The b2bLicensePreview API allows your own services to query for a user’s products and entitlements. You can scope your query to particular products, product types, or use other filters in your query. 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 to the user account your service is calling on-behalf-of. Shared entitlements that can appear on the client aren’t returned. For more information on sharing scenarios, see Product sharing model for games.
To avoid response timeouts and long response times, you should always specify the exact products you want in your results by using the productSkuIds parameter in the request.
Calling without the productSkuIds list results in longer response times that increase based on the total number of entitlements and purchases the user made across XBOX and the Microsoft Store App.
b2bLicensePreview is for calls from partner services.
Client apps or games shouldn’t call this service directly.

b2bLicensePreview (Collections v8) vs publisherQuery (Collections v9) to query products

b2bLicensePreview (Collections v8) is the prior Collections service to query user entitlements, but is still available for partner use. publisherQuery (Collections v9) is the latest and provides expanded features such as exposing XBOX Game Pass subscription status. There are still scenarios where partners might want to use b2bLicensePreview such as support for LegacyProductIds used by the XBOX Inventory service. For more information, see the corresponding article Selecting the right Collections Query API for your needs

Request

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 syntax

Request header

Request body

The ProductSkuId object contains the following parameters.

Request example

Default maxPageSize is 100, but in the example it’s lower to demonstrate requesting the remaining items.

Response

Response body

The CollectionItemContractV8 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, a continuationToken is provided in the latest response. You use this continuationToken in a follow-up request by adding it to a copy of the previous request body. Example:
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 Renewing a User Store ID key
Last modified on August 20, 2026