con un clic
flutterwave-transfers
Manage payouts including create, retrieve, and retry workflows.
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
Manage payouts including create, retrieve, and retry workflows.
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
Collect funds through bank transfer with account validation and asynchronous confirmation.
Maintain reusable payout recipients and senders for clean transfer orchestration.
Integrate airtime, data, and utility payments with validation and reconciliation checks.
Orchestrate batch dedicated-account creation and assignment workflows.
Handle direct card charges including PIN, OTP, and 3DS continuations in a deterministic flow.
Track and respond to dispute and chargeback cases with audit-ready evidence timelines.
| name | flutterwave-transfers |
| description | Manage payouts including create, retrieve, and retry workflows. |
Manage payouts including create, retrieve, and retry workflows.
const FLW_V3_BASE_URL = process.env.FLW_V3_BASE_URL ?? "https://api.flutterwave.com/v3";
const FLW_V4_BASE_URL = process.env.FLW_V4_BASE_URL ?? "https://developersandbox-api.flutterwave.com";
const FLW_SECRET_KEY = process.env.FLW_SECRET_KEY;
type FlwResponse<T> = {
status: "success" | "error";
message: string;
data: T;
};
class FlutterwaveApiError extends Error {
constructor(
message: string,
public readonly statusCode: number,
public readonly payload?: unknown,
) {
super(message);
this.name = "FlutterwaveApiError";
}
}
function getBaseUrl(version: "v3" | "v4") {
return version === "v3" ? FLW_V3_BASE_URL : FLW_V4_BASE_URL;
}
async function flwRequest<T>(
version: "v3" | "v4",
path: string,
init: RequestInit = {},
): Promise<FlwResponse<T>> {
if (!FLW_SECRET_KEY) {
throw new Error("Missing FLW_SECRET_KEY");
}
const response = await fetch(`${getBaseUrl(version)}${path}`, {
...init,
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${FLW_SECRET_KEY}`,
...(init.headers ?? {}),
},
});
const body = (await response.json()) as FlwResponse<T>;
if (!response.ok || body.status === "error") {
throw new FlutterwaveApiError(
body.message || "Flutterwave API request failed",
response.status,
body,
);
}
return body;
}
| Version | Method | Route / Operation | Use Case | Reference |
|---|---|---|---|---|
| v3 | POST | /transfers | Create transfer | https://developer.flutterwave.com/docs/making-a-transfer |
| v3 | POST | /transfers/{id}/otp | Finalize transfer with OTP | https://developer.flutterwave.com/docs/general-transfer-flow |
| v4 | POST | /transfers | Create transfer | https://developer.flutterwave.com/reference/transfers_post |
| v4 | GET | /transfers | List transfers | https://developer.flutterwave.com/reference/transfers_list |
| v4 | POST | /transfers/{id}/retry | Retry transfer | https://developer.flutterwave.com/reference/transfer_post_retry |
| Market | Rail | Integration Notes |
|---|---|---|
| NG | Bank transfer payouts | Default local payout route. |
| KE | Mobile money payout | Use operator-aware beneficiary data. |
| Cross-border | FX rate pre-check | Use transfer rates before quote lock. |
export async function runTransfersExample() {
return flwRequest<unknown>("v4", "/transfers", {
method: "GET",
});
}
v4 is resource-centric in the public reference. Keep route maps and payload types versioned in code so agent-generated integrations remain accurate.