Debit order and Debicheck

Introduction

Debit order and DebiCheck payments are two common methods used for financial transactions in South Africa, particularly for recurring payments such as subscriptions, loan repayments, and utility bills.

Supporting technical documentationLink
SwaggerGo
API referenceGo
Postman recipesGo

Here's an overview of how these payment methods work:

Debit Order:

StepDescription
AuthorizationA debit order is a payment instruction given by a customer to a service provider or creditor, allowing them to deduct funds directly from the customer's bank account. The customer provides their account details and signs an agreement or mandate authorizing the debit order.
Payment SetupThe service provider or creditor initiates the debit order process by submitting a request to the customer's bank. This request includes the customer's account details, payment amount, payment date, and other relevant information.
Bank ProcessingThe customer's bank processes the debit order request on the agreed-upon payment date. The bank deducts the specified amount from the customer's account and transfers it to the beneficiary's account (the service provider or creditor).
NotificationBoth the customer and the beneficiary usually receive notifications confirming the debit order transaction. The customer's bank statement reflects the payment deduction, and the beneficiary's records show the payment received.

Debicheck

StepDescription
AuthorizationA Debicheck debit order is a payment instruction given by a customer to a service provider or creditor, allowing them to deduct funds directly from the customer's bank account. To create a Debicheck mandate, customers must approve a confirmation an electronic request via their banking app, SMS, or other approved channels. They review the payment details and approve it using their chosen authentication method.
Payment SetupThe service provider or creditor initiates the Debicheck debit order process by submitting a request to the customer's bank. This request includes the customer's Debicheck reference, account details, payment amount, payment date, and other relevant information.
Bank ProcessingThe customer's bank processes the debit order request on the agreed-upon payment date. The bank deducts the specified amount from the customer's account and transfers it to the beneficiary's account (the service provider or creditor).
NotificationBoth the customer and the beneficiary usually receive notifications confirming the debit order transaction. The customer's bank statement reflects the payment deduction, and the beneficiary's records show the payment received.

DebiCheck offers an additional layer of security by requiring explicit customer approval for each transaction, reducing the risk of unauthorized deductions. This method helps customers maintain better control over their recurring payments.

🚧

Please note

It's important to note that the specifics of debit orders and DebiCheck payments may vary based on the financial institutions, service providers, and the evolving regulations in South Africa.


Step1: Initiate Purchase

To accept Debit orders and Debicheck payments in your application or website, use:

  • Please remember to specify the success/fail redirect in the call
  • To capture customers' bank details, use an HTML form hosted on your website
  • Note that additional fields are required to create a Debicheck mandate
{
    "client_id": "{{your client_id}}",
    "payment_method_whitelist":["eft"],
    "purchase": {
    	"currency": "ZAR",
        "language": "en",
	    "products": [
	    	{
    			"name": "My product or service - charge 1",
                "price": 100
			}
	    ],
        "payment_method_details": {
            "direct_debit": {
                "profile_code": "{{Revio profile_code}}",
                "abbreviated_name": "{{MID/abbreviated name}}",
                "account_number": "{{clearing account_number}}",
                "deduction_day":" {{clients preferred payment deduction day}}",
                "period_units": "months"
            }
        }        
	},
	"brand_id": "{{your brand_id}}",
    "force_recurring": true
}
{
    "client_id": "77a96956-4e84-46d4-abf4-29493d447952",
    "payment_method_whitelist":["debicheck"],
    "due": 1678701785,
    "purchase": {
    	"currency": "ZAR",
        "language": "en",
	    "products": [
	    	{
    			"name": "BNPLProduct",
                "price": 269900
			}
	    ],
        "payment_method_details": {
            "direct_debit": {
                "value_type": "USAGEBASED",					/Can also be FIXED OR VARIABLE
                "period_units": "months",
                "profile_code": "Q4TIER3_ORG21",		/Provided by Revio
                "deduction_day": 13,
                "account_number": "201647605",
                "debit_sequence": "RCUR",						/or OOF for once-off collections
                "verify_account": false,						/automated bank account verification
                "adjustment_rate": null,
                "tracking_period": 0,
                "abbreviated_name": "HAPPYPAY",
                "max_amount_cents": 269900,
                "reference_number": null,
                "adjustment_amount": null,
                "adjustment_category": "NEVER",
                "authentication_type": "DELAYED",
                "default_service_type": "TWODAY",
                "allow_date_adjustment": true,
                "realtime_auth_retries": 0,
                "do_delayed_on_auth_failure": false,
                "first_deduction_date":"2023-05-22",
                "first_deduction_amount": 120
            }
        }  
	},
	"brand_id": "ee711cab-4ec2-4aa6-89f0-e8012d3fbcb8",
    "force_recurring": true
}

Step2: Create debit order mandate

The platform requires a customer mandate before a payment collection can be generated. This is done by charging the purchase via the Direct post method using the details below.

```
curl --location 'https://gate.reviopay.com/p/transaction_id/' \
--form 'pm="debicheck"' \
--form 'PayceFirstName="Test"' \
--form 'PayceLastName="Test"' \
--form 'PaycePhoneNumber="0768887009"' \ 		needs to be this format
--form 'PayceIdType="idNumber"' \						or passportNumber
--form 'PayceIdNumber="2001014800086"' \		needs to be valid SA ID number
--form 'PayceBranchCode="123456"' \					needs to be 6 digits
--form 'PayceAccountType="Current"' \				or Savings or Transmission (case sensitive)
--form 'PayceAccount="123456781"' \					valid South Africa bank account required
```

You will always receive a 200 response as this call returns HTML. The best way to check for success/errors is to GET the purchase and check the status and attempts. Set up a Webhook using your account's Developers section or Webhook API to listen to purchase.paid, or purchase.payment_failure event on your server.


Step3: Create purchase for upcoming payment

After a mandate has been created, you can create a payment collection instruction using the following:

The request body for Debit order and Debicheck is largely the same. Debicheck allows for tracking, which will check your customer's account for up to 10 days after and initial payment collection failure. If the account is funded after the collection date, the bank will automatically collect the outstanding amount and pay it over to the creditor.

{
    "client_id": "{{client_id}}",
    "payment_method_whitelist":["debicheck"],
    "purchase": {
    	"currency": "ZAR",
        "language": "en",
	    "products": [
	    	{
    			"name": "My product or service ",
                "price": 100
			},
        {"direct_debit": {"first_deduction": true}}
	    ]
	},
    "due": "{{future epoch charge date}}",
    "tracking_period": 5,					//Debicheck only, and up to 10 tracking days allowed
   	"brand_id": "{{brand_id}}"		
}

Step4: Charge customer's bank account

❗️

Processing cut-off

Debit order and Debicheck payment collection instructions needs to be created at least 2 days before the intended customer deduction date

Now that the purchase for the payment collection has been created, you can charge the customer's bank account.

Once the charge request has been initiated, an instruction will be sent to the bank to deducted the required amount from the customer's account.

{
  "recurring_token": "{{purchase_id step2}}"
}

Step5: Verify status

  • Use the success_callback parameter of the Purchase object.
  • Use GET /purchases/<purchase_id> request.
  • Set up a Webhook using your account's Developers section or Webhook API to listen to purchase.paid, or purchase.payment_failure event on your server.

Debit order and DebiCheck mandate management

PASA mandates guidelines:

RequirementDescription
Abbreviated NameThe mandate should include an Abbreviated Name that accurately reflects the trading name of your business. This Abbreviated Name will be displayed on the bank statement of the person being debited, providing clear identification of the transaction.
Retention PeriodIt is mandatory to retain the debit order mandates for a period of 7 years after the last debit order transaction associated with the mandate. This ensures that you have a record of the mandates for an extended period and facilitates compliance with record-keeping regulations.

Minimum requirements per mandate type

Paper mandateVoice mandateElectronic mandate
Account numberAbbreviated name on bank statementAccount number
Type of accountBeneficiary nameType of account
Branch numberCall centre nameBranch number
Frequency of debitContact telephone NumberFrequency of debit
Abbreviated name on client’s bank statementContract Reference numberAbbreviated name on client’s bank statement
Contract referenceCurrent dateContract reference
Commencement/Action dateCommencement/Action dateCommencement/Action date
Start and termination datePayer’s bank details, including account number, type of account, branch codeStart and termination date
Beneficiary nameSurname and initials of the account holderBeneficiary name
Beneficiary contact detailsValue of amount that will be deductedBeneficiary contact details
Amount – Escalation of amount, variable amounts, and maximum limitsAmount – Escalation of amount, variable amounts, and maximum limitsAmount – Escalation of amount, variable amounts, and maximum limits
Signature of the account holderElectronic signature of the account holder
IP address and location coordinates of each mandate

For voice-recorded mandates, please take note of the following additional points:

  • Written confirmation: The voice-recorded mandate must be confirmed in writing to the account holder within 21 days of the mandate recording. This written confirmation should be provided before any debit payment instructions are processed to the account.
  • Customer awareness: It is essential to inform the customer that their voice is being recorded and that the message will be the official authority to debit their account.
  • Contract reference and abbreviated name: The customer should be informed of the unique contract reference and abbreviated name that will appear on their bank statement to identify the transaction.
  • Reliable recording devices: Ensure that the recording devices used for voice mandates are reliable and provide acceptable acoustic quality. It is preferable to use recording devices that are SABS approved.
  • Proper indexing: Recorded messages should be indexed systematically, facilitating easy accessibility and efficient handling of possible inquiries and disputes.

Debicheck-specific rules

Amending Debicheck mandates

Amending a mandate is the process where one or more fields on a Mandate is changed and produces one of the following results:

  • Changes are applied and no status change is required.
  • Changes are applied and a re-authentication is triggered at the banking provider.
  • Changes are applied and the banking provider requires a new mandate to be created.
  • After successfully amending (and potentially re-authenticating) a mandate, it will eventually transition to the COMPLETED state. All subsequent collections, created from these mandates, will be impacted by the changes.
  • This will not retroactively update past collections.

The following sections will cover the different results produced by amending a mandate.

Amendment outcomeFieldsNotes
No re-authentication requiredID NumberNone
First NameNone
Last NameNone
Phone NumberNone
Email AddressNone
Re-authentication requiredTrackingTracking is enabled/disabled on a mandate
First CollectionAmount and/or Date is changed or added
Abbreviated NameDifferent than mandate
Collection DayDifferent than mandate
Contract ReferenceDifferent than mandate
Adjustment Amount/RateAmount and/or Rate is changed or added
Allowing Date AdjustmentAllowDateAdjustment is enabled or disabled
Debit AmountsIf AmountCents and MaxAmountCents are not within the bounds of the original mandate
New Mandate Required (will result in AUTH_FAILURE)Debtor AccountChanging account number and/or branch code
CreditorChanging any creditor details

Debicheck field requirements

DebiCheck mandates include several important fields that must be customised based on your specific use case. Among these fields, the value_type is particularly critical as it determines the rule set governing the processing of collections. Here are the available value_type options and their characteristics:

FieldDescription
FIXEDWith this value_type, no adjustments to the amount or rate are allowed. The products.price and max_amount_cents remain constant throughout the mandate. The max_amount_cents is limited to the products.price
VARIABLEDespite the name, this value_type does allow for adjustments in the amount and rate of collections. You can collect amounts different from the authenticated products.price, but within the limit of the max_amount_cents. However, such collections are disputable. The max_amount_cents is limited to 1.5 times the products.price
USAGEBASEDThis value_type permits adjustments in the collection amount and rate. Like "VARIABLE", you can collect amounts other than the authenticated products.price, but within the max_amount_cents limit. Again, these collections are disputable. The max_amount_cents has no specific limit, but it's advisable to exercise caution when using large values to ensure a smooth customer experience

Note that you should not enable both adjustment_rate and adjustment_amount_cents. Choose one, and omit the other from your payload or provide it as null.

Below are descriptions of the other important fields related to DebiCheck mandates:

Field nameTypeDescription
authentication_typestringDetermines whether the authentication is sent in real-time (TT1) or delayed (TT2). REALTIME initiates a USSD/push notification for acceptance within 120 seconds, while DELAYED sends an SMS for acceptance within 48 hours.
do_delayed_auth_on_failurebooleanWhen enabled, this field triggers a TT2 authentication with a 48-hour response time to obtain authentication when real-time authentication is unavailable or fails. You can also consult with us about enabling RMS when TT1 or TT2 requests time-out.
debit_sequencestringDetermines whether the mandate is for a one-time collection or recurring collections.
adjustment_categorystringDetermines the frequency of adjustments made to the products.price and max_amount_cents over time based on the DebiCheck rules and adjustment_rate or adjustment_amount_cents used. You can specify the relevant adjustment frequency, such as quarterly, biannually, annually, etc.
allow_date_adjustmentbooleanWhen enabled, it allows for the variation of the due_date of recurring charges to a date different from what was initially authenticated. Adjusting the date to any other than the authenticated date makes the collection disputable.
verify_accountbooleanWhen enabled, it triggers an Account Holder Verification (AVS-R) request to verify the ownership and validity of the provided bank account details. If the account details are invalid, the verification request will fail.

By understanding and configuring these fields, you can tailor the DebiCheck mandates to your specific requirements and ensure compliance with industry rules and regulations.


DebiCheck collection FAQs

FAQFields required
Which collections frequencies are supported?Use the frequency field
We support YEARLY, MONTHLY and WEEKLY (we may support fortnightly in future)
Can I create a once-off collection with no recurring deduction?Use OOFF as the value in the debitSequence field
How do I create a collection for the same amount every month?Use FIXED as the value in the valueType field
How do I create a collection for an initial amount that is different to the recurring amount?Use the firstCollectionAmountCents field
How do I create a collection for a different amount every month?Use VARIABLE or USAGE_BASED
VARIABLE = max_amount_cents is 1.5x amount_cents
USAGE_BASED = max_amount_cents is the only one that matters, but collections are disputable