원클릭으로
flutterwave-beneficiaries
Maintain reusable payout recipients and senders for clean transfer orchestration.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Maintain reusable payout recipients and senders for clean transfer orchestration.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Collect funds through bank transfer with account validation and asynchronous confirmation.
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-beneficiaries |
| description | Maintain reusable payout recipients and senders for clean transfer orchestration. |
Maintain reusable payout recipients and senders for clean transfer orchestration.
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 | /beneficiaries | Create beneficiary | https://developer.flutterwave.com/docs/general-transfer-flow |
| v4 | GET | /transfers/recipients | List recipients | https://developer.flutterwave.com/reference/transfers_recipients_list |
| v4 | POST | /transfers/recipients | Create recipient | https://developer.flutterwave.com/reference/transfers_recipients_create |
| v4 | DELETE | /transfers/recipients/{id} | Delete recipient | https://developer.flutterwave.com/reference/transfers_recipients_delete |
| v4 | POST | /transfers/senders | Create sender | https://developer.flutterwave.com/reference/transfers_senders_create |
| Market | Rail | Integration Notes |
|---|---|---|
| NG | Bank beneficiaries | Validate account ownership first. |
| KE/GH | MoMo beneficiaries | Store operator + phone metadata. |
| All | Sender/recipient separation | Required for compliance audits. |
export async function runBeneficiariesExample() {
return flwRequest<unknown>("v4", "/transfers/recipients", {
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.