Skip to content

Flutterwave

Collect cards and mobile money across Africa on Flutterwave's hosted page, with each payment recorded as what it really was.

Flutterwave collects card payments and mobile money (M-Pesa, MTN Mobile Money and more) across Africa. The customer picks how to pay on Flutterwave's page, and yRecurring records the payment as what it actually was: a mobile money payment shows as mobile money on the ledger, in reports, and on refunds, never disguised as a card.

The payment experience is hosted: customers pay on Flutterwave's page and return when done.

Currencies

NGN, GHS, KES, ZAR, TZS, UGX, RWF, XAF, XOF, USD, EUR and GBP.

Connecting

Go to Settings, then Payment gateways, then Flutterwave. The wizard asks for:

  • Secret key: in your Flutterwave dashboard under Settings, then API keys.
  • Webhook secret hash: under Settings, then Webhooks. Choose a long random value, set it in the Flutterwave dashboard, and paste the same value here; it is how inbound webhooks are authenticated. Required: charging stays off until the webhook is configured, because payments picked on Flutterwave's page confirm through it.

Every inbound event is additionally verified against Flutterwave's API before it settles anything, so a forged webhook cannot mark an invoice paid.

One support request worth making

Flutterwave's refund webhooks are off by default. Ask Flutterwave support to enable them for your account. With them on, refunds confirm automatically; without them, a refund stays in processing until reconciled by hand.

Saving cards and renewals

A card used to pay can be kept on file, and renewals with automatic collection charge it.

Mobile money works differently, by design: mobile wallets cannot be stored for automatic charging. Customers who pay by mobile money pay each invoice from its payment link instead; invoice emails carry the link, so renewals still get paid, just with a tap from the customer. If most of your customers pay by mobile money, plan your dunning and reminder emails with that in mind; see dunning.

Two more card notes:

  • There is no zero-charge card saving at Flutterwave. On surfaces that save without charging, the same fallback as Paystack applies: another connected gateway saves the card if one can, and otherwise the next paid invoice saves it.
  • Flutterwave has no card deletion interface, so removing a card in yRecurring retires it here: it will never be charged again, but it cannot be deleted from Flutterwave's side.

Refunds and disputes

Refunds are sent against the original transaction and confirm through the refund webhook (see the support request above). See refunds. Disputes appear on the payment's activity trail automatically. When a dispute closes against you, the chargeback is recorded on the customer's account automatically (see refunds).

Test cards

Card Number Notes
Mastercard, succeeds 5531 8866 5214 2950 PIN 3310, OTP 12345
Visa, 3D Secure 4187 4274 1556 4246 PIN 3310, OTP 12345
Declined, insufficient funds 5258 5859 2266 6506 PIN 3310

Limits

  • Hosted experience only.
  • Mobile money cannot be saved for automatic renewals (payment links cover renewals instead).
  • No zero-charge card saving and no card deletion at the gateway (both handled as described above).
  • Refund webhooks require a support request to enable.
  • Flutterwave hands out a card token when a payment is made and offers no way to list the tokens it holds, so yRecurring cannot fetch them for you. A migration from another billing system brings the token references in by file instead. See migrating saved payment methods.