Introduction

Learn how to use our payment APIs.

Flutterwave Inline, Standard, and HTML checkout allow you to easily collect payments via card, bank, or other supported methods with a single integration. However, these options have Flutterwave's UI, branding, and user experience built in.

If you would prefer more control or a custom solution that integrates with your app, you can use our direct charge.
We provide the APIs to charge customers while you collect their payment information and use your desired UI and payment flow. This means you can customize and control your customer's experience as you wish.

ℹ️

Direct Charge

With direct charge, you'll have to integrate separately for each payment method you want to support, which can be tasking. Use direct charge only when your customers will be using a specific payment method (like cards or banks).

How does Direct Charge Work?

There are three main steps in direct charge:

  1. Initiating the payment: You send the transaction details and the customer's payment details to the appropriate charge endpoints.
  2. Authorize the charge: The customer authorizes the charge with their payment provider, such as their card issuer or bank. This completes the charge.
  3. Verify the payment: As a failsafe, you'll call our API to verify that the payment was successful before giving value (the verify transaction endpoint).

These steps vary depending on the payment method (for example, card charges may include multiple authorization steps). We'll explain what applies to each method in its guide.

Direct Charge Options

Here are the different options for collecting payments via direct charge. Each type of Direct Charge has its own unique requirements and authorization flow. Follow the links to view detailed guides for each type:

Webhooks

When working with direct charge, webhooks are useful tools to know when a charge has been authorized by the customer. See our webhooks guide to learn how to work with them.

As a backup, you can also poll for the status of a pending charge at regular intervals (say, 5 minutes). This way, you can still get updates if your webhook endpoint is down or webhooks are delayed.