When an online store integration asks Rhythm which membership packages it can sell, Rhythm returns only active, visible packages from active, visible membership types. The store’s include and exclude lists narrow that set, and the response includes only the display fields available to storefront integrations. This is a public storefront listing, not a Console screen.
Route
| Method and path | Purpose |
|---|---|
POST /packages/{tenantId}/public/onlineStore | List the membership packages and membership types a store can sell |
Request
| Field | Values | Default | Notes |
|---|---|---|---|
membership_type_restriction | none, include, exclude | none | Keeps only the listed types, removes the listed types, or does not filter by type. |
membership_type_ids | List of identifiers | — | Required when membership_type_restriction is include or exclude. |
membership_package_restriction | none, include, exclude | none | Uses the same pattern for individual packages. |
membership_package_ids | List of identifiers | — | Required when membership_package_restriction is include or exclude. |
An include restriction with an empty identifier list is valid and returns no results. Rhythm ignores any extra fields beyond these four in the request.
How the Listing Is Built
Rhythm processes a request in this order:
- Load every package in your Rhythm account.
- Apply the membership-type restriction.
- Apply the membership-package restriction.
- Load the membership type for each package still in the list.
- Remove anything excluded by the visibility rules below.
- Return only the display fields.
| Rule | Effect |
|---|---|
| A membership type is inactive | Rhythm drops every package of that type. |
| A membership type is hidden from the Portal | Rhythm drops every package of that type. |
| A package is hidden from the Portal | Rhythm drops the package. |
| A package is hidden from the online store | Rhythm drops the package (see below). |
| A package is inactive | Rhythm drops the package. |
A store’s own restrictions cannot override these visibility rules. A membership type can still appear in the response with no packages under it when the type passes the rules, but package-level rules remove all of its packages.
In the Console, you hide a package from the Portal with the Hide this package from the portal checkbox in the package's Membership & Renewal Information section. Portal visibility also depends on the package's eligibility criteria, so a visible, unhidden package can still be unavailable to a shopper who does not meet those rules. An inactive package works the same way in the Portal, which means members never see it there, but staff can still find and edit it in Console search.
Tip
If a package seems to be missing from a storefront listing, reproduce the issue through the storefront's own order flow with the membership type you expect. Do not test through a Membership application process, because storefront listings and application processes use different eligibility paths.
Warning
When a storefront purchase is for a child organization's membership but bills a parent or other bill-to organization, Rhythm can evaluate eligibility against the paying organization instead of the organization receiving the membership. This can produce an ineligibility error even though the receiving organization actually qualifies.
Fields Returned
Rhythm returns only the fields below. Everything else on the type or package record is left out, including the package’s own display order and image.
| Record | Fields |
|---|---|
| Type | id, name, universal_shopping_cart_image_uri, display_order, display_in_portal_as |
| Package | id, name, price, member_price, membership_type_id, enable_special_prices, display_in_portal_as, description |
member_price is documented as the package’s renewal price. Pricing and special-price rules decide what a shopper actually pays at checkout, not this listing.
A Store Cannot Sort Packages in Your Own Order
Because package display_order is not returned, a storefront cannot reproduce the package order you set in the Console from this listing alone.
Keep a Package Out of an Online Store
A package’s hide_from_online_store field keeps it out of every online-store listing while leaving it available in the Portal. This is separate from hide_from_portal, which controls Portal visibility. There is no Console control for hide_from_online_store; setting it requires calling the package API directly.
Suggested Donations
A package can carry a list of fundraising products and suggested amounts in suggest_donations, so those donations can be proposed at checkout. Each entry names a fundraising product that must already exist, and Rhythm will not let you delete a fundraising product while a package still names it. Create and maintain those fundraising products in Finance & Billing setup, outside the membership application area; the package only references a product that already exists there. There is no Console control for this list, so you can only set it through the package API. This article does not confirm whether any checkout experience currently reads it.
Errors
| Response | Cause |
|---|---|
400 InvalidRequest: … | A restriction value is something other than none, include, or exclude; a list is sent as a single value instead of an array; or include or exclude is sent without the identifier list. |
401 Unauthorized | The request carries no identity. |
| A failed listing with no specific package-level error | A remaining package’s membership type could not be loaded, so the whole response fails instead of dropping only that package. |
Related
- Add-Ons, Their Types, and Prices
- How an Application's Order Is Priced