Skip to content

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:

  1. Fetch a list of banks from the banks endpoint
  2. Initiate a request
  3. 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/json
  • Content-Type: application/json
  • Authorization: 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/json
  • Content-Type: application/json
  • Authorization: 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 reference and onusReference for reconciliation.
  • Direct the customer to the redirectUrl to complete the payment on the bank's platform.
  • The paymentStatus will transition from PROCESSING to a terminal state (SUCCESSFUL or FAILED). Monitor status via your webhooks, or query a specific transaction using the Verify Single Payment endpoint with the onusReference.
  • The bank field should match one of the bank codes returned from the Fetch EFT Banks endpoint.
  • The customer.externalId number should be provided for Capitec bank payments.
  • A webhook notification will be sent to you once the payment has been completed.