skills/paystack-payment-requests/SKILL.md
Paystack Payment Requests (Invoicing) API — create, manage, and send payment requests (invoices) to customers. Supports line items, taxes, due dates, draft mode, auto invoice numbering, split payments, email notifications, and archiving. Use this skill whenever building invoicing systems, sending payment requests to customers, managing invoice line items and taxes, tracking invoice totals and statuses, or implementing B2B payment collection. Also use when you see references to /paymentrequest endpoint, PRQ_ prefixed codes, invoice numbers, or payment request finalization.
npx skillsauth add rexedge/paystack paystack-payment-requestsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
The Payment Requests API lets you create and manage invoices for goods and services.
Depends on: paystack-setup for the
paystackRequesthelper.
Related: paystack-customers for customer codes used in requests.
| Method | Endpoint | Description |
| --- | --- | --- |
| POST | /paymentrequest | Create a payment request |
| GET | /paymentrequest | List payment requests |
| GET | /paymentrequest/:id_or_code | Fetch a payment request |
| PUT | /paymentrequest/:id_or_code | Update a payment request |
| GET | /paymentrequest/verify/:code | Verify a payment request |
| POST | /paymentrequest/notify/:code | Send notification |
| GET | /paymentrequest/totals | Get totals/metrics |
| POST | /paymentrequest/finalize/:code | Finalize a draft |
| POST | /paymentrequest/archive/:code | Archive a request |
| Param | Type | Required | Description |
| --- | --- | --- | --- |
| customer | string | Yes | Customer ID or code |
| amount | integer | No | Amount in subunits (if no line items) |
| due_date | datetime | No | ISO 8601 due date |
| description | string | No | Short description |
| line_items | array | No | [{ name, amount, quantity? }] |
| tax | array | No | [{ name, amount }] |
| currency | string | No | Currency code (default: NGN) |
| send_notification | boolean | No | Send email (default: true) |
| draft | boolean | No | Save as draft (default: false) |
| has_invoice | boolean | No | Add auto-incrementing invoice number |
| invoice_number | integer | No | Override invoice number |
| split_code | string | No | Split code for revenue sharing |
// Invoice with line items and tax
const invoice = await paystackRequest<{
id: number;
request_code: string;
invoice_number: number;
}>("/paymentrequest", {
method: "POST",
body: JSON.stringify({
customer: "CUS_xwaj0txjryg393b",
description: "Q1 2024 Services",
due_date: "2024-03-31",
line_items: [
{ name: "Consulting (10 hours)", amount: 500000, quantity: 1 },
{ name: "Design work", amount: 200000, quantity: 1 },
],
tax: [
{ name: "VAT (7.5%)", amount: 52500 },
],
send_notification: true,
has_invoice: true,
}),
});
// invoice.data.request_code → "PRQ_1weqqsn2wwzgft8"
// Draft invoice (no notification sent)
await paystackRequest("/paymentrequest", {
method: "POST",
body: JSON.stringify({
customer: "CUS_xwaj0txjryg393b",
amount: 100000,
description: "Draft invoice",
draft: true,
}),
});
const requests = await paystackRequest(
"/paymentrequest?status=pending¤cy=NGN&perPage=20"
);
// Fetch
const req = await paystackRequest(`/paymentrequest/${encodeURIComponent("PRQ_code")}`);
// Verify (includes payment status)
const verified = await paystackRequest(
`/paymentrequest/verify/${encodeURIComponent("PRQ_code")}`
);
Re-send the payment request email to the customer:
await paystackRequest(`/paymentrequest/notify/${encodeURIComponent("PRQ_code")}`, {
method: "POST",
});
const totals = await paystackRequest("/paymentrequest/totals");
// totals.data.pending → [{ currency: "NGN", amount: 42000 }]
// totals.data.successful → [{ currency: "NGN", amount: 0 }]
// totals.data.total → [{ currency: "NGN", amount: 42000 }]
await paystackRequest(`/paymentrequest/finalize/${encodeURIComponent("PRQ_code")}`, {
method: "POST",
body: JSON.stringify({ send_notification: true }),
});
await paystackRequest(`/paymentrequest/${encodeURIComponent("PRQ_code")}`, {
method: "PUT",
body: JSON.stringify({
customer: "CUS_xwaj0txjryg393b",
description: "Updated invoice",
due_date: "2024-06-30",
amount: 150000,
}),
});
await paystackRequest(`/paymentrequest/archive/${encodeURIComponent("PRQ_code")}`, {
method: "POST",
});
development
Paystack webhook integration — signature validation with HMAC SHA512, event parsing, IP whitelisting, retry policy, and all supported event types. Use this skill whenever setting up a webhook endpoint for Paystack, validating x-paystack-signature headers, handling charge.success or transfer.success events, debugging webhook delivery failures, implementing idempotent event processing, or building any server-side Paystack event listener. Also use when encountering webhook timeout issues or needing the list of Paystack webhook IP addresses.
tools
Paystack Verification API — KYC verification tools for resolving bank accounts, validating account ownership, and looking up card BIN information. Use this skill whenever verifying bank account details before transfers, confirming account holder names, validating customer identity for compliance, looking up card brand/type/bank from BIN, or implementing KYC flows. Also use when you see references to /bank/resolve, /bank/validate, /decision/bin endpoints, or need to match account numbers to names.
development
Paystack Transfers API — send money to bank accounts and mobile wallets. Initiate single and bulk transfers, finalize OTP-verified transfers, list, fetch, and verify transfer status. Use this skill whenever implementing payouts, disbursements, vendor payments, withdrawal flows, or any feature that sends money from your Paystack balance to recipients. Also use when you see references to transfer_code, TRF_ prefixed codes, the /transfer endpoint, or need to handle transfer OTP verification.
development
Paystack Transfer Recipients API — create, list, fetch, update, and delete transfer recipients (beneficiaries) for payouts. Supports NUBAN (Nigeria), GHIPSS (Ghana), Mobile Money, BASA (South Africa), and authorization-based recipients. Use this skill whenever adding bank accounts or mobile wallets as payout destinations, creating transfer recipients before initiating transfers, managing beneficiary lists, or doing bulk recipient creation. Also use when you see references to recipient_code, RCP_ prefixed codes, or the /transferrecipient endpoint.