UK and EUR Account Charge

Learn how to collect payment directly from your customer's bank accounts in the UK and Europe

📘

Getting Started

We recommend checking out the introductory section to understand the basics of direct charge first. This guide assumes you’ve read that.

Pay with Bank Account (PWB) allows your customers to pay directly from their bank accounts. Flutterwave supports EUR and GBP payments using this payment method.

When you initiate a charge, an authorization URL is returned that redirects the customer to the Nuvion checkout, where they select their bank and authorize the payment using their banking app.

For EUR payments, you can optionally provide the customer's billing_country to show banks available in that country without requiring the customer to select their country first.

This payment method does not support recurring payments.

🚧

Approval Required

Your account must be enabled to receive payments from UK and European bank accounts. Contact [email protected] to request for approval.

Supported Countries

This payment method is supported for customers with bank accounts in the following countries:

CodeCountry
ATAustria
BEBelgium
GBUnited Kingdom
DKDenmark
EEEstonia
FIFinland
FRFrance
DEGermany
IEIreland
ITItaly
LVLatvia
LTLithuania
NONorway
PLPoland
ESSpain
SESweden
NLNetherlands
PTPortugal

Payment Flow

Charging a EUR/GBP bank account involves three steps:

  1. Initiate a charge.
  2. Redirect the customer.
  3. Handle the transaction.

Step 1: Initiating a charge

Initiate a charge with the following parameters. See the API reference for other optional parameters.

  • tx_ref: A unique reference to track the transaction.
  • amount: The amount to charge the customer.
  • currency: The transaction currency. Pass GBP or EUR.
  • email: The customer's email address.
  • redirect_url(Optional): The URL to redirect the customer to after completing payment.
  • billing_country (Optional): The customer’s billing country. For EUR payments, pass the two-letter code of a supported country to show banks available in that country directly during checkout.
# UK account
curl --request POST \
   --url https://api.flutterwave.com/v3/charges?type=account-ach-uk \
   --header 'Authorization: Bearer YOUR_SECRET_KEY' \
   --header 'content-type: application/json' \
   --data '{
       "amount": 100,
       "email": "[email protected]",
       "tx_ref": "Your-Unique-Reference",
       "currency": "GBP",
       "redirect_url":"https://developer.flutterwave.com"
}'
# European account
curl --request POST \
   --url https://api.flutterwave.com/v3/charges?type=account-ach-uk \
   --header 'Authorization: Bearer YOUR_SECRET_KEY' \
   --header 'content-type: application/json' \
   --data '{
       "amount": 100,
       "email": "[email protected]",
       "tx_ref": "Your-Unique-Reference",
       "currency": "EUR",
       "redirect_url":"https://developer.flutterwave.com",
       "billing_country":"FI"
}'

The response contains a pending status and includes a redirect URL in meta.authorization.redirect.

{
    "status": "success",
    "message": "Charge initiated",
    "data": {
        "id": 10460192,
        "tx_ref": "MC-D1kFdFJKJT1F341lwkk1",
        "flw_ref": "TVPU7256178793868804767579",
        "device_fingerprint": "N/A",
        "amount": 100,
        "charged_amount": 102,
        "app_fee": 5,
        "merchant_fee": 0,
        "processor_response": "Pending user action",
        "auth_model": "NUVION_ACH",
        "currency": "GBP",
        "ip": "34.254.131.32",
        "narration": "Account UK Transaction FOR Dotuns Fashion Limited",
        "status": "pending",
        "payment_type": "account-ach-uk",
        "fraud_status": "ok",
        "charge_type": "normal",
        "created_at": "2026-08-28T17:38:07.000Z",
        "account_id": 92319,
        "customer": {
            "id": 3605856,
            "phone_number": null,
            "name": "Dotuns Fashion Limited",
            "email": "[email protected]",
            "created_at": "2026-08-28T17:38:06.000Z"
        }
    },
    "meta": {
        "authorization": {
            "mode": "redirect",
            "redirect": "https://ravesandboxapi.flutterwave.com/flwv3-pug/getpaid/api/short-url/e8d711f6-6577-4102-9ca2-d68ce1ac79ed"
        }
    }
}

Step 2: Redirect The Customer

Redirect the customer to the redirect URL to authorize the charge.

The checkout experience differs based on the currency passed:

GBP payments:
The customer is taken to the Nuvion checkout to select their bank and authorize the payment.

EUR payments :
If billing_country is not provided, the customer first selects their country, and then selects their bank. If provided, the customer is taken directly to the Nuvion checkout with the banks available in that country.

Step 3: Handling the Transaction Webhooks

After the customer completes the authorization flow, Flutterwave sends a webhook with the updated transaction status.

{
  "event": "charge.completed",
  "data": {
    "id": 10460192,
    "tx_ref": "MC-D1kFdFJKJT1F341lwkk1",
    "flw_ref": "TVPU7256178793868804767579",
    "device_fingerprint": "N/A",
    "amount": 100,
    "currency": "GBP",
    "charged_amount": 102,
    "app_fee": 5,
    "merchant_fee": 0,
    "processor_response": "Approved Or Completed Successfully",
    "auth_model": "NUVION_ACH",
    "ip": "34.254.131.32",
    "narration": "Account UK Transaction FOR Dotuns Fashion Limited",
    "status": "successful",
    "payment_type": "account-ach-uk",
    "created_at": "2026-08-28T17:38:07.000Z",
    "account_id": 92319,
    "customer": {
      "id": 3605856,
      "name": "Dotuns Fashion Limited",
      "phone_number": null,
      "email": "[email protected]",
      "created_at": "2026-08-28T17:38:06.000Z"
    }
  },
  "event.type": "ACCOUNT-ACH-UK_TRANSACTION"
}

Use the webhook to determine whether the payment was successful before fulfilling the customer's order or service.

You can also verify the transaction using the transaction verification endpoint . For more information about receiving and handling webhooks, see our Webhooks guide.

Testing Your Integration

Test your Pay with Bank integration in test mode without moving real funds.

  1. Initiate a charge and open the returned meta.authorization.redirect URL.

  2. Complete payment and select a bank.

  3. You are redirected to the sandbox page to simulate different outcomes.

  1. Select Confirm payment to simulate a successful payment.
  2. Click Go back home to redirect to your redirect_url, then verify the transaction using webhooks or the transaction verification endpoint.

Next Steps

Congrats on your successful integration. Before accepting live payments, review our recommended Best Practices.


Did this page help you?