Build with Payport
Everything you need to accept payments, integrate via API, and manage your payment operations β from first login to production deployment.
Overview
How Payport works end-to-end
Payport is a payment management platform that wraps Paystack to give you a clean API and a rich dashboard. You initialize a payment from your app, redirect your user to the Paystack checkout, and Payport handles the rest β verifying the transaction, recording it, and notifying your server via a callback.
| Step | Action | Who does it |
|---|---|---|
| 1 | Call Initialize with payment details | Your server |
| 2 | Redirect user to payment_url | Your app |
| 3 | User completes payment on Paystack | Payer |
| 4 | Payport receives Paystack webhook, fires callback to your URL | Payport |
| 5 | Verify or Requery to confirm status | Your server |
Logging In
Accessing your Payport dashboard
Open the Payport URL provided to you in a browser and sign in with your credentials. If you are accessing a demo environment, use the credentials below.
| Field | Value |
|---|---|
demo@beeport.com | |
| Password | password |
API Keys & Callback URL
Generating your credentials for API access
Every API request requires an API key. Keys are created inside the dashboard under Settings β API Keys (requires the manage-api-keys permission β Super Admin has this by default).
Generating a key
X-API-Key header or as a Bearer token.
Managing keys
The Your API Keys table lists all keys you have created. Each entry shows a key prefix (e.g. bpt_β¦), label, postback URL, creation date, and last used date. Click Revoke to permanently disable a key.
Authentication
How to send your API key with every request
All payment API endpoints require your API key. There are two equivalent methods β use whichever fits your stack:
X-API-Key: YOUR_API_KEY
Authorization: Bearer YOUR_API_KEY
https://your-payport-domain.com. All endpoints below are prefixed with /api.Initialize Payment
Create a new payment transaction and get a checkout URL
Creates a Paystack transaction and a local payment record. Returns a payment_url which you redirect the payer to for checkout.
Requires X-API-Key header. Body must be JSON.
Required fields
| Field | Type | Description |
|---|---|---|
matric_norequired | string | Student application or matric number |
studentnamerequired | string | Full name of the payer |
amountrequired | number | Amount in kobo β e.g. 10000 = β¦100.00 |
refnorequired | string | Your own receipt or reference number |
sessionrequired | string | Academic session (e.g. "2024/2025") |
programmerequired | string | Programme name |
emailrequired | string | Payer's email address (valid format) |
paymentforrequired | string | Description, e.g. "School fees" |
Optional fields
| Field | Description |
|---|---|
postback_urloptional | Override callback URL for this specific request |
phone_number, address, faculty, department, level, discipline | Additional payer / academic metadata |
programme_type, indigene_status, mode_of_admission, postal_state | Additional classification fields |
Example request
POST /api/payments/initialize HTTP/1.1 Host: your-payport-domain.com Content-Type: application/json X-API-Key: YOUR_API_KEY { "matric_no": "ATA1000110", "studentname": "Jane Doe", "amount": 10000, "refno": "RCP-2025-001", "session": "2024/2025", "programme": "B.Sc Computer Science", "email": "jane@example.com", "paymentfor": "School fees" }
Success response β 201 Created
{
"payment_url": "https://checkout.paystack.com/...",
"reference": "BPT-XXXXXXXXXX",
"access_code": "...",
"amount": 10000,
"receipt_number": "RCP-2025-001"
}
payment_url to complete the transaction. Save the reference β you will need it for verify and requery calls.Error responses
error and details.Verify Payment
Confirm a payment and mark it as paid
Checks the payment status with Paystack. If successful, marks the local payment as Paid and returns the amount and student identifier.
Pass one of: ?reference=, ?trxref=, or ?refno= as a query parameter.
Example request
GET /api/payment/verify-payment?reference=BPT-XXXXXXXXXX HTTP/1.1 Host: your-payport-domain.com X-API-Key: YOUR_API_KEY
Success response
{
"status": "success",
"message": "Payment verified successfully",
"data": {
"amount_paid": 10000.0,
"student": "ATA1000110"
}
}
{
"status": "failed",
"message": "Payment not confirmed.",
"data": {
"amount_paid": 0,
"student": "ATA1000110"
}
}
Error responses
reference, trxref, or refno.Requery Payment
Sync a payment after a webhook delay
Use Requery when a payment may have been completed on Paystack but the local record hasn't been updated yet (e.g. due to webhook delay). If Paystack confirms success, the payment is marked Paid.
Pass one of: ?reference=, ?trxref=, or ?refno= as a query parameter.
Example request
GET /api/payment/requery-payment?reference=BPT-XXXXXXXXXX HTTP/1.1 Host: your-payport-domain.com X-API-Key: YOUR_API_KEY
Responses
{ "message": "Payment already confirmed." }{ "message": "Payment pending or not confirmed." }Callback (Postback)
Receiving payment notifications on your server
When a payment is confirmed, Payport sends a POST request to your configured callback URL. Set it on your API key in Settings β API Keys, or pass postback_url per-request in the Initialize body.
?ref=BPT-XXXXXXXXXX to your postback URL. Your endpoint should return a 2xx response so Payport can log success.Payload fields
| Field | Type | Description |
|---|---|---|
payment_id | number | Internal Payport payment ID |
reference | string | Payport reference (BPT-β¦) β use to match in your system |
receipt_number | string | Your original refno from Initialize |
status | string | "Paid" when callback is fired after success |
amount / amount_paid | number | Amounts in kobo |
balance_due | number | Remaining balance (0 for full payment) |
payment_date | string | Human-readable date (e.g. "14-03-2025 02:30:45 PM") |
matric_no, studentname, email, programme | string | Payer details from Initialize |
paystack_verified | boolean | true when Paystack has confirmed |
paystack_status | string | "success" on confirmed payment |
metadata | object | Paystack metadata including responseCode and isSuccessful |
Example callback payload
{
"payment_id": 123,
"reference": "BPT-XXXXXXXXXX",
"receipt_number": "RCP-2025-001",
"status": "Paid",
"amount": 10000,
"amount_paid": 10000,
"balance_due": 0,
"payment_date": "14-03-2025 02:30:45 PM",
"matric_no": "ATA1000110",
"studentname": "Jane Doe",
"session": "2024/2025",
"programme": "B.Sc Computer Science",
"email": "jane@example.com",
"paymentfor": "School fees",
"paystack_verified": true,
"paystack_status": "success",
"metadata": {
"responseCode": "0000",
"isSuccessful": true,
"error": null
}
}
Dashboard Pages
What's available in your Payport dashboard
After logging in, the sidebar gives you access to the following pages based on your assigned permissions:
Profile & Settings
Managing your account details and password
Profile
Go to Settings β Profile to update your name and email. All changes are recorded in the audit log.
Password
Go to Settings β Password. Enter your current password, then the new password and its confirmation. Use a strong, unique password.
Two-Factor Authentication
Adding a second layer of security to your login
Go to Settings β Two-Factor Auth. Once enabled, you will need both your password and a time-based code from an authenticator app (e.g. Google Authenticator) to sign in.
To disable 2FA, go to the same page and confirm using your current 2FA code or recovery codes.
Audit Logs
A full record of who did what and when
Payport tracks every significant action β logins, API key creation and revocation, profile updates, 2FA changes, and file downloads.
| Where to find | What it shows |
|---|---|
| Dashboard (main page) | Recent activity across all users β quick overview of the last few actions |
| Users β [User name] | Full audit trail for that specific user: onboarding, API keys, profile changes, 2FA, downloads |