Payment Requests
The PaymentRequestResource allows you to manage requests for payment of goods and services. This is also known as Invoices. You can create, list, verify, and manage payment requests.
Create Payment Request
Create a payment request (Invoice) for a transaction on your integration.
Note: The
customerfield must be a valid Paystack customer ID or code. You can create or manage customers using the Customer Resource.
$request = paystack()->paymentRequest()->create([
'customer' => 'CUS_xwaj0txjryg393b',
'amount' => 42000, // 420.00
'due_date' => '2025-07-08',
'description' => 'A test invoice',
'line_items' => [
['name' => 'Item 1', 'amount' => 20000],
['name' => 'Item 2', 'amount' => 22000]
],
'tax' => [
['name' => 'VAT', 'amount' => 2000]
]
]);Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
customer | String | Yes | Customer ID or code. |
amount | Integer | Yes | Payment request amount (in subunits). |
due_date | Date | No | ISO 8601 representation of request due date. |
description | String | No | A short description of the payment request. |
line_items | Array | No | Array of line items. |
tax | Array | No | Array of taxes to be charged. |
currency | String | No | Specify the currency. Defaults to NGN. |
send_notification | Boolean | No | Send email notification to customer. Defaults to true. |
draft | Boolean | No | Save as draft. Defaults to false. |
has_invoice | Boolean | No | Create a draft payment request with an auto-incrementing invoice number. |
invoice_number | Integer | No | Override the auto-incrementing invoice number. |
split_code | String | No | The split code of the transaction split. |
List Payment Requests
List the payment requests available on your integration.
// List all requests
$requests = paystack()->paymentRequest()->list();
// Filter requests
$filtered = paystack()->paymentRequest()->list([
'status' => 'pending',
'customer' => 'CUS_xwaj0txjryg393b'
]);Fetch Payment Request
Get details of a payment request.
$idOrCode = 'PRQ_1weqqsn2wwzgft8';
$details = paystack()->paymentRequest()->fetch($idOrCode);Verify Payment Request
Verify details of a payment request.
$code = 'PRQ_1weqqsn2wwzgft8';
$verification = paystack()->paymentRequest()->verify($code);Send Notification
Send notification of a payment request to your customers.
$code = 'PRQ_1weqqsn2wwzgft8';
$response = paystack()->paymentRequest()->notify($code);Payment Request Totals
Get payment requests metrics (totals for pending, successful, etc.).
$totals = paystack()->paymentRequest()->totals();Finalize Payment Request
Finalize a draft payment request.
$code = 'PRQ_1weqqsn2wwzgft8';
$response = paystack()->paymentRequest()->finalize($code, true); // true to send notificationUpdate Payment Request
Update a payment request details.
$idOrCode = 'PRQ_1weqqsn2wwzgft8';
$response = paystack()->paymentRequest()->update($idOrCode, [
'description' => 'Updated Invoice Description',
'amount' => 50000
]);Archive Payment Request
Archive a payment request. It will no longer be fetched on list or returned on verify.
$code = 'PRQ_1weqqsn2wwzgft8';
$response = paystack()->paymentRequest()->archive($code);Use Cases
Creating a Professional Invoice
You can use Payment Requests to send professional invoices to clients.
$invoice = paystack()->paymentRequest()->create([
'customer' => 'CUS_123456789',
'description' => 'Web Development Services - June 2025',
'due_date' => '2025-06-30',
'line_items' => [
['name' => 'Frontend Development', 'amount' => 15000000, 'quantity' => 1], // 150,000.00
['name' => 'Backend Development', 'amount' => 20000000, 'quantity' => 1], // 200,000.00
['name' => 'Server Setup', 'amount' => 5000000, 'quantity' => 1] // 50,000.00
],
'tax' => [
['name' => 'VAT (7.5%)', 'amount' => 3000000] // 30,000.00
],
'send_notification' => true
]);Managing Draft Invoices
You can create invoices as drafts, review them, and then finalize them later.
// 1. Create Draft
$draft = paystack()->paymentRequest()->create([
'customer' => 'CUS_123456789',
'amount' => 10000,
'draft' => true
]);
$code = $draft['data']['request_code'];
// 2. Update Draft (e.g., add more items)
paystack()->paymentRequest()->update($code, [
'amount' => 20000
]);
// 3. Finalize and Send
paystack()->paymentRequest()->finalize($code);