skills/paystack-payment-pages/SKILL.md
Paystack Payment Pages API — create and manage hosted payment pages for collecting payments without writing frontend code. Supports fixed/flexible amounts, custom slugs, subscription pages, product pages, split payments, redirects, custom fields, and phone collection. Use this skill whenever building checkout pages, donation pages, event ticket sales, product catalogs with payments, or any hosted payment link. Also use when you see references to page slug, /page endpoint, paystack.com/pay/ URLs, or need to add products to a payment page.
npx skillsauth add rexedge/paystack paystack-payment-pagesInstall 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 Pages API lets you create hosted payment pages at https://paystack.com/pay/[slug] — no frontend code needed.
Depends on: paystack-setup for the
paystackRequesthelper.
| Method | Endpoint | Description |
| --- | --- | --- |
| POST | /page | Create a payment page |
| GET | /page | List payment pages |
| GET | /page/:id_or_slug | Fetch a payment page |
| PUT | /page/:id_or_slug | Update a payment page |
| GET | /page/check_slug_availability/:slug | Check slug availability |
| POST | /page/:id/product | Add products to page |
POST /page
| Param | Type | Required | Description |
| --- | --- | --- | --- |
| name | string | Yes | Page name |
| description | string | No | Page description |
| amount | integer | No | Fixed amount in subunits (kobo/pesewas) |
| currency | string | No | Defaults to integration currency |
| slug | string | No | Custom URL slug |
| type | string | No | payment (default), subscription, product, or plan |
| plan | string | No | Plan ID (when type is subscription) |
| fixed_amount | boolean | No | If true, amount is required and unchangeable |
| split_code | string | No | Split code for revenue sharing |
| redirect_url | string | No | Redirect URL after payment |
| success_message | string | No | Success message on completion |
| notification_email | string | No | Email for transaction notifications |
| collect_phone | boolean | No | Collect phone numbers |
| custom_fields | array | No | Custom fields to collect |
| metadata | object | No | Extra config (subaccount, logo, etc.) |
// Simple payment page
const page = await paystackRequest<{
slug: string;
id: number;
}>("/page", {
method: "POST",
body: JSON.stringify({
name: "Buttercup Brunch",
amount: 500000, // ₦5,000
description: "Gather your friends for the ritual that is brunch",
slug: "buttercup-brunch",
redirect_url: "https://mysite.com/thank-you",
collect_phone: true,
}),
});
// Page URL: https://paystack.com/pay/buttercup-brunch
// Subscription page
await paystackRequest("/page", {
method: "POST",
body: JSON.stringify({
name: "Monthly Pro Plan",
type: "subscription",
plan: 1716,
}),
});
// Donation page (flexible amount)
await paystackRequest("/page", {
method: "POST",
body: JSON.stringify({
name: "Support Our Cause",
description: "Any amount helps",
// No amount = donor chooses
custom_fields: [
{ display_name: "Full Name", variable_name: "full_name" },
{ display_name: "Message", variable_name: "message" },
],
}),
});
const pages = await paystackRequest("/page?perPage=20&page=1");
const page = await paystackRequest(`/page/${encodeURIComponent("buttercup-brunch")}`);
await paystackRequest(`/page/${encodeURIComponent("buttercup-brunch")}`, {
method: "PUT",
body: JSON.stringify({
name: "Updated Brunch",
description: "New brunch description",
amount: 750000,
active: true,
}),
});
const check = await paystackRequest(
`/page/check_slug_availability/${encodeURIComponent("my-slug")}`
);
// { status: true, message: "Slug is available" }
await paystackRequest(`/page/${pageId}/product`, {
method: "POST",
body: JSON.stringify({
product: [473, 292], // Product IDs
}),
});
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.