The Pool Items API lets you query which catalog items a member can access through their active benefit programs. Each pool item is a specific product, class, post, or other catalog item that's been provisioned for a member, contact, or visitor as part of a benefit in their pool. Use this API together with other Wix Benefit Programs APIs.
With the Pool Items API, you can:
A pool item is the per-beneficiary copy of a catalog item that's been assigned to a benefit inside a beneficiary's pool. Pool items collapse the multi-step lookup that the underlying APIs would otherwise require. Instead of querying Programs, then Pools, then Items and joining the results, a single Query Pool Items call returns the per-member list directly.
Each pool item carries a providerAppId, category, and externalId triple that identifies the underlying catalog item, such as a Wix Stores product or a Wix Bookings service. Use these fields, or the pre-computed itemSearchKey, to map a pool item back to its source catalog. itemSearchKey has the format providerAppId/category/externalId. You can construct it manually with a / separator. Filtering by itemSearchKey is more efficient than composing 3 separate filter conditions.
Learn more about benefit programs components and lifecycle.
You don't create, update, or delete pool items directly. They're kept in sync with the underlying pools and items:
There's a single pool item for each combination of pool and item. Query Pool Items doesn't return removed pool items.
By default, each pool item includes only IDs and item references. To include display details from the related entities, pass one or more values in the fields parameter of Query Pool Items:
| Value | Populates | Includes |
|---|---|---|
POOL | pool | Pool display name, description, status, and credit configuration. |
PROGRAM | program | Program ID, display name, and external ID, if set. |
PROGRAM_DEFINITION | programDefinition | Program definition ID, display name, description, and external ID, if set. |
ITEM | itemInfo | Catalog item display name. |
BENEFIT | benefitInfo | Benefit key, display name, description, and credit price. |
BALANCE | balance | Pool's available credit balance. |
Request only the enrichments you need. Each one adds lookups to the related entities.
When you request the BENEFIT enrichment via the fields parameter, benefitInfo.price is populated with the cost to consume the benefit, expressed in credits. Credits are a configurable unit defined on the parent pool definition: each pool definition declares a credit configuration that includes a unit type. benefitInfo.price is absent when the benefit doesn't use credit-based pricing.
To check whether a member can afford a benefit, request the BALANCE and POOL enrichments. If pool.creditConfiguration is set, compare balance.available with benefitInfo.price. If it isn't set, the pool doesn't use credits: balance.available is 0, and benefits can be redeemed without a balance check.
It's important to note the following points before starting to code:
beneficiary.memberId filter to scope results to a specific beneficiary. Member callers don't need this filter, as the response is automatically scoped to the calling member.beneficiary field on each pool item.benefitKey. Use poolId together with benefitKey to identify a benefit.itemSetId on each pool item, but not the developer-facing identifier. Use poolId and benefitKey instead.providerAppId on each pool item.class, post, or group.providerAppId, category, and externalId with /. Use it as a single filter field when querying pool items by item reference.point or token). Used in benefitInfo.price when the benefit has credit-based pricing.Last updated: 21 October 2026