EFT Payment
This guide explains how to accept payments via EFT (Electronic Funds Transfer), allowing customers to pay directly from their South African bank accounts.
Here's the flow for an EFT Payment:
- Fetch a list of banks from the banks endpoint
- Initiate a request
- Follow the redirect URL in the response to complete the payment
Fetch EFT Banks
- Path:
/api/v1/eft-payment/banks - Method: GET
- Headers:
Accept: application/jsonContent-Type: application/jsonAuthorization: Bearer {merchant_api_bearer_token}
Sample Response
{
"status": 200,
"message": "Success",
"data": [
{
"ABSA": "ABSA"
},
{
"AFRICAN_BANK": "African Bank"
},
{
"ALBARAKA_BANK": "Albaraka Bank"
},
{
"BANK_ZERO": "Bank Zero"
},
{
"BIDVEST_BANK": "Bidvest Bank"
},
{
"CAPITEC_BANK": "Capitec Bank"
},
{
"CITIBANK": "CitiBank"
},
{
"DISCOVERY_BANK": "Discovery Bank"
},
{
"FNB": "FNB"
},
{
"HSBC_BANK": "HSBC Bank"
},
{
"INVESTEC": "Investec"
},
{
"NEDBANK": "Nedbank"
},
{
"RMB": "RMB"
},
{
"SASFIN_BANK": "Sasfin Bank"
},
{
"STANDARD_BANK": "Standard Bank"
},
{
"STANDARD_CHARTERED_BANK": "Standard Chartered Bank"
},
{
"TYMEBANK": "Tymebank"
},
{
"UBANK": "Ubank Limited"
}
]
}
Generate EFT Payment
- Path:
/api/v1/eft-payment - Method: POST
- Headers:
Accept: application/jsonContent-Type: application/jsonAuthorization: Bearer {merchant_api_bearer_token}
Request Body Table
| Field | Type | Required | Description |
|---|---|---|---|
| amount | number | Yes | Amount for the transaction |
| reference | string | Yes | Unique reference for the transaction |
| narration | string | No | Transaction narration |
| notificationUrl | string | No | Notification URL. Notification will be sent to the URL configured on the portal if not set |
| businessId | string | Yes | Your business identifier |
| customer | object | Yes | Customer information |
| customer.name | string | Yes | Customer's full name |
| customer.email | string | Yes | Customer's email address |
| customer.phone | string | Yes | Customer's phone number |
| customer.address | object | Yes | Customer's address information |
| customer.address.line1 | string | Yes | Address line 1 |
| customer.address.line2 | string | No | Address line 2 |
| customer.address.city | string | No | City |
| customer.address.state | string | Yes | State |
| customer.address.postalCode | string | No | Postal code |
| customer.address.countryCode | string | Yes | Alpha-2 country code |
| customer.externalId | string | No | A 13-digit ID Number provided by your bank. This is needed especially for Capitec Bank. |
| bank | string | Yes | The preferred bank. This can be retrieved from the Fetch Bank List API. |
Sample Request Body
{
"amount": 10,
"customer": {
"name": "John Smith",
"phone": "07011221122",
"email": "john.smith@gmail.com",
"address": {
"postalCode": "101",
"countryCode": "NG",
"state": "Lagos"
},
"externalId": "1122334455667"
},
"businessId": "{business_id}",
"reference": "{unique_reference}",
"bank": "ABSA",
"narration": "Payment for Goods"
}
Sample Response
{
"status": 200,
"message": "Success",
"data": {
"onusReference": "ONUS-EFT-xxx-xxx-xxx",
"reference": "BUS-REF-001",
"amount": 10,
"redirectUrl": "https://redirect.url/to/complete/payment",
"bankName": "ABSA",
"paymentStatus": "PROCESSING"
}
}
Additional Information
- Store both
referenceandonusReferencefor reconciliation. - Direct the customer to the
redirectUrlto complete the payment on the bank's platform. - The
paymentStatuswill transition fromPROCESSINGto a terminal state (SUCCESSFULorFAILED). Monitor status via your webhooks, or query a specific transaction using the Verify Single Payment endpoint with the onusReference. - The
bankfield should match one of the bank codes returned from the Fetch EFT Banks endpoint. - The
customer.externalIdnumber should be provided for Capitec bank payments. - A webhook notification will be sent to you once the payment has been completed.