Application API Utilities packages GET
October 15, 2026 at 9:35 AM/packages [GET]
Return list of membership packages and rates for the current member - protected.
Parameters
app_id[optional] (string) - the id of the app in its respective app storeapp_platform[optional] (string) - app_ios or twa or app_androidpromo_code[optional] (string, max 32 chars) - a valid promo code to apply to the rates returned.version[optional] (number) - the version of the in app product code you want to interact with.
If either app_platform or app_id is set, then the other must also be set.
version only has effect when app_platform is set, defaults to 0.
Response Messages
If the promo_code is invalid (expired, already used, doesn’t apply to this member),
you will still get back the rates, and each row will have a promo_error field
(a string that says something like "<promo_code> is not a valid promo code").
If the promo_code is valid and identifies a “free trial”, only one package/rate will be returned
in this array and it will contain trial_length field indicating the number of days in the free
trial. Most of the other fields returned will be irrelevant (it will essentially be a random package
and rate, although it will have a zero amount).
200 OK - success
{
"packages" : [
An array of package and rate information, ordered by an internally determined display order and then the length (in days) of the package.
Each entry will have the following fields:
package_id– internal ID of the packagerate_id– internal ID of the ratename– Localized name of the membership packageamount– The amount of the initial purchaseamount_fmt– The formatted-with-currency version of that amountamount_monthly– The equivalent per-month amount for this packageamount_monthly_fmt– The formatted-with-currency version of that amountdays– The length, in days, of the packagecurrency_code– The 3-letter ISO code for the currency of the package (currently all packages are in USD)
{
"package_id": 42,
"rate_id": 113,
"name": "Six Month Platinum",
"amount": 26.99,
"amount_fmt": "$26.99",
"amount_monthly": 4.50,
"amount_monthly_fmt": "$4.50",
"days": 180,
"currency_code": "USD",
If a package is cheaper that the most expensive (non-discounted) package being offered, then the following optional fields will be present:
savings– The amount this package saves you compared to the equivalent period (of the most expensive option)savings_fmt– The formatted-with-currency version of that amountsavings_percentage– The percentage that this saving represents If a validpromo_codewas supplied (see below), these savings reflect that and are still compared to the most expensive (non-discounted) package, i.e., without the promo code applied.
Note: it is usually the case that the one month package is the most expensive, so the savings are calculated for the three month package as if you would have bought three one month packages, etc.
"savings": 32.95,
"savings_fmt": "$32.95",
"savings_percentage": 55,
If a valid promo_code was supplied, each entry will also have the following fields:
discount– The amount the promo code has saved on the initial purchasediscount_fmt– The formatted-with-currency version of that amountoriginal– The non-discounted amount (i.e., the original package price)original_fmt– The formatted-with-currency version of that amountoriginal_monthly– The equivalent per-month non-discounted amountoriginal_monthly_fmt– The formatted-with-currency version of that amountpercentage– The percentage the promo code has reduced the initial purchase
"discount": 3.00,
"discount_fmt": "$3.00",
"original": 29.99,
"original_fmt": "$29.99",
"original_monthly": 5.00,
"original_monthly_fmt": "$5.00",
"percentage": 10
},
...
],
"can_purchase": true
can_purchase indicates if the member should be allowed to continue purchasing. If it is false and the member tries to make a purchase, the safest thing to do may be to direct them to the billing dashboard.
}
If a valid app_platform and app_id was supplied, each entry will also have the following fields:
app_product_id– The id of the in app product that corresponds to this package.offer_id[optional] (string) – present when the app_platform is app_android and the version is greater than 0
Additionally, all packages where we are unable to provide an in app product are filtered out of the listing.
Versions
For twa or app_android we currently allow version 0 or 1.
For app_ios we currently only support version 0.