💳 Flutterwave · Payments + Automation
How to Accept Flutterwave Payments with Automated Order Tracking
Flutterwave can collect cards, Mobile Money, bank transfers, and USSD across Nigeria, Ghana, and 30+ other African countries from a single integration. The part most guides skip is what happens after the payment — how you know about it, how you verify it’s real, and how your order records update without you checking the dashboard manually.
This is the Flutterwave equivalent of the Paystack → Make.com guide earlier in this series — the same pattern of “payment gateway fires a webhook → Make.com catches it → your systems update automatically,” applied to Flutterwave. If you’re already using that guide’s setup, the approach here is familiar. If Flutterwave is your first payment integration, this guide covers everything from account setup to automated tracking.
Three Paths to Accepting Flutterwave Payments
Before any webhook or automation, you need to be collecting payments. Flutterwave offers three distinct ways depending on your technical setup:
Payment LinksNo code · Under 5 minutes
Create a payment link directly in the Flutterwave dashboard — share it via WhatsApp, Instagram bio, or anywhere. Customers click, choose their payment method (card, MoMo, bank transfer), and pay. No website needed.
Best for: sellers without a website, ChatPadi/social commerce sellers, service businesses collecting deposits
Standard CheckoutJavaScript snippet · Developer setup
Embed Flutterwave’s checkout modal directly on your website with a short JavaScript snippet. Customer clicks “Pay,” a modal opens, they complete payment without leaving your site. Flutterwave v3 is the current API as of 2026.
Best for: custom websites, landing pages, booking forms where you want payment embedded on-page
WooCommerce PluginPlugin install · No code
Install the official Flutterwave WooCommerce plugin, enter your API keys, and Flutterwave appears at checkout alongside any other payment gateways. Order status updates automatically when payment succeeds.
Best for: WooCommerce stores — covered in detail in the WooCommerce plugins guide
Which path connects to automated order tracking? All three. Payment Links and Standard Checkout both fire webhooks on completed payments — the webhook setup below applies to both. The WooCommerce plugin has its own webhook-like behaviour built in (covered in the WooCommerce order management guide), but you can still layer the external webhook automation on top for cross-system tracking.
Account Setup: What You Need Before Going Live
1
Dashboard
Create and verify your Flutterwave account
Sign up at flutterwave.com. Account verification requires business details and KYC documentation — exactly what’s needed varies by country (Nigeria and Ghana have their own requirements, accessible via Flutterwave’s onboarding documentation). You can use the account in test mode before verification is complete, but going live requires a verified account.
✓ Flutterwave received a national microlender license in Nigeria in April 2026 — its 34th African country with a licence includes Ghana. The regulatory standing matters for any business collecting customer payments through the platform.
2
API Keys
Copy your Secret Key and Public Key
In the Flutterwave dashboard: Settings → API Keys. You’ll see a Test Secret Key and a Live Secret Key — keep these separate. The Public Key is used in frontend code (safe to expose); the Secret Key is used server-side and in your automation platform. Never hardcode the Secret Key in frontend code or commit it to a public repository.
Settings → API → Secret Key (server/Make.com only)
Settings → API → Public Key (frontend, safe to expose)
3
Payment Methods
Enable your preferred payment channels
In Settings → Payment methods, enable the channels relevant to your customers: Ghana Mobile Money, card payments (local + international), bank transfer (Pay With Bank Transfer is available in Nigeria and Ghana), USSD. Each has to be explicitly enabled — they’re not all on by default.
Flutterwave Payment Methods: Ghana & Nigeria
| Payment Method | 🇬🇭 Ghana | 🇳🇬 Nigeria | Notes |
| Cards (Visa/Mastercard) | ✓ | ✓ | Local and international. Standard fee 2.6–4.8% depending on country/card type |
| Ghana Mobile Money | ✓ | — | MTN MoMo, Telecel Cash, AirtelTigo Money. Core method for Ghana customers |
| Bank Transfer (PWBT) | ✓ | ✓ | Nigeria and Ghana — virtual account number generated per transaction. Async — relies on webhooks for confirmation |
| USSD | Limited | ✓ | Nigeria USSD strong (GTB, Access, First Bank etc.). Ghana availability is limited — verify current status |
| Apple Pay / Google Pay | ✓ | ✓ | Available via card processing — subject to device/browser support |
| Verve cards | Partial | ✓ | Strong in Nigeria; Verve is less prevalent in Ghana |
Bank transfer and Mobile Money payments are asynchronous. Unlike card payments where the result is immediate, a customer who pays via bank transfer (PWBT) or MoMo may have the payment settle after a delay. This means your system can’t rely on a redirect or callback to confirm — it has to wait for the webhook. This is the most important reason to set up webhook-based order tracking, not optional extras.
Setting Up Webhooks for Automated Order Tracking
A webhook is how Flutterwave tells your system “this payment just succeeded” — automatically, the moment it happens, without you checking the dashboard. Without this, you find out about payments only when you log in.
Before vs After: What Order Tracking Looks Like
❌ Without webhooks
Customer pays via bank transfer at 11pm. You don’t check the Flutterwave dashboard until morning. Order sits unprocessed overnight. Customer messages asking if their payment was received. You check manually, confirm it, update a spreadsheet by hand, send a WhatsApp message to confirm. The whole process takes hours and a manual check from you every step.
✅ With webhooks + Make.com
Customer pays via bank transfer at 11pm. Flutterwave fires a webhook the moment settlement confirms. Make.com catches it, verifies the transaction via Flutterwave’s API, logs the order to your Google Sheet, sends the customer a WhatsApp confirmation message, and sends you a Telegram alert. All automated. Done before you go to sleep.
Step-by-Step: Webhook Setup
1
In Make.com
Create a Custom Webhook trigger
Create a new Make.com scenario and add a Custom webhook as the trigger module. Create a new webhook and name it (“Flutterwave — Payments”). Copy the generated webhook URL — you’ll paste it into Flutterwave in the next step. This is the same process as the Paystack guide.
2
In Flutterwave Dashboard
Add your webhook URL and create a Secret Hash
Settings → Webhooks → Live webhooks tab. Paste your Make.com webhook URL into the URL field. In the Secret hash field, create a strong unique string — this is your shared secret for verifying webhook authenticity (e.g. a long random phrase). Save this string — you’ll need it in Make.com for signature verification.
Settings → Webhooks → Live webhooks
URL: (paste your Make.com webhook URL)
Secret hash: (create a strong unique string — save it)
✓ Also enable these checkboxes: “Enable webhook retries” (Flutterwave retries failed deliveries automatically) and “Enable webhook for failed transactions” if you want to handle payment failures as well as successes.
3
Critical: test mode too
Set up webhooks in the Test environment separately
Flutterwave requires separate webhook configuration for Test and Live environments — unlike Paystack, where test and live webhooks share the same setup path. Before going live, configure the same webhook URL in the Test environment and run a test payment to confirm the full automation works end-to-end.
Settings → Webhooks → Test webhooks tab (separate from Live)
4
In Make.com
Capture a test payload
Click Run once in Make.com, then make a test payment through Flutterwave (using test credentials). Make.com captures the webhook payload structure, making all fields available for mapping. The key event to look for is charge.completed with data.status = "successful".
5
Security — don’t skip this
Verify the webhook signature
Flutterwave signs each webhook with a verif-hash header containing the Secret Hash you set in Step 2. Add a filter in Make.com that checks the incoming verif-hash header against your stored secret. If they don’t match, stop the scenario — the request didn’t come from Flutterwave.
Header to check: verif-hash
Value must equal: (your Secret Hash from Step 2)
6
The Golden Rule
Always verify the transaction before giving value
The webhook tells you a payment happened — but Flutterwave’s own documentation is explicit: always call the verify transaction endpoint before fulfilling an order. A webhook payload alone is not sufficient confirmation. Use Make.com’s HTTP module to call GET https://api.flutterwave.com/v3/transactions/{id}/verify with your Secret Key in the Authorization header, and check that the response status is “successful” and the amount matches what you were expecting. Only then give value.
GET https://api.flutterwave.com/v3/transactions/{{data.id}}/verify
Authorization: Bearer (your Secret Key)
Check: data.status = “successful” AND data.amount = expected amount
✓ This step protects against manipulated webhook payloads where someone sends a fake “payment successful” event without actually paying.
What’s in the Flutterwave Webhook Payload
charge.completed event payload (abbreviated)
{
"event": "charge.completed",
"data": {
"id": 1234567, // Use this for verification API call
"tx_ref": "your-order-ref-001", // Your own reference — set when creating payment
"flw_ref": "FLW-MOCK-abc123", // Flutterwave's reference
"amount": 250, // In the currency below — verify this matches
"currency": "GHS",
"status": "successful",
"payment_type": "mobilemoney", // or "card", "banktransfer", "ussd"
"customer": {
"name": "Ama Owusu",
"email": "ama@example.com",
"phone_number": "0241234567"
}
}
}
The tx_ref field is one you control — set it when creating a payment link or initiating a checkout, and include your order reference there. This is how you match the Flutterwave notification back to the specific order in your system. The data.id is Flutterwave’s transaction ID — use this in the verification API call (Step 6 above).
3 Automation Recipes for Order Tracking
📊
Recipe 1: Log Every Payment to Your Order Sheet
The foundation — everything else builds on this
Every verified Flutterwave payment becomes a row in your order log — customer name, email, phone, amount, currency, payment method, transaction reference, and timestamp. Combined with the WooCommerce order log (if applicable), this gives you a complete picture of all revenue across all payment gateways in one place.
Webhook (charge.completed) → Verify signature → HTTP: verify transaction → Filter (status=successful, amount correct) → Google Sheets: Add Row
Map: data.customer.name, data.customer.email, data.customer.phone_number, data.amount, data.currency, data.payment_type, data.tx_ref, data.id
💬
Recipe 2: Send Customer a WhatsApp Payment Confirmation
Identical pattern to the Paystack guide’s Recipe 2
The moment a payment verifies successfully, the customer gets a WhatsApp confirmation message — “We’ve received your payment of GHS 250 for Order #001. We’ll update you when it ships.” Uses the same WhatsApp template approach from the order confirmations guide. The data.customer.phone_number from the payload is the phone field — apply the same international-format reformatting (local 0XX → international +233/+234) before passing to the WhatsApp API.
… → Filter (status=successful) → Reformat phone → WhatsApp API: send confirmation template
🔔
Recipe 3: Alert Owner for Bank Transfer Payments
Async payments need a human in the loop until fulfilment is automated
Bank transfer (PWBT) payments are asynchronous — the webhook may fire minutes or hours after the customer initiates payment. Add a filter on data.payment_type = "banktransfer" and send yourself a Telegram or WhatsApp alert with the order details so you know to prepare the order for dispatch. Combine with Recipe 1 so the order is logged regardless, and this alert is purely “action needed” for you.
… → Filter (payment_type = banktransfer) → Telegram: “Bank transfer received — Order {{tx_ref}}, GHS {{amount}} from {{customer.name}}”
Common Mistakes to Avoid
❌ Giving value on the webhook payload alone, without verifying
Flutterwave’s own documentation is explicit on this: “always verify the payment before giving value.” A webhook payload can be forged — someone can send a fake charge.completed event to your webhook URL without having actually paid. Fulfilling orders based on the webhook alone is a real fraud vector.
→ Fix: Step 6 above is non-negotiable. Always call the verify transaction endpoint (checking both status and amount) before logging the order as paid or sending confirmation to the customer.
❌ Forgetting to configure Test webhooks separately
Flutterwave’s Test and Live webhook configurations are separate. A common issue: the integration is built and tested, everything seems to work, then it goes live and webhooks don’t fire — because only the Test webhook was configured, not the Live one.
→ Fix: Configure webhooks in both environments (Settings → Webhooks has separate tabs for Test and Live). Test the complete flow end-to-end in Test mode before switching to Live keys.
❌ Not setting tx_ref to your own order reference
If tx_ref (the reference you set when creating the payment) is left as a generic or auto-generated value, the Flutterwave notification can’t be matched back to a specific order in your system without a manual lookup — defeating much of the automation’s purpose.
→ Fix: When creating a Payment Link or initiating Standard Checkout, set tx_ref to your order number or a reference that connects directly to the order in your sheet/CRM. This is the bridge between the Flutterwave event and your order data.
❌ Ignoring the amount mismatch check
Verifying that status = "successful" is necessary but not sufficient. A manipulated payment could succeed for a smaller amount than the product costs. Checking that data.amount equals the expected order value is the second half of the verification step.
→ Fix: In your Make.com filter after the verification API call, check both status = "successful" AND amount >= expected_amount. If either fails, stop the scenario and log the discrepancy rather than fulfilling the order.
❌ Using the same Make.com scenario for both Paystack and Flutterwave without deduplication
If you’re running both Paystack and Flutterwave (common for businesses wanting maximum payment coverage), and both log to the same Google Sheet, a WooCommerce order that was paid via Flutterwave-through-WooCommerce might also trigger your WooCommerce webhook — resulting in duplicate rows for the same order.
→ Fix: Use the order reference (tx_ref / WooCommerce order ID) as a deduplication key — check whether a row with that reference already exists in the sheet before adding a new one. The Sheet’s lookup function or a Make.com search step can handle this.
Frequently Asked Questions
What’s the difference between Flutterwave and Paystack for Ghana-based businesses?
Both support Ghana Mobile Money (MTN, Telecel, AirtelTigo), cards, and bank transfers. The practical differences are in breadth of African coverage (Flutterwave operates in more countries, relevant if you have customers outside Ghana and Nigeria), the WooCommerce plugin experience (some sellers report Paystack’s official plugin as slightly easier to configure, while Flutterwave’s offers features like split payments for marketplace setups), and secondary matters like dashboard UX and support experience. For a Ghana-only business, both are viable — many sellers run both simultaneously to maximise the payment methods available to their customers.
Do I need a developer to set this up?
For Payment Links — no, no code required. For the Make.com webhook automation — no, Make.com is visual and no-code. For Standard Checkout embedded on a custom website — yes, a developer is needed for the JavaScript integration and the server-side verification step. The WooCommerce plugin falls between: plugin installation is no-code, but some edge cases in webhook configuration benefit from developer involvement.
How long does Flutterwave take to settle funds?
Settlement timing varies by country, payment method, and your account’s settlement schedule (configurable in the dashboard). For Nigerian merchants, card payments typically settle within 24 hours; bank transfers and MoMo can vary. For Ghanaian merchants, MoMo settlement is generally faster than bank transfers. Check your specific account’s settlement settings in the Flutterwave dashboard under “Settlements” — this is separate from when the webhook fires (which is immediate on payment completion).
Can I use the same Make.com scenario for both Paystack and Flutterwave webhooks?
Technically yes — each can point to a different Make.com webhook URL, with both scenarios feeding into the same Google Sheet and notifications. In practice, keeping them as separate scenarios is easier to debug: when a payment isn’t tracked, you know immediately whether to check the Paystack scenario or the Flutterwave one, rather than tracing a shared scenario that handles both event formats. The deduplication note in the mistakes section above still applies regardless of whether you use separate or shared scenarios.
Payments In, Orders Tracked, No Manual Checks
The webhook setup and verify-before-giving-value pattern are the same discipline this series has applied to Paystack and WooCommerce — a webhook tells you something happened, the verification API call confirms it really did, and Make.com handles the downstream logging and notifications. The Flutterwave-specific details (the verif-hash header, the separate Test/Live webhook config, the tx_ref reference field) are the points this guide adds to the established pattern.
For stores running both Paystack and Flutterwave — which maximises payment method coverage across Ghana and Nigeria — both can feed the same order tracking system with separate webhook scenarios, giving you a single source of truth for all revenue regardless of which gateway processed each transaction.
More at OurInternetBusiness.com
Practical guides on automation, online business systems, and growing income from Ghana and across Africa. Visit OurInternetBusiness.com and bookmark it.