Creating a Subscription Offer
Available via: Dashboard and API
From the Dashboard
In the Dashboard, subscription offers are called subscription templates.
- Go to Product catalog → Subscription templates in your Inflow Dashboard, and click Create template. You can also use + → Subscription template in the top bar.
- 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
- 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
- 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
- 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
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Offer name |
description | string | Yes | Offer description |
amountInCents | number | Yes* | Price per cycle in cents (min 50, max 99999999). *Omit it when using sourceCurrency |
currency | string | Yes | EUR, GBP or USD is the currency the offer settles in |
interval | string | Yes | day, week, month, or year |
intervalCount | number | Yes | Number of intervals between charges (max: day 365, week 52, month 12, year 3) |
trialPeriodDays | number | No | Free trial days (1–365) — see Trial Periods |
entryFeesInCents | number | No | First payment amount in cents (min 50). Can't be combined with trialPeriodDays: the entry fee applies and the trial is ignored |
cycleCount | number | No | Total billing cycles (min 2) |
smartRetryConfig | object | No | Override for Smart Retry on this offer. Omit or null to inherit the account default |
statementDescriptor | string | No | Bank statement descriptor (max 11 characters) |
successUrl | string | No | Redirect URL after successful subscription |
cancelUrl | string | No | Redirect URL if customer cancels checkout |
sessionCustomization | object | No | Checkout appearance customization |
returnMode | string | No | Post-payment screen: DEFAULT, APP_RETURN, or APP_INSTALL — see Mobile Apps |
appStoreUrl | string | No | App Store listing URL, shown when returnMode is APP_INSTALL |
playStoreUrl | string | No | Google Play listing URL, shown when returnMode is APP_INSTALL |
sourceCurrency | string | No | Price this offer in another currency — see Pricing in a Local Currency |
sourceAmountInMinorUnits | number | With sourceCurrency | Price per cycle, in sourceCurrency minor units |
sourceEntryFeesInMinorUnits | number | No | First-payment amount, in sourceCurrency minor units |
Offer settings act as the fallback. A checkout session created for this offer can override
returnMode,appStoreUrl, andplayStoreUrlper session. Set them once here and send nothing, or override them call by call.
Pricing in another currency. Send
sourceCurrencywithsourceAmountInMinorUnitsinstead ofamountInCents— 299.00 TRY is29900. We convert at the mid-market rate, with no conversion fee charged to you. Sending both a source amount andamountInCentsis 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.
Updated 15 days ago
