v1

latestOpenAPI 3.0.1MIT2026-07-26336777.7 KB

This API can be used to generate subscription links programmatically. Subscription links are basically standalone webpages where your customer can make a subscription payment.

post/subscription/link/merchant/generate-link

Headers

Idempotency-Keystring

A unique key for making the request idempotent. Must match pattern: ^[a-zA-Z0-9\-_:\.]+$. See Idempotent Requests for more details.

Request body

amountinteger required

The amount in lowest count unit. e.g.: For USD 1, amount is 100 representing 100 cents (The minimum amount should be greater than 1 USD)

currencystring required

Three letter abbreviation of the currency. Refer supported currencies

receiptIdstring

Your identifier of the order

descriptionstring

The description of the order, if any

expiryDateinteger required

Timestamp in epoch milliseconds, indicating the expiration time of the link

callbackUrlstring

The URL we will callback to with the subscriptionId once it finishes.

cancelUrlstring

The URL to redirect the customer to when they cancel the subscription. If not provided, the callbackUrl will be used as fallback.

interval'DAY' | 'WEEK' | 'MONTH' | 'YEAR' required

The interval group between subscriptions.

intervalCountinteger required

The number of intervals between subscription billings. For example, interval = MONTH and intervalCount = 3 bills every 3 months.

cycleCountinteger required

The number of billing cycles for which the subscription will renew before ending. The first cycle is included in this count.

upfrontAmountinteger

An optional amount that merchants can set to be charged to the customer at the time the subscription is activated. This amount replaces the first billing cycle charge — the regular subscription amount is not added on top of it. Regular billing resumes from the next cycle.

The amount is in the lowest count unit. e.g.: For USD 1, amount is 100 representing 100 cents (minimum amount should be greater than 1 USD).

Validation Rules:

  • Not compatible with trialPeriodCount and trialPeriodInterval — cannot be provided simultaneously
trialPeriodCountinteger

The number of trial periods before the first billing cycle. Must be greater than or equal to 0 if provided.

Validation Rules:

  • If trialPeriodCount is provided, trialPeriodInterval must also be provided
  • trialPeriodCount is not compatible with upfrontAmount - both cannot be provided simultaneously
trialPeriodInterval'DAY' | 'WEEK' | 'MONTH' | 'YEAR'

The interval for the trial period.

Validation Rules:

  • Required when trialPeriodCount is provided
multiUseLimitinteger

The maximum number of times this subscription link can be used. If null, the link can be used only once. Must be greater than 0 if provided.

phoneNumberRequiredboolean

Flag to indicate whether phone number is required from the customer during checkout. By default, this is false.

Example request

{
  "amount": 100,
  "currency": "USD",
  "receiptId": "order123",
  "customerDetails": {
    "name": "John Doe",
    "email": "john.doe@example.com",
    "contactNumber": "+919123456789",
    "customerAddress": {
      "addressLine1": "123 Main St",
      "addressLine2": "Apt 1",
      "city": "New York",
      "state": "NY",
      "country": "US",
      "postalCode": "2424"
    }
  },
  "description": "Order for 2 items",
  "expiryDate": 32526868154000,
  "callbackUrl": "https://example.com/callback",
  "cancelUrl": "https://example.com/cancel",
  "interval": "MONTH",
  "intervalCount": 2,
  "cycleCount": 2,
  "upfrontAmount": 200,
  "trialPeriodCount": 7,
  "trialPeriodInterval": "DAY",
  "multiUseLimit": 5,
  "productPage": {
    "name": "Premium Subscription",
    "description": "Access to premium features and content"
  }
}

Response

Generate Subscription Link

shortUrlstring

The shortened URL generated by the xPay API. This link can be shared with customers for completing payments.

disclaimerstring

A message highlighting unsupported currency and payment method pairs. You may use this information to communicate these limitations to your users and set expectations.

Example response

{
  "shortUrl": "https://api.xpaycheckout.com/subscription/link/pcTrro7D",
  "disclaimer": "GBP is not supported on Klarna. The payment will default to USD."
}