Recurring payments

Boost conversion and manage subscriptions using tokenization.

Recurring payments is a MultiSafepay solution that securely stores payment details to enable quick, easy repeat payments.



How it works

MultiSafepay encrypts customers' sensitive payment details during an initial payment for secure storage, and provides you with a non-sensitive identifier for the details known as a "token". Customers can save multiple tokens.

MultiSafepay is responsible for PCI DSS compliant storage of payment details.

Tokens are stored at account level rather than website level. If you operate multiple websites from a single MultiSafepay account, you can also offer cross-domain recurring payments, i.e. tokenize a customer's details on Website A and offer one-click payments on Website B.

Supported recurring models

We offer three recurring payment models, each designed to handle specific payment scenarios. Defining the model in your request classifies the transaction based on the initiator. This determines which validations apply, whether 3DS exemptions are granted, and which parameters are required.

  • One-click payments: The customer selects stored details for faster checkout.
  • Subscriptions: You use the token to collect payments at specific intervals, e.g. weekly, monthly.
  • Unscheduled payments: You use the token for event-triggered payments, e.g. mobile top-up when no credit left on phone.

Initial payment

  1. The customer gives you consent to store their payment details and verifies their identity with 3D Secure.
  2. MultiSafepay encrypts the payment details during processing and stores them securely on our servers. We return to you a non-sensitive token that references the encrypted payment details.
  3. You can use the token to process recurring payments without needing to handle or store sensitive payment details.
Sequence diagram for request to tokenize cardholder data

Zero Authorization

Optionally, you can set the amount for the initial payment 0. No funds are transferred but a token is created (if the payment details are valid).

See Zero Authorization.

Subsequent payments: Customer-initiated

  1. You display the customer's available tokens at checkout, e.g. MASTERCARD **43.
  2. The customer selects a token and confirms the payment. They don't need to re-enter any payment details.

Customer-initiated subsequent payments support the one-click payments model.

  1. You include the token in the request to MultiSafepay.
  2. MultiSafepay decrypts the payment details and processes the payment.
Sequence diagram for customer-initiated recurring payments

Subsequent payments: Merchant-initiated

  1. The customer must give consent (once only).
  2. You include the token in the request to MultiSafepay.
  3. MultiSafepay decrypts the payment details and processes the payment.

There are two common use cases for merchant-initiated subsequent payments:

  • Subscriptions
  • Unscheduled payments
Sequence diagram for merchant-initiated recurring payments

Activation

Email a request to activate recurring payments to [email protected]

Specify in your request which tokenization model(s) you want to use:

  • One-click payments
  • Subscriptions
  • Unscheduled payments

We send you an agreement to sign, including terms and conditions for data usage.



Supported payment methods

For both initial and subsequent payments:

  • Cards: American Express, Maestro, Mastercard, and Visa
  • Direct debit – First you need to provide us with some information.
    See Direct debit – Activation.
  • Bancontact - Bancontact WIP

For initial payments then subsequent payments via Direct debit:

  • iDEAL


Integration

Payment component

Our payment components support recurring payments.

To enable them, see payment components - Recurring payments.

Ready-made integrations

You must have both card payments and recurring payments enabled for your MultiSafepay account.

Our ready-made integrations only support the cardOnFile model.

Supported integrations

We support recurring payments in our plugins for:

API

See API reference:

Our API and PHP SDK support all three recurring models.

Additional parameters

ParameterTypeDescription
typestringThe payment flow for the checkout process. Values:: direct, redirect.
gatewaystringThe unique gateway_id to redirect the customer to the specific payment method. Make a get gateway request.
Values: AMEX, VISA, MASTERCARD, DIRDEB.
recurring_idstringA randomly generated recurring ID for the customer.
referencestringThe customer's reference number for the token.
recurring_modelstringThe type of recurring model to use. Values: unscheduled, cardOnFile, subscription.


User guide

To process recurring payments, first create an initial transaction to tokenize the customer's payment details. You can then use the resulting token to authorize all subsequent payments.

Authentication

To process recurring payments, you need to use the relevant website API key, for both initial and subsequent payments.

Initial payment

  1. Make an initial payment request.
  2. Add the required parameters, including:
    • customer.browser. To retrieve the customer's device and browser information, integrate the following customer.browser object.
    • customer.reference.
    • recurring.model. The value will be stored along with the token and will be applied to subsequent payments. We support the following values:
      • subscription

      • cardOnFile (one-click payments)

      • unscheduled

        To learn more, go to models.

    • If the payment flow is of type: direct, remember to include the gateway_info object with the required card details.
  3. Complete the payment. You can retrieve the customer's token creating a list tokens request.
Example of an initial payment
  curl --request POST \
   --url 'https://testapi.multisafepay.com/v1/json/orders?api_key={your_site_api_key}' \
  	 --header 'accept: application/json' \
   --header 'content-type: application/json' \
   --data '
{
    "type": "direct",
    "gateway": "CREDITCARD",
    "order_id": "initial_payment",
    "currency": "EUR",
    "amount": 1000,
    "description": "Example description",
    "recurring": {
        "model": "subscription"
    },
    "customer": {
				"browser": {
            "ip_address": "46.6.116.167",
            "javascript_enabled": 1,
            "java_enabled": 1,
            "cookies_enabled": 1,
            "language": "en",
            "accept_header": "*",
            "screen_color_depth": "24",
            "screen_height": "780",
            "screen_width": "1024",
            "time_zone": "-180",
            "user_agent": "Mozilla/5.0 (Windows NT 6.3; WOW64)",
            "platform": "Linux amd64"
        },
        "locale": "nl_NL",
        "first_name": "John",
        "last_name": "Doe",
        "address1": "Neherkade",
        "reference": "my_customer_001"
    },
    "gateway_info": {
        "card_number": "4111111111111111",
        "card_holder_name": "Test cardholder",
        "card_expiry_date": "3012",
        "card_cvc": "123"
    }
}'

Subsequent payment

  1. Make a list tokens to retrieve a list of the customer's tokens.
  2. Make a subsequent payment request.
  3. Add the required parameters, including:
    • recurring.id. Enter the identifier that contains the customer's token.
    • customer.reference.
    • If recurring.model: cardOnFile, customer.browser is required.
  4. Complete the payment.
Example of a subsequent payment for customer initiated payments
	curl --request POST \
   --url 'https://testapi.multisafepay.com/v1/json/orders?api_key={your_site_api_key}' \
   --header 'accept: application/json' \
   --header 'content-type: application/json' \
   --data '
	{
"type": "direct",
"order_id": "subsequent_payment",
"currency": "EUR",
"amount": 1000,
"description": "product description",
"recurring_id": {your_customer_token},
"payment_options": {
    "notification_url": "https://testtool.dev.multisafepay.com/client/json-test/notification?type=notification",
    "redirect_url": "https://testtool.dev.multisafepay.com/client/json-test/notification?type=redirect",
    "cancel_url": "https://testtool.dev.multisafepay.com/client/json-test/notification?type=cancel"
},
"customer": { 
    "browser": {
        "ip_address": "46.6.116.167",
        "javascript_enabled": 1,
        "java_enabled": 1,
        "cookies_enabled": 1,
        "language": "en",
        "accept_header": "*",
        "screen_color_depth": "24",
        "screen_height": "780",
        "screen_width": "1024",
        "time_zone": "-180",
        "user_agent": "Mozilla/5.0 (Windows NT 6.3; WOW64)",
        "platform": "Linux amd64"
    },
    "locale": "nl_NL",
    "reference": "shopper-456"
	}
}'
Example of a subsequent payment for merchant initiated payments
	curl --request POST \
   --url 'https://testapi.multisafepay.com/v1/json/orders?api_key={your_site_api_key}' \
   --header 'accept: application/json' \
   --header 'content-type: application/json' \
   --data '
	{
"type": "direct",
"order_id": "subsequent_payment",
"currency": "EUR",
"amount": 1000,
"description": "product description",
"recurring_id": {your_customer_token},
"payment_options": {
    "notification_url": "https://testtool.dev.multisafepay.com/client/json-test/notification?type=notification",
    "redirect_url": "https://testtool.dev.multisafepay.com/client/json-test/notification?type=redirect",
    "cancel_url": "https://testtool.dev.multisafepay.com/client/json-test/notification?type=cancel"
},
"customer": { 
    "browser": {
        "ip_address": "46.6.116.167",
        "javascript_enabled": 1,
        "java_enabled": 1,
        "cookies_enabled": 1,
        "language": "en",
        "accept_header": "*",
        "screen_color_depth": "24",
        "screen_height": "780",
        "screen_width": "1024",
        "time_zone": "-180",
        "user_agent": "Mozilla/5.0 (Windows NT 6.3; WOW64)",
        "platform": "Linux amd64"
    },
    "locale": "nl_NL",
    "reference": "shopper-456"
	}
}'

💬

Support

Email [email protected]