Creating a Subscription Offer
Available via: Dashboard and API
From the Dashboard
- Go to Subscriptions in your Inflow Dashboard.
- Click Create Offer.
- Fill in the offer details:
- Name — The offer name (shown to customers)
- Description — What the subscription includes
- Amount — Price per billing cycle (in cents, minimum 150 = €1.50)
- Currency — EUR or USD
- Billing Interval — Week, month, or year (daily billing is available via the API only)
- Interval Count — Number of intervals between charges (e.g., 2 months)
- Optionally configure advanced features:
- Trial Period — Number of free days before the first charge (1–365)
- Entry Fee — A different amount for the first payment (minimum 150 cents)
- Cycle Count — Maximum number of billing cycles (minimum 2, leave empty for unlimited)
- Waitlist — Require manual approval before activating subscriptions
- Smart Retry (failed renewals) — Use the account default, set a custom reduction ladder, or disable it for this offer — see Smart Retry
- Discord Role — Automatically assign a Discord role to active subscribers
- Pricing Mode — TAX_EXCLUSIVE (default) or TAX_INCLUSIVE
- Collect Extra Info — Ask for additional information during checkout
- Session Customization — Custom background color, font color, logo, and merchant name
- Redirect URLs — Success and cancel URLs after checkout
- Return Mode & Store URLs — What the buyer sees after paying: the plain confirmation, a "Back to the app" button, or the App Store / Google Play badges. See Mobile Apps
- Click Create.
A subscription link is automatically generated: checkout.inflowpay.com/subscribe/{offerId}
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 150, 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 150) |
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, extra-info collection, and the tax-inclusive pricing setting are configured from the Dashboard when creating or editing an offer — 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/subscribe/{offerId}
Updating an Offer
From the Dashboard, you can update an offer's name, description, and settings. There is no public API endpoint for updating offers — updates are Dashboard-only.
Changing the price of an offer does not affect existing subscribers — only new subscriptions will use the updated price.
Updated 23 days ago
