v1

latestOpenAPI 3.0.02026-07-24103118224.7 KB
Subscription

Initiate subscription from offer in the server to server process

ℹ️ Note: To transmit card information directly through this API (server-to-server), replace the default base URL with https://api-card.inflowpay.com — contact support to get the required authorization.

If you are not transmitting card information directly (e.g. you're using our SDK to collect card details), keep the default base URL.

Initiates a new subscription from an existing offer

post/subscription/offer/{subscriptionOfferId}/initiate-server

Path parameters

subscriptionOfferIdstring required
Example:offer_1234567890abcdef

Unique identifier of the subscription offer

Request body

customerEmailstring email required

Customer email address

savePaymentMethodboolean

Whether to save the payment method. Cannot be used if useCustomerPaymentMethod is true.

useCustomerPaymentMethodboolean

Whether to use the last saved customer payment method. Cannot be used if savePaymentMethod is true.

offSessionboolean

Off-session payment (payer absent), Merchant Initiated. Requires a saved payment method (useCustomerPaymentMethod) and that the merchant is allowed to use off-session payments. Cannot be combined with force3ds or with card information.

force3dsboolean

Force an on-session (payer present) 3DS browser challenge. With card information the 3DS is forced even if it would not normally be required. With useCustomerPaymentMethod the browser 3DS is performed before charging. Cannot be combined with offSession.

billingCountrystring required

Billing country code (ISO 3166-1 alpha-2)

postalCodestring

Billing postal code (required for some countries like US)

purchasingAsBusinessboolean required

Whether the purchase is for a business

businessNamestring

Business name (required if purchasingAsBusiness is true)

taxIdstring

Business tax ID (required if purchasingAsBusiness is true)

firstNamestring

First name, is optional but can cause issues with the 3DS authentication if not provided

lastNamestring

Last name, is optional but can cause issues with the 3DS authentication if not provided

metadatasobject

Optional metadata (key-value pairs)

autoConfirmboolean

Auto-confirm the payment (default false). When enabled, the payment is processed immediately if no 3DS step is required, or right after a successful 3DS authentication.

pricingMode'TAX_EXCLUSIVE' | 'TAX_INCLUSIVE'

Pricing mode for the products. TAX_EXCLUSIVE (default): Product prices are excluding tax (HT), tax is added on top to calculate the final amount. TAX_INCLUSIVE: Product prices include tax (TTC), tax is extracted from the total while keeping the final amount fixed.

threeDsSuccessUrlstring

URL to redirect to after successful 3DS authentication, only required if card information is provided

threeDsFailureUrlstring

URL to redirect to after failed 3DS authentication, only required if card information is provided

marketplaceFeeInCentsnumber

Connect only: explicit marketplace take on this payin in cents. Only the parent marketplace may set this for sub-merchant payins (X-On-Behalf-Of). When omitted, the marketplace default from settings applies at checkout success.

captureMode'AUTOMATIC' | 'MANUAL'

Capture mode for card payments. AUTOMATIC (default): funds are captured when the customer pays. MANUAL: funds are authorized at checkout and must be captured later via POST /api/payment/:paymentId/capture (full amount only).

statementDescriptorstring

Optional statement descriptor (max 11 characters) shown on the customer's bank statement as 'INFLOWPAY* <descriptor>'. Falls back to the account-level statement descriptor if omitted.

labelstring

Optional label for the subscription that overrides the offer name. If not provided, the subscription offer's name is used.

Example request

{
  "card": {
    "number": "4242424242424242",
    "expiration_month": 12,
    "expiration_year": 2025,
    "cvc": "123"
  },
  "items": [
    {
      "priceId": "price_1234567890abcdef",
      "productId": "pro_1234567890abcdef",
      "quantity": 1
    }
  ],
  "customerEmail": "customer@example.com",
  "billingCountry": "FR",
  "postalCode": "75001",
  "businessName": "Acme Corp",
  "taxId": "FR12345678901",
  "firstName": "John",
  "lastName": "Doe",
  "pricingMode": "TAX_EXCLUSIVE",
  "threeDsSuccessUrl": "https://yourapp.com/payment/success?paymentId=pay_123",
  "threeDsFailureUrl": "https://yourapp.com/payment/failure?paymentId=pay_123",
  "marketplaceFeeInCents": 200,
  "captureMode": "AUTOMATIC",
  "statementDescriptor": "MY BRAND",
  "label": "Premium plan - John Doe"
}

Response

Initiate subscription from offer in the server to server process successful

type'payment' | 'setup' required

Discriminator of the result. payment when the first cycle / entry fee is charged (a PaymentIntent is created). setup when no charge occurs (free trial or waitlist): only a payment method is collected via a PaymentSetup. When setup is returned without a payment method provided at init (no tokenIntentId / useCustomerPaymentMethod), the collection is deferred: use paymentSetup.id with the SDK endpoints (GET /sdk/customer-payment-method/:id then POST /sdk/customer-payment-method/confirm).

subscriptionIdstring required

Subscription id created for this initiation.

threeDsSessionUrlstring

URL to complete the 3DS authentication, if applicable

Example response

{
  "type": "payment",
  "payment": {
    "lastDepositAttempt": {
      "status": "succeeded",
      "amount": 10000,
      "paymentMethod": "CARD",
      "error": "card_declined",
      "attemptedAt": "2025-10-24T14:35:00Z"
    },
    "taxRateInPercentage": 20,
    "pricingMode": "TAX_EXCLUSIVE",
    "lastThreeDsAttempt": {
      "status": "succeeded",
      "cardBrand": "Visa",
      "createdDate": "2025-11-12T21:51:33.530Z"
    },
    "invoiceUrl": "https://api.inflowpay.com/invoice/download?token=abc123xyz",
    "customerPaymentMethod": {
      "id": "cpm_abc123",
      "type": "card",
      "cardBrand": "visa",
      "cardLast4": "4242"
    }
  },
  "paymentSetup": {
    "id": "setup_pm_req_abc123",
    "status": "completed",
    "currency": "EUR",
    "subscriptionId": "sub_1234567890abcdef"
  },
  "subscriptionId": "sub_1234567890abcdef",
  "threeDsSessionUrl": "https://checkout.inflowpay.com/pay/pay_1234567890abcdef"
}