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.
Here's an overview of how these payment methods work:
Debit Order:
Step | Description |
---|---|
Authorization | A 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 Setup | The 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 Processing | The 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). |
Notification | Both 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
Step | Description |
---|---|
Authorization | A 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 Setup | The 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 Processing | The 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). |
Notification | Both 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:
Request | URL |
---|---|
POST | https://gate.reviopay.com/api/v1/purchases/ |
- 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.
Request | URL |
---|---|
POST | https://gate.reviopay.com/p/{{purchase_id}}/ |
```
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:
Request | URL |
---|---|
POST | https://gate.reviopay.com/api/v1/purchases/ |
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
, orpurchase.payment_failure
event on your server.
Debit order and DebiCheck mandate management
PASA mandates guidelines:
Requirement | Description |
---|---|
Abbreviated Name | The 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 Period | It 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 mandate | Voice mandate | Electronic mandate |
---|---|---|
Account number | Abbreviated name on bank statement | Account number |
Type of account | Beneficiary name | Type of account |
Branch number | Call centre name | Branch number |
Frequency of debit | Contact telephone Number | Frequency of debit |
Abbreviated name on client’s bank statement | Contract Reference number | Abbreviated name on client’s bank statement |
Contract reference | Current date | Contract reference |
Commencement/Action date | Commencement/Action date | Commencement/Action date |
Start and termination date | Payer’s bank details, including account number, type of account, branch code | Start and termination date |
Beneficiary name | Surname and initials of the account holder | Beneficiary name |
Beneficiary contact details | Value of amount that will be deducted | Beneficiary contact details |
Amount – Escalation of amount, variable amounts, and maximum limits | Amount – Escalation of amount, variable amounts, and maximum limits | Amount – Escalation of amount, variable amounts, and maximum limits |
Signature of the account holder | Electronic 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 outcome | Fields | Notes |
---|---|---|
No re-authentication required | ID Number | None |
First Name | None | |
Last Name | None | |
Phone Number | None | |
Email Address | None | |
Re-authentication required | Tracking | Tracking is enabled/disabled on a mandate |
First Collection | Amount and/or Date is changed or added | |
Abbreviated Name | Different than mandate | |
Collection Day | Different than mandate | |
Contract Reference | Different than mandate | |
Adjustment Amount/Rate | Amount and/or Rate is changed or added | |
Allowing Date Adjustment | AllowDateAdjustment is enabled or disabled | |
Debit Amounts | If AmountCents and MaxAmountCents are not within the bounds of the original mandate | |
New Mandate Required (will result in AUTH_FAILURE) | Debtor Account | Changing account number and/or branch code |
Creditor | Changing 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:
Field | Description |
---|---|
FIXED | With 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 |
VARIABLE | Despite 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 |
USAGEBASED | This 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 name | Type | Description |
---|---|---|
authentication_type | string | Determines 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_failure | boolean | When 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_sequence | string | Determines whether the mandate is for a one-time collection or recurring collections. |
adjustment_category | string | Determines 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_adjustment | boolean | When 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_account | boolean | When 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
FAQ | Fields 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 |
Updated over 1 year ago