Paystack Payment Pages are hosted payment forms you create from the dashboard or API. Each page has a unique URL you share with customers. They support fixed or variable amounts, custom fields, and multiple payment channels. Use them when you need to collect payments quickly without building a checkout flow: event registrations, donations, product launches, or freelance invoicing.
A Paystack Payment Page is a hosted web page where customers can make payments. You create the page, specify what it is for, set the amount (or let the customer choose), and Paystack gives you a URL like https://paystack.com/pay/your-event. Share that URL anywhere: WhatsApp, email, social media, printed flyers. When someone clicks it, they see a payment form and can pay immediately.
Payment pages require zero code. You do not need a website, a server, or any technical setup. They are Paystack's fastest path from "I need to collect money" to "money is in my account."
Common uses:
The fastest way to create a payment page is through the Paystack dashboard:
The dashboard gives you a shareable URL and optionally an embed code if you want to put the payment form on an existing website using an iframe.
Dashboard-created pages are great for non-technical team members. Your marketing team can create a payment page for an event without involving engineering.
Get weekly developer tips
Join 25,000+ developers. Practical guides, job tips, and new content — straight to your inbox.
No spam. Unsubscribe anytime.
For programmatic creation, use the Paystack Page API:
async function createPaymentPage(name, amount, description, slug) {
var response = await fetch('https://api.paystack.co/page', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + process.env.PAYSTACK_SECRET_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: name,
amount: amount, // In kobo. Set to 0 for flexible amount.
description: description,
slug: slug, // Custom URL slug
redirect_url: 'https://yoursite.com/thank-you',
metadata: {
custom_fields: [
{
display_name: 'Phone Number',
variable_name: 'phone',
required: true,
},
{
display_name: 'Full Name',
variable_name: 'full_name',
required: true,
},
],
},
}),
});
var data = await response.json();
if (data.status) {
return {
slug: data.data.slug,
url: 'https://paystack.com/pay/' + data.data.slug,
id: data.data.id,
};
}
throw new Error('Failed to create page: ' + data.message);
}
// Create a page for an event
var page = await createPaymentPage(
'DevFest Lagos 2026 Registration',
500000, // 5,000 NGN
'Register for DevFest Lagos 2026. Includes lunch and a t-shirt.',
'devfest-lagos-2026'
);
console.log('Page URL: ' + page.url);
The API is useful when you need to create pages dynamically: generating a payment page for each new workshop, product, or campaign without manual dashboard work.
Fixed amount: Set a specific amount and every customer pays exactly that amount. Use for products, event tickets, or service fees with a defined price.
Flexible amount: Set the amount to 0 (or omit it in the dashboard) and the customer enters their own amount. Use for donations, tips, custom orders, or "pay what you want" models.
You can also set a minimum amount with flexible pricing to ensure the customer does not pay less than a threshold:
// Flexible amount with minimum
var response = await fetch('https://api.paystack.co/page', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + process.env.PAYSTACK_SECRET_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Support Our Cause',
amount: 0, // Flexible
description: 'Make a donation. Minimum N1,000.',
slug: 'support-our-cause',
}),
});
With fixed amounts, the customer cannot change the price. This is the right choice when the price is non-negotiable.
Custom fields let you collect information beyond email and amount. The customer fills in additional fields on the payment page before paying.
Common custom fields:
Custom field data appears in the transaction metadata. When you view the transaction on your dashboard or receive a webhook, the custom field values are in data.metadata.custom_fields.
You can mark fields as required or optional. Required fields must be filled before the customer can proceed to payment.
Payment pages are great for getting started, but they have limitations. Switch to a code-based integration (Initialize Transaction with your own frontend and backend) when you need:
Many businesses start with payment pages, validate demand, and then build a custom integration when volume and requirements justify the development effort. This is a smart approach.
Even without code, you can track payments from payment pages in several ways:
charge.success webhook as any other Paystack transaction.For more on webhooks, see the complete webhook engineering guide. For transaction exports, see transaction export and reporting.
KES 2,999
The definitive guide to building payment systems with Paystack — from your first transaction to production-grade payment infrastructure across Africa. 9 modules, 47 lessons. Free preview available.
Start Paystack Course