Skip to content

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 customer field must be a valid Paystack customer ID or code. You can create or manage customers using the Customer Resource.

php

$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

ParameterTypeRequiredDescription
customerStringYesCustomer ID or code.
amountIntegerYesPayment request amount (in subunits).
due_dateDateNoISO 8601 representation of request due date.
descriptionStringNoA short description of the payment request.
line_itemsArrayNoArray of line items.
taxArrayNoArray of taxes to be charged.
currencyStringNoSpecify the currency. Defaults to NGN.
send_notificationBooleanNoSend email notification to customer. Defaults to true.
draftBooleanNoSave as draft. Defaults to false.
has_invoiceBooleanNoCreate a draft payment request with an auto-incrementing invoice number.
invoice_numberIntegerNoOverride the auto-incrementing invoice number.
split_codeStringNoThe split code of the transaction split.

List Payment Requests

List the payment requests available on your integration.

php
// 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.

php
$idOrCode = 'PRQ_1weqqsn2wwzgft8';
$details = paystack()->paymentRequest()->fetch($idOrCode);

Verify Payment Request

Verify details of a payment request.

php
$code = 'PRQ_1weqqsn2wwzgft8';
$verification = paystack()->paymentRequest()->verify($code);

Send Notification

Send notification of a payment request to your customers.

php
$code = 'PRQ_1weqqsn2wwzgft8';
$response = paystack()->paymentRequest()->notify($code);

Payment Request Totals

Get payment requests metrics (totals for pending, successful, etc.).

php
$totals = paystack()->paymentRequest()->totals();

Finalize Payment Request

Finalize a draft payment request.

php
$code = 'PRQ_1weqqsn2wwzgft8';
$response = paystack()->paymentRequest()->finalize($code, true); // true to send notification

Update Payment Request

Update a payment request details.

php
$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.

php
$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.

php
$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.

php
// 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);

Released under the MIT License.