Skip to main content
Direct Charge allows your backend to initiate payment directly with a provider, without first creating a checkout URL.

When To Use Direct Charge

Backend-Driven Flows

Best for server-to-server payment initiation where you control the full transaction lifecycle.

Provider-Specific Inputs

Use when payment requires provider-specific fields like network or customer OTP codes.

Recurring / Embedded UX

Useful for tightly integrated experiences where redirect checkout is not preferred.

Endpoints

Integration Steps

1

Pick provider slug

Select a valid provider from Supported Providers.
2

Fetch provider properties (optional)

For providers like Bank Transfer(bank-transfer-nigeria), fetch required properties (for example network values) before charging.
3

Send direct charge request

Call the direct-charge endpoint with provider, amount, and customerInput.
4

Handle action + confirm final status

Use response action (processing, redirect, bankTransfer) and finalize based on webhook/verification.

Fetch Provider Properties (Optional)

Example response:

Direct Charge Request

Sample response:

Request Fields

Action Types and Handling

processing

Customer/provider interaction is in progress (for example USSD/STK authorization pending). Keep payment state pending and wait for webhook/verification final status.
Redirect customer to provider URL (usually at data.data.link). Do not treat redirect completion alone as payment success.
Display returned bank transfer instructions (account name/number, amount, expiry). Wait for webhook/verification before marking success.

Amount Rule (Important)

Payfonte does not support decimal amounts in API requests. Send integer minor-unit values only.
  • 100.00 NGN -> 10000
  • 2500.75 NGN -> 250075
See Amount Specification.

Final Status Confirmation

For order fulfillment, rely on:
  1. Webhooks for async payment updates.
  2. GET /payments/v1/payments/verify/{reference} for backend verification.

Processing Flows

Understand processing, redirect, bankTransfer, and pre-OTP patterns.

Example Payloads

Copy provider-specific request examples.

Supported Providers

Provider slugs, limits, and country coverage.