How to Add Flutterwave to Your Website: Payment Links, Plugins, Inline and API

Flutterwave integration routes at a glance
Flutterwave offers five ways to take payments on a website: shareable Payment Links, a hosted Flutterwave Store, official plugins for common platforms, the Inline checkout script for custom pages, and the Standard API that generates a hosted payment page from your server. Choose by platform, by whether amounts are fixed or calculated, and by whether payment must update your records automatically.
| Route | Best for | Code required | Updates your records automatically? |
|---|---|---|---|
| Payment Links | Deposits, tickets, fees, donations, WhatsApp and Instagram sales | None | Dashboard only, unless webhooks are added |
| Flutterwave Store | Small catalogue with no website store yet | None | Within Flutterwave's dashboard |
| Plugins (WordPress, WooCommerce, Shopify) | Stores and form-driven sites on a platform | Minimal | Yes, inside the platform |
| Inline checkout | Custom pages with a pay button | Front-end script plus server verification | Only with server-side verification |
| Standard API | Web apps, portals, variable invoices, subscriptions | Back-end developer | Yes, with verification and webhooks |
Before you start: account, compliance and keys
You need a Flutterwave for Business account with compliance submitted, your public, secret and encryption keys, a website on HTTPS, and a defined list of what customers will pay for. Compliance for a registered business requires CAC documents, ID and BVN for directors, and a settlement account in the business name; starter accounts with lower limits exist for individuals. Verify current requirements on Flutterwave's compliance page.
- Keys. The dashboard provides test and live sets. The public key is used in the browser for Inline; the secret key stays on your server for the Standard API, verification and webhooks; the encryption key is used for some direct-charge integrations that most websites will not need.
- Settlement account. A naira account for local settlements; foreign-currency settlement, where available for your business type, has separate requirements.
- Currencies. Decide whether you will charge only in naira or also in other currencies. This affects compliance, fees and how you present prices.
- Scenario list. Fixed amounts, customer-entered amounts, cart totals, recurring plans or invoices. Each maps to a route in the table above.
No-code routes: Payment Links and Flutterwave Store
Payment Links are the fastest way to start. They are created in the dashboard and shared as a URL or placed behind a button.
- In the dashboard, create a new Payment Link and choose the type: a one-time link with a fixed amount, a link where the customer enters an amount, or a recurring link tied to a payment plan.
- Set the title, description, currency, amount, and any extra fields you need for reconciliation, such as an order number or student ID.
- Add a redirect URL to a thank-you page on your website.
- Copy the link and use it on your site, in WhatsApp conversations and in Instagram bios.
- Track payments in the dashboard and export them for accounts.
Flutterwave Store goes a step further by giving you a hosted storefront with products, quantities and delivery details, which suits a business that wants to sell a small catalogue before building a full online store. When you outgrow it, the same account moves with you to a plugin or API integration.
Plugin routes: WordPress, WooCommerce and Shopify
Official plugins handle checkout, order status and receipts inside the platform, which makes them the right route for most online stores and booking sites.
- Install the Flutterwave plugin for WordPress or the WooCommerce payment gateway, or add Flutterwave as a third-party payment provider in Shopify's payment settings.
- Paste the test public and secret keys into the plugin settings and enable test mode.
- Choose the payment options to display (card, bank transfer, USSD and others available to your account) and the order status to apply on success.
- Copy the webhook URL the plugin provides, add it in your Flutterwave dashboard, and set the same secret hash in both places.
- Place a test order with Flutterwave's test card details, confirm the order status updates, then switch to live keys and the live webhook.
On Shopify, Flutterwave is selected as a payment provider, and Shopify may add a transaction fee for third-party providers on some plans; check Shopify's pricing for Nigeria.
Developer routes: Flutterwave Inline and Flutterwave Standard
Flutterwave Inline
Inline opens Flutterwave's checkout in a modal on your own page. It suits custom-built pages where you control the button.
- Load the Flutterwave Inline script on the page.
- On click, call the checkout function with your public key, a unique transaction reference (tx_ref) you generate, the amount in naira (not kobo), the currency, the customer's email, name and phone, optional payment options and metadata, and customisation such as your logo and title.
- Provide a callback that runs on completion and an onclose handler for abandonment.
- In the callback, send the transaction ID and reference to your server. The server calls Flutterwave's verify endpoint with the secret key and checks that status is successful and that amount, currency and reference match what you expected.
- Only then mark the record paid, show confirmation and send the receipt.
Flutterwave Standard
Standard is the server-initiated route: your back end asks Flutterwave for a hosted payment page and redirects the customer to it.
- When the customer clicks pay, your server calls the payments endpoint with the secret key, a unique tx_ref, amount, currency, redirect URL, customer details and metadata.
- Flutterwave returns a link to a hosted payment page; redirect the customer there.
- After payment, the customer returns to your redirect URL with the transaction status, ID and reference.
- Verify the transaction server-side before fulfilling.
- Register a webhook so payments completed without the customer returning to your site are still recorded.
Standard fits portals, subscription sites and any application where the amount is calculated by your system rather than typed by the customer.
Verifying payments and setting up webhooks
Two safeguards turn a Flutterwave button into a reliable payment system: server-side verification of every transaction, and a webhook endpoint validated with a secret hash. Verification stops spoofed "success" callbacks; webhooks catch transfers completed after the customer leaves the page. Verification means calling Flutterwave's transaction verify endpoint with the secret key and checking four things: the status is successful, the amount is at least what you charged, the currency is what you expected, and the tx_ref matches your record. A payment that fails any check should be treated as unpaid and investigated. Webhooks are set up as follows:
- Create an HTTPS endpoint on your server that accepts POST requests.
- In the dashboard, enter the webhook URL and set a secret hash, a string you choose.
- On every incoming webhook, compare the verif-hash header with your secret hash; reject requests that do not match.
- Respond with a 200 status promptly, then process the event: find the record by tx_ref, verify the transaction with the API as a second check, update the status and trigger receipts or WhatsApp messages.
- Make processing idempotent so a repeated event never fulfils twice.
- Log every webhook; these logs resolve most "I paid but nothing happened" cases.
Collecting in more than one currency on a Nigerian website
Flutterwave allows a Nigerian business, subject to compliance and business type, to present and collect payments in currencies beyond naira, which matters for businesses with diaspora customers, foreign clients or regional operations. Each transaction carries an explicit currency, and settlement rules differ by currency, so multi-currency needs planning rather than a single setting. Practical guidance:
- Confirm eligibility first. Foreign-currency collection and settlement depend on your business type and compliance status. Ask Flutterwave what your account can do before promising dollar prices on the site.
- Decide the pricing model. Either price in naira and let foreign customers' banks convert, or present prices in the customer's currency with a currency selector on the site and pass the chosen currency to the checkout.
- Understand settlement. Foreign-currency payments may settle in naira at a conversion rate, or into a domiciliary account where available. Timing is usually longer than for local payments. Verify in your dashboard.
- Model fees. International card and foreign-currency transactions attract higher fees than local naira payments. Check the current pricing page.
- Reconcile by currency. Keep the charged currency and amount on every record so that accounts can match settlements without guessing at exchange rates.
If all your customers pay in naira, skip this section entirely and keep the integration simple.
Testing and going live
Test every scenario in test mode with Flutterwave's published test cards and simulated transfers, then repeat the critical checks live with a small real payment that you refund. The most common go-live failures are a webhook URL still pointing at the test environment and a secret hash that differs between the dashboard and the server. Test-mode checklist:
- Successful card payment updates the record and sends a receipt.
- Declined and insufficient-funds test cards leave the record unpaid with a clear message.
- Bank transfer completed after closing the modal is captured by the webhook.
- Verification rejects a mismatched amount or currency.
- Duplicate webhook delivery does not fulfil twice.
- Checkout works on a mid-range Android phone over mobile data.
Going live:
- Swap test keys for live keys in server configuration; never in page templates.
- Set the live webhook URL and confirm the secret hash matches.
- Make a small live payment by card and by transfer, confirm the record updates, then refund from the dashboard.
- Confirm the settlement arrives in your bank account on the expected day.
- Check that your business name appears correctly on the checkout and on customers' statements.
What changes for Nigerian businesses
For a Nigerian business, adding Flutterwave differs from a generic integration in the payment options customers expect, fee structure, settlement timing, the compliance file that enables live features, and the exchange-rate exposure that comes with multi-currency collection. Design for transfers and USSD, model fees at your real transaction sizes, and keep documents current.
- Payment options. Enable bank transfer and USSD alongside card. Many customers abandon card-only checkouts, and USSD works where data is poor.
- Fees. Flutterwave publishes its pricing. At the time of writing, the published local rate has been a small percentage per transaction with a per-transaction cap, and a higher rate for international cards; confirm the current schedule and model it at your typical amounts.
- Settlement. Naira payments are typically settled on the next business day by default; foreign-currency settlement takes longer. Verify the schedule and any faster-settlement options in your dashboard.
- Compliance and limits. Starter accounts have lower limits until CAC documents are approved. Complete registered-business compliance before taking large payments.
- Connectivity. Modals and redirects fail on unstable networks. Provide a "check my payment" option that uses the reference, and rely on webhooks rather than the customer's browser.
- Data protection. Names, emails, phone numbers and payment references are personal data under the Nigeria Data Protection Act 2023. Publish a privacy notice, limit dashboard access and verify obligations with the NDPC.
Example (hypothetical): a Port Harcourt travel agency adds Flutterwave
Example (hypothetical): a travel agency in Port Harcourt sells visa assistance, flight bookings and holiday packages. Nigerian clients pay in naira by transfer; a growing number of clients in the UK and the US pay for relatives' packages and want to pay in pounds or dollars. Payments currently arrive by transfer, Western Union and screenshots on WhatsApp. The agency starts with Flutterwave Payment Links: one per service in naira and, after confirming its account's eligibility, matching links in USD and GBP with a required "client reference" field. Links go on the website's service pages and into WhatsApp chats. Six months later, when the agency launches a client portal for tracking applications, the developer implements the Standard route: the portal calculates each invoice, the client chooses a currency, the server creates the payment, and webhooks with a secret hash mark invoices paid and send a WhatsApp confirmation. The first phase costs only transaction fees and a few hours of dashboard setup; the portal integration is part of the portal project. The measures that matter are the share of foreign-client payments received without manual chasing and the time saved reconciling multi-currency receipts. This is a hypothetical scenario to illustrate route progression, not a client case study.
How much does it cost to add Flutterwave to a website?
Indicatively, adding Flutterwave costs nothing beyond transaction fees if you use Payment Links, Flutterwave Store or an official plugin yourself, ₦80,000–₦250,000 for a developer to configure a plugin or Inline checkout with server-side verification, and ₦250,000–₦1,000,000+ for a Standard API integration with webhooks, multi-currency handling and reconciliation in a custom site or portal. Indicative 2026 ranges; actual quotes vary with scope, vendor and exchange rate.
| Item | Type | Indicative cost | Notes |
|---|---|---|---|
| Flutterwave for Business account | One-off | Free | Compliance documents required for live limits |
| Payment Links or Flutterwave Store | Recurring | Transaction fees only | Self-serve in the dashboard |
| Plugin installation and configuration | One-off | ₦80,000–₦150,000 | WordPress, WooCommerce, Shopify setup and testing |
| Inline checkout with server verification | One-off | ₦120,000–₦250,000 | Custom pages |
| Standard API with webhooks and reconciliation | One-off | ₦250,000–₦1,000,000+ | Portals, web apps, multi-currency, payment plans |
| Transaction fees | Per payment | Published percentage, capped locally; higher internationally | Verify on Flutterwave's pricing page |
| Ongoing maintenance | Monthly | Part of a ₦20,000–₦150,000 website retainer | Plugin updates, key rotation, monitoring |
Mistakes to avoid
- Sending amounts in kobo. Flutterwave expects naira. A ₦10,000 payment sent as 1000000 charges ₦1,000,000, and an embarrassing refund follows.
- Exposing the secret or encryption key in page code. Keys belong on the server. Public keys only in the browser.
- Fulfilling on the browser callback alone. Verify with the API and check amount, currency and reference.
- Mismatched secret hash. If the dashboard and server hashes differ, every webhook is rejected and transfers go unrecorded.
- Promising dollar pricing before confirming eligibility. Multi-currency depends on business type and compliance.
- Reusing tx_ref values. Each transaction needs a unique reference for verification and reconciliation.
- Leaving test keys or the test webhook in production. Customers see success; no money arrives.
Conclusion
Adding Flutterwave to a website follows the same logic as any gateway integration, with a few Flutterwave-specific details that decide success: amounts in naira, a secret hash for webhooks, an explicit currency on every transaction, and server-side verification of status, amount, currency and reference. Start with Payment Links if you need to collect money this week, move to a plugin if your site runs on WordPress, WooCommerce or Shopify, and use Inline or Standard with webhooks when your application calculates amounts or must update records automatically. Confirm multi-currency eligibility before advertising foreign prices, and test with real Nigerian payment methods before going live. If you want Flutterwave integrated into a Nigerian business website, portal or web application, including multi-currency collection and automated reconciliation, Linestech can build the integration and advise on the most sensible route for your customers.
Frequently asked questions
Can I use Flutterwave on my website without coding?
Yes. Payment Links and Flutterwave Store need no code, and the official plugins for WordPress, WooCommerce and Shopify only require pasting keys and setting a webhook. Developer routes become necessary when amounts are calculated by your own system, when payments must trigger actions in an application, or when you need automated reconciliation.
Does Flutterwave support bank transfer and USSD on a website checkout?
Yes. When enabled for your account, the checkout offers bank transfer, USSD and other local options alongside card. Because a customer may complete a transfer after closing the checkout, register a webhook so the payment is recorded and your records update automatically.
How is Flutterwave different from Paystack for a website integration?
Both offer links, plugins, an inline script and a server-side API with webhooks. Practical differences include amount units (Flutterwave uses naira, Paystack uses kobo), webhook validation (a secret hash versus a signature computed from the secret key), and Flutterwave's broader multi-currency and multi-country collection. Fees and compliance requirements should be compared on each provider's current pages.
Can Flutterwave collect recurring payments on my website?
Yes. Flutterwave supports payment plans that charge a customer's card on a schedule after the first authorisation, which suits memberships, instalments and subscriptions. Your integration should handle failed renewals through webhooks and let customers update their card details.
Why is a payment marked successful on Flutterwave but not on my website?
Typically the webhook was not registered for live mode, the secret hash does not match, the endpoint timed out or returned an error, or verification rejected a mismatched amount or currency. Ask the customer for the transaction reference, check the dashboard, and read your webhook logs.
How long does Flutterwave integration take?
A Payment Link can be live within an hour of account activation. A plugin setup takes a few hours including testing. A Standard API integration with webhooks and reconciliation usually takes three to ten working days depending on your application, with multi-currency handling adding time. Compliance review is often the longest part.
Sources and further reading
Figures, platform rules and regulations change. These are the primary references behind this article and the places to check before you act on it.


