/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 store
  • app_platform [optional] (string) - app_ios or twa or app_android
  • promo_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 package
  • rate_id – internal ID of the rate
  • name – Localized name of the membership package
  • amount – The amount of the initial purchase
  • amount_fmt – The formatted-with-currency version of that amount
  • amount_monthly – The equivalent per-month amount for this package
  • amount_monthly_fmt – The formatted-with-currency version of that amount
  • days – The length, in days, of the package
  • currency_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 amount
  • savings_percentage – The percentage that this saving represents If a valid promo_code was 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 purchase
  • discount_fmt – The formatted-with-currency version of that amount
  • original – The non-discounted amount (i.e., the original package price)
  • original_fmt – The formatted-with-currency version of that amount
  • original_monthly – The equivalent per-month non-discounted amount
  • original_monthly_fmt – The formatted-with-currency version of that amount
  • percentage – 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.