Virtual Terminal
In a nutshell
Accept in-person payments using your phone and receive payment notifications via Whatsapp
Introduction
Virtual Terminal transforms a mobile phone into a point-of-sale system, enabling businesses to accept payments without dedicated POS hardware. By connecting a WhatsApp-enabled phone to your Virtual Terminals, you can instantly set up a payment point that supports bank transfers and QR code payments.
Virtual Terminal is ideal for:
- Small businesses looking to minimize upfront costs
- Mobile vendors who need flexible payment options
- Businesses wanting to quickly set up additional payment points
- Delivery businesses accepting payment on delivery
Create a Virtual Terminal
To create a Virtual Terminal, make a POST
request to the Virtual TerminalAPI, specifying a name and up to five WhatsApp-enabled phone numbers.
1curl "https://api.paystack.co/virtual_terminal"2-H "Authorization: Bearer YOUR_SECRET_KEY"3-H "Content-Type: application/json"4-d '{5 "name": "Sales Point #1",6 "destinations": [7 {"target": "+2347081234567"}8 ]9}'10-X POST
1{2 "status": true,3 "message": "Virtual Terminal created",4 "data": {5 "id": 26677,6 "name": "Sales Point #1",7 "integration": 353514,8 "domain": "live",9 "code": "VT_L837PT5K",10 "paymentMethods": [11 {12 "dedicated_nuban_id": 26196910,13 "type": "dedicated_nuban",14 "account_number": "9964842038",15 "account_name": "Paystack Demo/Sales Point #1",16 "bank": "Paystack-Titan"17 }18 ],19 "active": true,20 "metadata": {21 "testing": "metadata"22 },23 "destinations": [24 {25 "target": "2347081234567",26 "type": "whatsapp",27 "name": null28 }29 ],30 "currency": "NGN"31 }32}
Once created, the terminal is ready to accept payments through its unique payment page or dedicated payment details (where applicable).
Accept payments
Once you've created a Virtual Terminal, you can share it with your customers in two ways, depending on your market:
Use the Paystack-generated poster
Paystack automatically generates a poster for your Virtual Terminal, which you can download and display at your business location. The poster includes a QR code that customers can scan to access the terminal’s payment page.
On the payment page, customers can complete their transaction using the Paystack Checkout, which supports various online payment methods such as cards, bank transfers, and mobile money.
To use the poster for your Virtual Terminal:
- Navigate to the Terminals Tab: Log in to your Paystack Dashboard and go to the Terminals tab.
- Select the Virtual Terminal: Choose the Virtual Terminal for which you want to download a poster.
- Download the Poster: In the terminal's details, click on the "Poster" option. Select the version of the poster you'd like to use and download it.
- Display the Poster: Place the poster in a visible location where your customers can easily access it.
Use the dedicated payment details
In supported markets, each Virtual Terminal is assigned unique payment details that allow customers to make direct transfers:
- Nigeria: A Dedicated Virtual Account
- Kenya: An M-Pesa Paybill
- Ghana: A USSD code.
Customers can use these payment details to transfer funds directly to your terminal. These details are included in the API response when the terminal is created and are also displayed on the poster for easy reference.
- Nigeria
- Ghana
- Kenya
1{2 "paymentMethods": [3 {4 "dedicated_nuban_id": 26196910,5 "type": "dedicated_nuban",6 "account_number": "9964842038",7 "account_name": "Paystack Demo/Sales Point #1",8 "bank": "Paystack-Titan"9 }10 ]11}
Handle notifications
When a payment is made to your Virtual Terminal, you can receive real-time notifications to stay informed and process transactions efficiently. Paystack provides two notification options:
Whatsapp notifications
On successful payments, each of registered Whatsapp numbers will receive instant payment notifications for all transactions made to the terminal.
Webhooks
When payment is made on your Virtual Terminal, you'll receive a charge.success
event to your server using webhooks. The metadata
object in the webhook payload will include the code for the Virtual Terminal that was used to make the payment.
- JSON
1{2 "event": "charge.success",3 "data": {4 "id": 4677002219,5 "domain": "test",6 "status": "success",7 "reference": "T173424527684156",8 "amount": 10000,9 "message": null,10 "gateway_response": "Successful",11 "paid_at": "2025-02-11T10:42:20.000Z",12 "created_at": "2025-02-11T10:42:03.000Z",13 "channel": "card",14 "currency": "KES",15 "ip_address": "129.222.206.7",16 "metadata": {17 "virtual_terminal": {18 "code": "VT_68SBY77G"19 },20 "referrer": "https://paystack.shop/pay/vt_68sby77g"21 },22 "fees_breakdown": null,23 "log": null,24 "fees": 290,25 "fees_split": null,26 "authorization": {27 "authorization_code": "AUTH_7k5skwmhxu",28 "bin": "408408",29 "last4": "4081",30 "exp_month": "12",31 "exp_year": "2030",32 "channel": "card",33 "card_type": "visa ",34 "bank": "TEST BANK",35 "country_code": "KE",36 "brand": "visa",37 "reusable": true,38 "signature": "SIG_C9LhIPX2mQ8uckT6In2U",39 "account_name": null,40 "receiver_bank_account_number": null,41 "receiver_bank": null42 },43 "customer": {44 "id": 239551424,45 "first_name": "",46 "last_name": "",47 "email": "h0e5lcb0f0tnqrmixoqa@paystackdemoke-vt.com",48 "customer_code": "CUS_edn4wbf00pcot1p",49 "phone": "",50 "metadata": null,51 "risk_action": "default",52 "international_format_phone": null53 },54 "plan": {},55 "subaccount": {},56 "split": {},57 "order_id": null,58 "paidAt": "2025-02-11T10:42:20.000Z",59 "requested_amount": 10000,60 "pos_transaction_data": null,61 "source": {62 "type": "offline",63 "source": "virtual_terminal",64 "entry_point": "request_inline",65 "identifier": "VT_68SBY77G"66 }67 }68}