Creating a Subscription Offer

Available via: Dashboard and API

From the Dashboard

In the Dashboard, subscription offers are called subscription templates.

  1. Go to Product catalog → Subscription templates in your Inflow Dashboard, and click Create template. You can also use + → Subscription template in the top bar.
  2. Fill in the template:
    • Name — Only you see it, in your Dashboard
    • Description — What the subscription includes, shown at checkout
    • Image and Offer expiry (optional)
    • Amount and currency — EUR, USD or GBP, at least 0.50
    • Billing period — Weekly, Monthly, Annually, or Custom to charge every few weeks (up to 52), months (up to 12) or years (up to 3). Daily billing is available via the API only
  3. Optionally, under More options:
    • Price includes VAT — VAT is extracted from your price instead of being added to it
    • Entry fees — A different amount for the first payment, at least 0.50. See Entry Fees
    • Free trial — Number of free days before the first charge (1–365). See Trial Periods. A template can have entry fees or a free trial, not both
    • Number of cycles — Maximum number of billing cycles (minimum 2, leave empty for unlimited)
    • Smart retry — Account default, Custom or Disabled. See Smart Retry
  4. Optionally, under Options:
    • Enable waitlist (capture later) — Approve subscribers manually. See Waitlist
    • Redirect after checkout — Send subscribers to your website or app after checkout, with App Store / Google Play links for app installs. See Mobile Apps
    • Discord Roles — Automatically assign a Discord role to subscribers
  5. Click Create template.

A subscription link is generated automatically: checkout.inflowpay.com/s/{offerId}. See Subscription Templates for the full form and the template's page.

Via the API

curl -X POST https://api.inflowpay.com/subscription/offer \
  -H "X-Inflow-Api-Key: your_private_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Pro Plan",
    "description": "Full access to all features",
    "amountInCents": 2999,
    "currency": "EUR",
    "interval": "month",
    "intervalCount": 1,
    "trialPeriodDays": 14,
    "successUrl": "https://yoursite.com/welcome",
    "cancelUrl": "https://yoursite.com/pricing",
    "sessionCustomization": {
      "bgColor": "#ffffff",
      "fontColor": "#000000",
      "logoUrl": "https://yoursite.com/logo.png",
      "merchantName": "Your Brand"
    }
  }'

Request Body

FieldTypeRequiredDescription
namestringYesOffer name
descriptionstringYesOffer description
amountInCentsnumberYes*Price per cycle in cents (min 50, max 99999999). *Omit it when using sourceCurrency
currencystringYesEUR, GBP or USD is the currency the offer settles in
intervalstringYesday, week, month, or year
intervalCountnumberYesNumber of intervals between charges (max: day 365, week 52, month 12, year 3)
trialPeriodDaysnumberNoFree trial days (1–365) — see Trial Periods
entryFeesInCentsnumberNoFirst payment amount in cents (min 50). Can't be combined with trialPeriodDays: the entry fee applies and the trial is ignored
cycleCountnumberNoTotal billing cycles (min 2)
smartRetryConfigobjectNoOverride for Smart Retry on this offer. Omit or null to inherit the account default
statementDescriptorstringNoBank statement descriptor (max 11 characters)
successUrlstringNoRedirect URL after successful subscription
cancelUrlstringNoRedirect URL if customer cancels checkout
sessionCustomizationobjectNoCheckout appearance customization
returnModestringNoPost-payment screen: DEFAULT, APP_RETURN, or APP_INSTALL — see Mobile Apps
appStoreUrlstringNoApp Store listing URL, shown when returnMode is APP_INSTALL
playStoreUrlstringNoGoogle Play listing URL, shown when returnMode is APP_INSTALL
sourceCurrencystringNoPrice this offer in another currency — see Pricing in a Local Currency
sourceAmountInMinorUnitsnumberWith sourceCurrencyPrice per cycle, in sourceCurrency minor units
sourceEntryFeesInMinorUnitsnumberNoFirst-payment amount, in sourceCurrency minor units

Offer settings act as the fallback. A checkout session created for this offer can override returnMode, appStoreUrl, and playStoreUrl per session. Set them once here and send nothing, or override them call by call.

Pricing in another currency. Send sourceCurrency with sourceAmountInMinorUnits instead of amountInCents — 299.00 TRY is 29900. We convert at the mid-market rate, with no conversion fee charged to you. Sending both a source amount and amountInCents is rejected. See Pricing in a Local Currency.

Dashboard-only options. Waitlist approval, Discord role assignment and the Price includes VAT setting are configured from the Dashboard when creating or editing a template — they cannot be set through this API endpoint.

Response

Returns the created subscription offer with its id. Use this ID to build the subscription link:

https://checkout.inflowpay.com/s/{offerId}

Updating an Offer

From the Dashboard, open the template and click Edit to change its name, expiry date, VAT setting, free trial, smart retry, waitlist, redirect and Discord role. There is no public API endpoint for updating offers — updates are Dashboard-only.

The description, image, amount, currency, billing period, entry fees and number of cycles can't be changed once the template is created. To change the price, create a new template and archive the old one; existing subscribers keep their current plan.


Did this page help you?