Create a recurring payment

Recurring payments are ideal for businesses offering subscription-based services, allowing for seamless billing through API-driven workflows—without relying on the N-Genius Online virtual terminal.

This section walks you through the full integration journey, from generating access tokens to receiving payment notifications.

This integration method involves handling sensitive cardholder data and requires PCI DSS compliance on your server environment.

⚠️

Note: Recurring Payments available billing intervals:

Daily, Weekly, Monthly, or Annually.

💡

Feature Activation Required

Recurring Payments are disabled by default. To enable this feature, please reach out to your Relationship Manager or contact the E-Commerce Support Team.


🧭 Integration Flow

Overview of the Recurring Payments API integration steps from initial order creation to automated billing.

Setting up Recurring Payments: A step-by-step guide from order to automated billing.

📦 Download Postman Collection

Download the full Recurring Payments Postman Collection to speed up integration and testing.


Once we have the access token, we are now able to create recurring payments for the N-Genius Online gateway to schedule and manage.

Once the initial payment has been made successfully, the internal scheduler will automatically keep track of your payments, their frequency/interval, and request a new payment from your customer's card whenever a payment is due.

HTTP Request Method: POST
Resource (URI): https://api-gateway.sandbox.ksa.ngenius-payments.com/recurring-payment/outlets/[your-outlet-reference]/orders

Headers:

Add these headers to your request (note that you should replace 'access_token' with the access token value we received from the Request an access token step).

HeaderValue
AuthorizationBearer access_token
Content-Typeapplication/vnd.ni-recurring-payment.v2+json
Acceptapplication/vnd.ni-recurring-payment.v2+json

Body:

Add the following JSON information to the form/body content of your request.

AttributeDescriptionExample
actionPayment processing method'PURCHASE', 'AUTH'
channelPayment processing channel'MoTo'
typeType of payment requested'RECURRING'
frequencyFrequency/interval of paymentVarious (see below)
emailAddressCustomer email address[email protected]
amountamount data blockN/A
amount.currencyCodeOrder currency'SAR'
amount.valueRecurring amount1000 ( = 10.00 SAR)
recurringDetailsrecurringDetails data blockN/A
recurringDetails.recurringTypeRecurring type'VARIABLE', 'FIXED'
recurringDetails.numberOfTenureNumber of Tenure3 ( > 1 )

*Available intervals (frequencies):

Interval / frequencyDescription
WEEKLYA payment for the required amount will be attempted immediately, then every 7 days thereafter.
MONTHLYA payment for the required amount will be attempted immediately, then every month on the same day of the month. Note that, if the date of presentment (i.e. the first transaction is between 29th-31st of any given month), subsequent payments will be taken on the 28th of each month, in order to cater for months with fewer than 30 days.
YEARLYA payment for the required amount will be attempted immediately, then every year on the same date for each subsequent year.

Recurring Details:

Recurring Type:

Recurring TypeDescription
FIXEDIf the recurring amount is fixed and is not going to change for the whole tenure.
VARIABLEIf you will be changing the recurring amount in future in between the tenure.

Number of Tenure:

Specifies the total number of recurring transactions.
For example, if a customer needs to be charged 10 SAR monthly for 6 months, the Number of Tenure should be set to 6.

If this field is not provided in the request body, the recurring transactions will continue indefinitely.

Example request (body):

{
    "action":"PURCHASE",
    "type": "RECURRING",
    "frequency": "MONTHLY",
    "emailAddress": "[email protected]",
    "amount": {
      "currencyCode":"SAR",
      "value":1500
    },
    "recurringDetails": {
      "recurringType": "FIXED",
      "numberOfTenure": 6
    }
}

Example response (body):

{
  "reference": "3ddf7897-3ace-402f-bdae-0297c631db84",
  "amount": {
    "currencyCode": "SAR",
    "value": 1500
  },
  "action": "PURCHASE",
  "recurringDetails": {
    "recurringType": "FIXED",
    "numberOfTenure": 6,
    "currentPayment": 0,
    "startDate": "2025-06-20T09:21:37.993982922Z",
    "endDate": "2025-06-20T14:22:37.993982922Z",
    "recurringAmount": {
      "currencyCode": "SAR",
      "value": 1500
    }
  },
  "type": "RECURRING",
  "frequency": "HOURLY",
  "paymentMethods": {
    "card": [
      "MADA",
      "VISA",
      "MASTERCARD"
    ]
  },
  "_links": {
    "cnp:payment-link": {
      "href": "https://api-gateway.sandbox.ksa.ngenius-payments.com/transactions/outlets/63ecfe89-f7b3-4a06-9e12-d218d772020d/orders/3ddf7897-3ace-402f-bdae-0297c631db84/payment-link"
    },
    "payment-authorization": {
      "href": "https://api-gateway.sandbox.ksa.ngenius-payments.com/transactions/paymentAuthorization"
    },
    "self": {
      "href": "https://api-gateway.sandbox.ksa.ngenius-payments.com/transactions/outlets/63ecfe89-f7b3-4a06-9e12-d218d772020d/orders/3ddf7897-3ace-402f-bdae-0297c631db84"
    },
    "tenant-brand": {
      "href": "http://config-service/config/outlets/63ecfe89-f7b3-4a06-9e12-d218d772020d/configs/tenant-brand"
    },
    "payment": {
      "href": "https://paypage.infradev.ksa.ngenius-payments.com/?code=237dc8e90d3cee18"
    },
    "merchant-brand": {
      "href": "http://config-service/config/outlets/63ecfe89-f7b3-4a06-9e12-d218d772020d/configs/merchant-brand"
    }
  },
  "_embedded": {
    "payment": [
      {
        "_id": "urn:payment:f3815f2b-2a71-4f96-848d-f33daa7f2c8e",
        "_links": {
          "cnp:capture": {
            "href": "https://api-gateway.sandbox.ksa.ngenius-payments.com/transactions/outlets/63ecfe89-f7b3-4a06-9e12-d218d772020d/orders/3ddf7897-3ace-402f-bdae-0297c631db84/payments/f3815f2b-2a71-4f96-848d-f33daa7f2c8e/captures"
          },
          "self": {
            "href": "https://api-gateway.sandbox.ksa.ngenius-payments.com/transactions/outlets/63ecfe89-f7b3-4a06-9e12-d218d772020d/orders/3ddf7897-3ace-402f-bdae-0297c631db84/payments/f3815f2b-2a71-4f96-848d-f33daa7f2c8e"
          },
          "payment:card": {
            "href": "https://api-gateway.sandbox.ksa.ngenius-payments.com/transactions/outlets/63ecfe89-f7b3-4a06-9e12-d218d772020d/orders/3ddf7897-3ace-402f-bdae-0297c631db84/payments/f3815f2b-2a71-4f96-848d-f33daa7f2c8e/card"
          },
          "payment:saved-card": {
            "href": "https://api-gateway.sandbox.ksa.ngenius-payments.com/transactions/outlets/63ecfe89-f7b3-4a06-9e12-d218d772020d/orders/3ddf7897-3ace-402f-bdae-0297c631db84/payments/f3815f2b-2a71-4f96-848d-f33daa7f2c8e/saved-card"
          },
          "curies": [
            {
              "name": "cnp",
              "href": "http://transaction-service/docs/rels/{rel}",
              "templated": true
            }
          ]
        },
        "reference": "f3815f2b-2a71-4f96-848d-f33daa7f2c8e",
        "state": "STARTED",
        "amount": {
          "currencyCode": "SAR",
          "value": 1500
        },
        "updateDateTime": "2025-06-20T08:56:10.328184942Z",
        "outletId": "63ecfe89-f7b3-4a06-9e12-d218d772020d",
        "orderReference": "3ddf7897-3ace-402f-bdae-0297c631db84"
      }
    ]
  }
}

Response attributes:

AttributeDescriptionExample
referenceOrder reference[UUID]
frequencyThe agreed frequency/interval of the recurring payment'MONTHLY', 'DAILY'
outletIdThe reference of the outlet which accepted the payment[UUID]
recurringDetails.startDateDate/time of first payment2025-06-20T09:21:37.993982922Z
recurringDetails.endDateDate/time of next payment2025-06-20T14:22:37.993982922Z

However, should you wish to interrogate the order further, you may use the 'orderReference' attribute to query the order in more detail (see Retrieve order status for more information on how to do this).

🚧

Changing a recurring payment

It is not currently possible to amend or change an active recurring payment. Should you wish to amend the payment frequency, amount, or the card information associated with the order, you must first cancel the existing recurring payment, then create a new one (with the new parameters) to replace it.