원클릭으로
flutterwave-bank-transfers
Collect funds through bank transfer with account validation and asynchronous confirmation.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Collect funds through bank transfer with account validation and asynchronous confirmation.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
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.
Run mobile money collections with operator-aware routing and delayed status handling.
| name | flutterwave-bank-transfers |
| description | Collect funds through bank transfer with account validation and asynchronous confirmation. |
Collect funds through bank transfer with account validation and asynchronous confirmation.
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 | /charges?type=bank_transfer | Start bank transfer collection | https://developer.flutterwave.com/docs/pay-with-bank-transfer |
| v3 | GET | /banks/{country} | List supported banks | https://developer.flutterwave.com/docs/getting-started |
| v4 | POST | /bank-account-resolve | Resolve account details | https://developer.flutterwave.com/reference/bank_account_resolve_post |
| v4 | GET | /banks | Retrieve banks | https://developer.flutterwave.com/reference/banks_get |
| Market | Rail | Integration Notes |
|---|---|---|
| NG | NIP transfer | Most common bank transfer flow. |
| GH | Bank transfer + MoMo fallback | Fallback for incomplete transfer intent. |
| KE | Bank transfer + M-Pesa | Offer mobile-first fallback. |
export async function runBankTransfersExample() {
return flwRequest<unknown>("v4", "/banks", {
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.