원클릭으로
flutterwave-bills
Integrate airtime, data, and utility payments with validation and reconciliation checks.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Integrate airtime, data, and utility payments with validation and reconciliation checks.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Collect funds through bank transfer with account validation and asynchronous confirmation.
Maintain reusable payout recipients and senders for clean transfer orchestration.
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-bills |
| description | Integrate airtime, data, and utility payments with validation and reconciliation checks. |
Integrate airtime, data, and utility payments with validation and reconciliation checks.
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 | GET | /bill-categories | List bill categories | https://developer.flutterwave.com/docs/telecommunications |
| v3 | POST | /bills | Create bill payment | https://developer.flutterwave.com/docs/telecommunications |
| v4 | GET | /payment-methods | Resolve allowed payment rails | https://developer.flutterwave.com/reference/payment_methods_list |
| v4 | POST | /orders | Create payable order context | https://developer.flutterwave.com/reference/orders_post |
| Market | Rail | Integration Notes |
|---|---|---|
| NG | Airtime/Data/Cable/Power | Highest demand bill categories. |
| GH | Utility + airtime | Confirm biller-specific amount constraints. |
| All | Validation first | Validate customer identifiers before charge. |
export async function runBillsExample() {
return flwRequest<unknown>("v4", "/orders", {
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.