Collections
Choose how to accept payments, then confirm them safely.
There are three ways to collect money with Payinto.
| Method | Best for | Your customer sees | Key |
|---|---|---|---|
| Dynamic virtual account | A checkout you build yourself | A temporary account number | Secret |
| Static virtual account | Wallets and repeat top-ups | A permanent account number | Secret |
| Checkout SDK | A ready-made payment popup | The Payinto Checkout popup | Public |
Collect an order payment
This tutorial collects ₦1,500.00 for an order with a dynamic virtual account.
Create the account
Use your order ID in merchant_reference, so a retry can't create a second account.
curl https://api.payinto.co/api/v1/business/virtual-accounts/dynamic \
--header "Authorization: Bearer $PAYINTO_SECRET_KEY" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data '{
"amount": 150000,
"amount_control": "Fixed",
"valid_for": 1800,
"merchant_reference": "order-10001",
"metadata": { "order_id": "10001" }
}'Show the payment details
Show bank_name, account_number, and account_name to your customer, with a countdown to expired_at.
Wait for the webhook
When the deposit is credited, Payinto sends virtual_account.transfer.received. Verify the signature, then match the data.virtual_account.merchant_reference, currency, and amount to your order.
Fall back to a status query
If you don't receive a webhook, read the virtual account's payments with GET /virtual-accounts/{id}/transactions.
Hosted Checkout
Use the Checkout SDK when you'd like Payinto to host the payment experience. It opens a secure popup on your site, takes card and bank transfer payments, and needs only your public key in the browser.