ACH payments

This describes how to accept payments directly from customers in the US and South Africa

Flutterwave allows merchants to charge US and South African accounts using the ACH payment method. Your customers would be taken to a page where they can select their bank and login to their Internet banking service to complete the transaction.

We'll show you how to add this payment method to your website in the steps below:

Pre-requisites for accepting bank account payments in the US and South Africa.

  1. Sign-up for an account here .

  2. Set up a webhook to get notified on payments, to see more on webhooks visit our Webhook section

  3. When trying to accept payment on a website you can use our Flutterwave inline method and pass type as ach_payment and country as either US or ZA, once you do this, the payment options for bank account will be enabled on your checkout.

  4. Pass a redirect_url so we can redirect your customer back to the page you want them to view after completing a charge. We append the response of the transaction as query parameters to your provided redirect URL.

  5. If you would prefer to accept payments using our APIs please see how to accept ACH payments via APIs.

  6. After getting a response for the transaction, call the Verify transaction endpoint to confirm the final status of the transaction.

Step 1 - Initiate payment

Send your payload to our /charge endpoint: https://rave-api-v2.herokuapp.com/v3/charges?type=ach_payment
Method: POST

{
        "tx_ref": "MC-1585230ew9v5050e8",
        "amount": "100",
        "type": "ach_payment",
        "currency": "USD",
        "country": "US",
        "email": "[email protected]",
        "phone_number": "0902620185",
        "fullname": "Ekene Eze",
        "redirect_url": "http://ekene.com/u/payment-completed",
}

Parameter Definition

Parameter

Required

Description

tx_ref

True

This is a transaction reference you supply to identify different transactions on your account. It is important to ensure that you pass unique references for every transaction.

amount

True

This is the amount to be charged. It is passed as - ('amount':'100').

currency

True

Pass currency as USD for US ACH payment and ZAR for SA ACH payment.

country

True

Pass your country as US for US ACH payments and ZA for SA ACH payments.

email

True

This is the email address of the customer.

phone_number

False

This is the phone number linked to the customer's mobile money account.

type

True

This specifies that the payment method being used is for mobile money payments. it should be set to - ach_payment

client_ip

False

Internet Protocol. This represents the current IP address of the customer carrying out the transaction.

device_fingerprint

False

This is the fingerprint for the device being used. It can be generated using a library on whatever platform is being used.

meta

False

This is to include additional payment information

fullname

False

Should include the first and last name of the customer

redirect_url

False

This is a url you provide, we redirect to it after the customer completes payment and append the response to it as query parameters.

Payment Response

When you send your payload to our charge endpoint to make a payment, you'll get a successful response if it all goes well.

{
        "status": "success",
        "message": "Charge initiated",
        "data": {
            "id": 1190657,
            "tx_ref": "MC-15852309v5050e8",
            "flw_ref": "FLW751551585302175553",
            "device_fingerprint": "62wd23423rq324323qew1",
            "amount": 100,
            "charged_amount": 100,
            "app_fee": 1.4,
            "merchant_fee": 0,
            "processor_response": "Pending Validation",
            "auth_model": "AUTH",
            "auth_url": "https://flutterwavestaging.com:9443/flwusprocessor/redirect?hid=FLW3f9f99f0e5534d438c15297bc608f21d",
            "currency": "USD",
            "ip": "154.123.220.1",
            "narration": "Ekene Eze",
            "status": "success-pending-validation",
            "payment_type": "account-ach-us",
            "fraud_status": "ok",
            "charge_type": "normal",
            "created_at": "2020-03-27T09:42:54.000Z",
            "account_id": 73362,
            "redirect_url": "http://ekene.com/u/payment-completed",
            "customer": {
                "id": 349079,
                "phone_number": "0902620185",
                "name": "Ekene Eze",
                "email": "[email protected]",
                "created_at": "2020-03-27T09:42:54.000Z"
            }
        }
    }

Verify payment

After charging a customer successfully, you need to verify that the payment was successful with Flutterwave before giving value to your customer on your website.

Although the Flutterwave inline already verifies the payment from the client-side, we strongly recommend you still do a server-side verification to be double sure no foul play occurred during the payment flow.

Below are the important things to check for when validating the payment:

Verify the transaction reference.

Verify the data.status of the transaction to be successful.

Verify the currency to be the expected currency

Most importantly validate the amount paid to be equal to or at least greater than the amount of the value to be given.

Finally, you can head over to Transaction verification to ensure that the payment went through.


Did this page help you?