Hosted Accounts
A Hosted Account is an account created by a Merchant for one of their end customers. The merchant remains the legal owner of the account, but it operates on behalf of the customer.
Documentation IndexFetch the complete documentation index at: https://developer-docs.paga.com/llms.txt Use this file to discover all available pages before exploring further.
Hosted Account Operations
HTTP Basic Authentication
For the requests, you will need to supply authentication credentials, using the HTTP Basic authentication (HTTP basic authentication requires an encoded HTTP header). The authentication credentials are your public key and secret key. Almost all web frameworks will provide a mechanism for supplying HTTP basic authentication credentials per the standard HTTP basic authentication header. See the following articles below for more information
HTTP Basic Authentication (Wikipedia)
HTTP Authentication: Basic and Digest Access Authentication (Specification)
Test Base URL: https://beta-collect.paga.com/
Live Base URL: https://collect.paga.com/
1. Create Hosted Account
This endpoint allows a Merchant to create a Hosted (Delegate) Account on behalf of a customer.
| Request URL |
|---|
| https://collect.paga.com/hosted-accounts |
Request Parameter
Parameter | Type | Description | Required? |
|---|---|---|---|
referenceNumber | String | A unique reference number for this request. | Yes |
phoneNumber | String | The phone number of the customer. This must be provided if the email is not provided. | No |
accountName | String | The account name of the customer. | Yes |
firstName | String | The first name of the customer | Yes |
lastName | String | The last name of the customer | Yes |
iifiNumber | String | The customer's Bank verification Number (BVN) | No |
String | The email of your customer. This must be provided if the phoneNumber is not provided. | No | |
accountReference | String | This is a unique reference number provided by the Organization which identifies the persistent payment identifier. It should have a minimum length of 12 characters and a maximum length of 30 characters | Yes |
callbackUrl | String | A custom callback URL for the payment webhook notifications for this specific account to be sent to. If provided, requests are sent to this URL exactly as provided. This allows you to set custom query parameters to the URL which you will be provided during webhook notifications for this specific account. | No |
fundingDailyLimit | Float | The maximum amount that can be transferred to the Hosted account generated in a day. If an amount greater than the limit is transferred in a day, such transaction will be declined automatically by the senders bank. | |
fundingTransactionLimit | Float | The maximum amount that can be transferred to the Hosted account generated. If an amount greater than the limit is transferred, such transaction will be declined automatically by the senders bank | No |
autosweep.destination | String | Takes two values - "VIRTUAL_ACCOUNT" and "BANK | No |
autosweep.bankPublicId | String | If included, this is the public Id of the bank that you want deposits to be transferred directly to for every payment. You can get bank IDs HERE | No |
autosweep.accountNumber | String | This must be provided if creditBankId is included in the request payload. It is the bank account number of the bank that you want deposits to be transferred to. This must be a valid account number for the bank specified by creditBankId | No |
status | String | Indicates if an account is frozen or not. ACTIVE - unfrozen, DISABLED -frozen. When status=ACTIVE, account can receive funds and all operations are allowed but when status=DISABLED, the account is unable to receive funds and other operations are not allowed on it. | No |
Sample Request and Response
POST /hosted A HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
hash: hashed with SHA-512 algorithm of the appended params containing(referenceNumber + accountReference + iifiNumber + autoSweep.bankPublicId + autoSweep.destination + autoSweep.accountNumber + callbackUrl + hashkey)
{
"referenceNumber": "REF-100005550002",
"callbackUrl": "https://example.com/webhook",
"accountReference": "PAGA-255026-NO-AUTOSWEEP",
"accountName": "Test Hosted Account",
"phoneNumber": "08012345678",
"firstName": "Test",
"lastName": "Customer",
"email": "[email protected]",
"iifiNumber": "22222132329",
"fundingTransactionLimit": 500000.00,
"fundingDailyLimit": 2000000.00,
"status": "ACTIVE",
"autoSweep": {
"destination": "BANK",
"bankPublicId": "7131F94B-C0AC-43FB-BF6A-3407D27F1806",
"accountNumber": "0073141524"
}
}{
"referenceNumber": "REF-100220777702222222225550002",
"statusCode": "0",
"statusMessage": "success",
"accountNumber": "0750529406",
"accountReference": "PAGA-20002ww2026-NO-AUTOSWEEP",
"status": "ACTIVE",
"balance": 0.0,
"currency": "NGN"
}Response Parameter
Argument | Type | Description |
|---|---|---|
referenceNumber | String | The reference number that was provided in the request |
statusCode | String | The status of the operation. See Status Codes section for details |
statusMessage | String | A human readable status message |
accountNumber | String | The Hosted account number for your customer. |
accountReference | String | This is a unique reference number provided by the Organization which identifies the persistent payment identifier. It should have a minimum length of 12 characters and a maximum length of 30 characters |
status | String | Indicates if an account is frozen or not. ACTIVE - unfrozen, DISABLED -frozen. When status=ACTIVE, account can receive funds and all operations are allowed but when status=DISABLED, the account is unable to receive funds and other operations are not allowed on it. |
balance | String | The hosted account balance |
currency | String | The designated currency of the account- only NGN is currently supported. |
2. Get Hosted Account
A method to query the properties associated with an existing Hosted Account.
| Parameter | Type | Description | Required(Yes/No) |
|---|---|---|---|
| referenceNumber | String | The unique reference number representing the update persistent payment identifier request. | Yes |
| accountIdentifier | String | The accountIdentifier can be either the NUBAN or the accountReference the customer provided when creating the account | Yes |
Sample Request and Response
GET /hosted-accounts/accountIdentifier?referenceNumber=REF-100220022252221hgdsahvfgahjdhjf HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: "Basic RkUxRjlCN0YtQkJDRS00NkEwLTk2ODUtMERDQUU5M0FDMjIyOlBhc3N3b3JkMQ=="
hash: hashed with SHA-512 algorithm of the appended params containing(referenceNumber + accountIdentifier+ hashkey)
{
"referenceNumber": "REF-100220022252221hgdsahvfgahjdhjf",
"statusCode": "0",
"statusMessage": "success",
"accountNumber": "3859568112",
"accountReference": "PAGA-255222026-NO-AUTOSWEEP",
"status": "ACTIVE",
"balance": 0.0,
"currency": "NGN",
"accountName": "Adewale Merchant Bank",
"phoneNumber": "08012345678",
"firstName": "Adewale",
"lastName": "Osobu",
"email": "[email protected]",
"iifiNumber": "22222132329",
"fundingTransactionLimit": 500000.0,
"fundingDailyLimit": 2000000.0,
"callBackUrl": "https://example.com/webhook"
}Parameter | Type | Description |
|---|---|---|
referenceNumber | String | The same unique reference number provided in the request |
statusCode | String | Status code of the response. 0 indicates a successful response |
statusMessage | String | A human readable status message. |
accountNumber | String | The Hosted account number for your customer. |
accountReference | String | This is a unique reference number provided by the Organization which identifies the persistent account identifier. It should have a minimum length of 12 characters and a maximum length of 30 characters. |
status | String | Indicates if an account is frozen or not. ACTIVE - unfrozen, DISABLED -frozen. When status=ACTIVE, account can receive funds and all operations are allowed but when status=DISABLED, the account is unable to receive funds and other operations are not allowed on it. |
balance | String | The hosted account balance |
currency | String | The designated currency of the account- only NGN is currently supported. |
accountName | String | The account name of the customer. |
phoneNumber | String | The phone number of the customer. |
firstName | String | The firstName of the customer. |
lastName | String | The lastName of the customer |
String | The email of your customer. This must be provided if the phoneNumber is not provided. | |
iifiNumber | String | The customer's Bank verification Number (BVN) |
fundingDailyLimit | Float | The maximum amount that can be transferred to the Hosted account generated in a day. If an amount greater than the limit is transferred in a day, such transaction will be declined automatically by the senders bank. |
fundingTransactionLimit | Float | The maximum amount that can be transferred to the Hosted account generated. If an amount greater than the limit is transferred, such transaction will be declined automatically by the senders bank |
callbackUrl | String | A custom callback URL for the payment webhook notifications for this specific account to be sent to. |
3. Update Hosted Account
This endpoint allows for changing any of the Hosted Account properties except the accountNumber (NUBAN) and the accountReference properties which cannot be changed.
Parameters (account properties) other than referenceNumber and accountIdentifier are optional. Any property provided will be updated. Omitted properties will remain as they were.
The accountIdentifier can be either the NUBAN or the accountReference provided when creating the account.
Request Parameter
Parameter | Type | Description | Required? |
|---|---|---|---|
referenceNumber | String | A unique reference number for this request. | Yes |
phoneNumber | String | The phone number of the customer. This must be provided if the email is not provided. | No |
accountName | String | The account name of the customer. | Yes |
firstName | String | The first name of the customer | Yes |
lastName | String | The last name of the customer | Yes |
iifiNumber | String | The customer's Bank verification Number (BVN) | No |
String | The email of your customer. This must be provided if the phoneNumber is not provided. | No | |
accountReference | String | This is a unique reference number provided by the Organization which identifies the persistent payment identifier. It should have a minimum length of 12 characters and a maximum length of 30 characters | Yes |
callbackUrl | String | A custom callback URL for the payment webhook notifications for this specific account to be sent to. If provided, requests are sent to this URL exactly as provided. This allows you to set custom query parameters to the URL which you will be provided during webhook notifications for this specific account. | No |
fundingDailyLimit | Float | The maximum amount that can be transferred to the Hosted account generated in a day. If an amount greater than the limit is transferred in a day, such transaction will be declined automatically by the senders bank. | No |
fundingTransactionLimit | Float | The maximum amount that can be transferred to the Hosted account generated. If an amount greater than the limit is transferred, such transaction will be declined automatically by the senders bank | No |
autosweep.destination | String | Takes two values - "VIRTUAL_ACCOUNT" and "BANK | No |
autosweep.bankPublicId | String | If included, this is the public Id of the bank that you want deposits to be transferred directly to for every payment. You can get bank IDs HERE | No |
autosweep.accountNumber | String | This must be provided if creditBankId is included in the request payload. It is the bank account number of the bank that you want deposits to be transferred to. This must be a valid account number for the bank specified by creditBankId | No |
status | String | Indicates if an account is frozen or not. ACTIVE - unfrozen, DISABLED -frozen. When status=ACTIVE, account can receive funds and all operations are allowed but when status=DISABLED, the account is unable to receive funds and other operations are not allowed on it. | No |
Sample Request and Response
PUT /hosted-accounts/accountIdentifier HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: "Basic RkUxRjlCN0YtQkJDRS00NkEwLTk2ODUtMERDQUU5M0FDMjIyOlBhc3N3b3JkMQ=="
hash: hashed with SHA-512 algorithm of the appended params containing(referenceNumber + accountIdentifier + iifiNumber + autoSweep.destination + autoSweep.bankPublicId + autoSweep.accountNumber + callbackUrl + hashkey)
{
"referenceNumber": "REF-GET-20260413-002",
"accountReference": "PAGA-255222026-NO-AUTOSWEEP",
"accountName": "St Jones School",
"phoneNumber": "08010000009",
"firstName": "Segun",
"lastName": "Ednut",
"email": "[email protected]",
"iifiNumber": "22222132325",
"fundingTransactionLimit": 50000.0,
"fundingDailyLimit": 200000.0,
"callbackUrl": "https://webhook.site/d1210f15-894d-4b93-8b8c-d44f63f26ea3",
"autoSweep": {
"destination": "BANK",
"bankPublicId": "7131F94B-C0AC-43FB-BF6A-3407D27F1806",
"accountNumber": "0073141524"
},
"status": "ACTIVE"
}{
"referenceNumber": "REF-GET-20260413-002",
"statusCode": "0",
"statusMessage": "success",
"accountNumber": "0750529406",
"accountReference": "PAGA-20002ww2026-NO-AUTOSWEEP",
"status": "ACTIVE",
"balance": 194900.0,
"currency": "NGN",
"accountName": "St Jones School",
"phoneNumber": "08010000009",
"firstName": "Segun",
"lastName": "Ednut",
"email": "[email protected]",
"iifiNumber": "22222132325",
"fundingTransactionLimit": 50000.0,
"fundingDailyLimit": 200000.0,
"callBackUrl": "https://webhook.site/d1210f15-894d-4b93-8b8c-d44f63f26ea3"
}Response Parameter
Parameter | Type | Description |
|---|---|---|
referenceNumber | String | The same unique reference number provided in the request |
statusCode | String | Status code of the response. 0 indicates a successful response |
statusMessage | String | The status of the request, this should just be an |
phoneNumber | String | The phone number of the customer. This must be provided if the email is not provided. |
accountName | String | The account name of the customer. |
firstName | String | The first name of the customer |
lastName | String | The last name of the customer |
iifiNumber | String | The customer's Bank verification Number (BVN) |
String | The email of your customer. This must be provided if the phoneNumber is not provided. | |
accountReference | String | This is a unique reference number provided by the Organization which identifies the persistent payment identifier. It should have a minimum length of 12 characters and a maximum length of 30 characters |
callbackUrl | String | A custom callback URL for the payment webhook notifications for this specific account to be sent to. If provided, requests are sent to this URL exactly as provided. This allows you to set custom query parameters to the URL which you will be provided during webhook notifications for this specific account. |
fundingDailyLimit | Float | The maximum amount that can be transferred to the Hosted account generated in a day. If an amount greater than the limit is transferred in a day, such transaction will be declined automatically by the senders bank. |
fundingTransactionLimit | Float | The maximum amount that can be transferred to the Hosted account generated. If an amount greater than the limit is transferred, such transaction will be declined automatically by the senders bank |
status | String | Indicates if an account is frozen or not. ACTIVE - unfrozen, DISABLED -frozen. When status=ACTIVE, account can receive funds and all operations are allowed but when status=DISABLED, the account is unable to receive funds and other operations are not allowed on it. |
4. Hosted Account Charge(Withdrawal)
This endpoint allows merchant to charge a Hosted account. That is move funds from the Hosted Account to the merchants Account on Paga.
Request Parameter
| Argument | Type | Description | Required (Yes/No) |
|---|---|---|---|
| referenceNumber | String | The unique reference number representing the update persistent payment account request. | Yes |
| amount | String | The amount to be debited from the hosted account and moved to the merchant's position. | Yes |
| currency | String | The designated currency of the account- only NGN is currently supported. | Yes |
| narration | String | The description/remark attached to the transaction of the transaction. | No |
Sample Request and Response
POST /hosted-accounts/accountIdentifier/charge HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: "Basic RkUxRjlCN0YtQkJDRS00NkEwLTk2ODUtMERDQUU5M0FDMjIyOlBhc3N3b3JkMQ=="
hash: hashed with SHA-512 algorithm of the appended params containing(referenceNumber + amount + currency+ narration + hashkey)
{
"referenceNumber": "REF-20260414-003232363636631",
"amount": 1000.00,
"currency": "NGN",
"narration": "Hosted account Test charge"
}{
"referenceNumber": "REF-20260414-003232363636631",
"statusCode": "0",
"statusMessage": "success",
"transactionId": "MPVAT-P_20260610214236118_4577638_JX438_qznml",
"newBalance": 99000.0
}Response Parameter
Parameter | Type | Description |
|---|---|---|
referenceNumber | String | The same unique reference number provided in the request |
statusCode | String | Status code of the response. 0 indicates a successful response |
statusMessage | String | The status of the request, this should just be an |
transactionId | String | The unique transaction ID used to process the transaction |
newBalance | Float | The Hosted account balance after the charge/withdrawal |
5. Hosted Account Top Up
This endpoint allows a merchant fund a Hosted Account by moving funds from the merchant's position into the Hosted Account.
Request Parameter
| Argument | Type | Description | Required (Yes/No) |
|---|---|---|---|
| referenceNumber | String | The unique reference number representing the update persistent payment account request. | Yes |
| amount | String | The amount to be credited to the hosted account from the merchant's position. | Yes |
| currency | String | The designated currency of the account- only NGN is currently supported. | Yes |
| narration | String | The description/remark attached to the transaction of the transaction. | No |
Sample Request and Response
POST /hosted-accounts/accountIdentifier/topup HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: "Basic RkUxRjlCN0YtQkJDRS00NkEwLTk2ODUtMERDQUU5M0FDMjIyOlBhc3N3b3JkMQ=="
hash: hashed with SHA-512 algorithm of the appended params containing(referenceNumber + amount + currency+ narration + hashkey)
{
"referenceNumber": "REF-20262636630414-001",
"amount": 500.00,
"currency": "NGN",
"narration": "Hosted account top-up"
}{
"referenceNumber": "REF-20260414-003232363636631",
"statusCode": "0",
"statusMessage": "success",
"transactionId": "MPVAT-P_20260610214236118_4577638_JX438_qznml",
"newBalance": 99000.0
}Response Parameter
Parameter | Type | Description |
|---|---|---|
referenceNumber | String | The same unique reference number provided in the request |
statusCode | String | Status code of the response. 0 indicates a successful response |
statusMessage | String | The status of the request, this should just be an |
transactionId | String | The unique transaction ID used to process the transaction |
newBalance | Float | The Hosted account balance after topup is completed |
6. Hosted Account Transfer
This endpoint allows for transfer/movement of funds from one Hosted account to the other.
Request Parameter
| Parameter | Type | Description | Required (Yes/No) |
|---|---|---|---|
| referenceNumber | String | The unique reference number representing the update persistent payment account request. | Yes |
| sourceAccountIdentifier | String | This is the accountIdentifier of the Sender's Hosted Account. The accountIdentifier can be either the NUBAN or the accountReference of the customer provided when creating the account. | Yes |
| destinationAccountIdentifier | String | This is the accountIdentifier of the Receiver's Hosted Account. The accountIdentifier can be either the NUBAN or the accountReference of the customer provided when creating the account. | Yes |
| amount | String | The amount to be credited to the hosted account from the merchant's position. | Yes |
| currency | String | The designated currency of the account- only NGN is currently supported. | Yes |
| narration | String | The description/remark attached to the transaction of the transaction. | No |
Sample Request and Response
POST /hosted-accounts/transfer HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: "Basic RkUxRjlCN0YtQkJDRS00NkEwLTk2ODUtMERDQUU5M0FDMjIyOlBhc3N3b3JkMQ=="
hash: hashed with SHA-512 algorithm of the appended params containing(referenceNumber + sourceAccountIdentifier + destinationAccountIdentifier + amount + currency + narration + hashkey)
{
"referenceNumber": "REF-202160420-021212025555",
"sourceAccountIdentifier": "0750529406",
"destinationAccountIdentifier": "3859568112",
"amount": 1500.00,
"currency": "NGN",
"narration": "Transfer between hosted accounts"
}{
"referenceNumber": "REF-202160420-021212025555",
"statusCode": "0",
"statusMessage": "success",
"transactionId": "MPVAT-P_20260610230032541_4577650_SMQDM_qznml",
"source": {
"accountIdentifier": "0750529406",
"amount": 1500.0,
"newBalance": 96500.0
},
"destination": {
"accountIdentifier": "3859568112",
"amount": 1500.0,
"newBalance": 3000.0
}
}Response Parameter
Parameter | Type | Description |
|---|---|---|
referenceNumber | String | The same unique reference number provided in the request |
statusCode | String | Status code of the response. 0 indicates a successful response |
statusMessage | String | The status of the request, this should just be an |
transactionId | String | The unique transaction ID used to process the transaction |
source.accountIdentifier | String | This is the accountIdentifier of the Sender's Hosted Account. The accountIdentifier can be either the NUBAN or the accountReference of the customer provided when creating the account. |
source.amount | String | The amount to be debited from the sender's Hosted Account. |
source.newBalance | Float | The sender's Hosted account balance after the sender's account has been debited. |
destination.accountIdentifier | String | This is the accountIdentifier of the Receiver's Hosted Account. The accountIdentifier can be either the NUBAN or the accountReference of the customer provided when creating the account. |
destination.amount | String | The amount to be credited to the receiver's Hosted Account. |
destination.newBalance | Float | The receiver's Hosted account balance after the receiver's account has been credited. |
7. Hosted Account Balance
This endpoint allows you retrieve the balance on a hosted account.
Request Parameter
| Argument | Type | Description | Required (Yes/No) |
|---|---|---|---|
| referenceNumber | String | The unique reference number representing the update persistent payment account request. | Yes |
| accountIdentifier | String | The accountIdentifier can be either the NUBAN or the accountReference that was provided when creating the persistent payment account | Yes |
Sample Request and Response
POST /hosted-accounts/accountIdentifier/balance?referenceNumber=REF-100220022252221hgdsahvfgahjdhjf HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: "Basic RkUxRjlCN0YtQkJDRS00NkEwLTk2ODUtMERDQUU5M0FDMjIyOlBhc3N3b3JkMQ=="
hash: hashed with SHA-512 algorithm of the appended params containing(referenceNumber + accountIdentifier + hashkey){
"referenceNumber": "REF-BAL-12322456",
"statusCode": "0",
"statusMessage": "success",
"accountNumber": "0750529406",
"accountReference": "0750529406",
"balance": 98000.0,
"currency": "NGN",
"timeStamp": "2026-06-10T22:50:16"
}Response Parameter
Argument | Type | Description |
|---|---|---|
referenceNumber | String | The same unique reference number provided in the request |
statusCode | String | Status code of the response. 0 indicates a successful response |
statusMessage | String | The status of the request, this should just be an |
accountNumber | String | The Hosted account number for your customer. |
accountReference | String | This is a unique reference number provided by the Organization which identifies the persistent account identifier. It should have a minimum length of 12 characters and a maximum length of 30 characters. |
balance | Float | The receiver's Hosted account balance after the receiver's account has been credited. |
currency | String | The designated currency of the account- only NGN is currently supported. |
timeStamp | String | Timestamp in UTC indicating when the payment request action was performed |
8. Hosted Account History
Get history of all activities for a period between to give start and end dates. The period window should not exceed 1 month.
Request Parameter
| Argument | Type | Description | Required (Yes/No) |
|---|---|---|---|
| pageSize | Integer | Number of records per Paga | No |
| pageNumber | Integer | The Page Number to be displayed | No |
| accountIdentifier | String | The accountIdentifier can be either the NUBAN or the accountReference that was provided when creating the persistent payment account | Yes |
| startDateTimeUTC | String | A timestamp representing the start of the transaction history request. Range must be less than or equal to 3 months | Yes |
| endDateTimeUTC | String | A timestamp representing the end of the transaction history request. Range must be less than or equal to 3 months | Yes |
Sample Request and Response
POST /hosted-accounts/accountIdentifier/history?startDateTimeUTC=2026-06-08T00:00:00&endDateTimeUTC=2026-06-11T23:59:59&pageSize=20&pageNumber=0 HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
hash: hashed with SHA-512 algorithm of the appended params containing(accountIdentifier + startDateTime + endDateTime + hashkey)
{
"referenceNumber" : "12345",
"startDateTimeUTC" : "2021-01-13T19:15:22",
"endDateTimeUTC" : "2021-04-13T19:15:22"
}{
"referenceNumber": "9e339a1f-9ba3-4036-8756-cba6279f5ec1",
"statusCode": "0",
"statusMessage": "success",
"itemCount": 11,
"totalItems": 11,
"totalPages": 1,
"currentPage": 0,
"transactions": [
{
"transactionType": "CREDIT",
"amount": 1500.00,
"transactionDate": "2026-06-11T10:22:16.920",
"status": "SUCCESSFUL"
},
{
"transactionType": "CREDIT",
"amount": 900.00,
"transactionDate": "2026-06-11T10:15:29.337",
"status": "SUCCESSFUL"
},
{
"transactionType": "CREDIT",
"amount": 1000.00,
"transactionDate": "2026-06-11T09:25:46.167",
"status": "SUCCESSFUL"
},
{
"transactionType": "CREDIT",
"amount": 100000.00,
"transactionDate": "2026-06-11T09:13:57.860",
"status": "SUCCESSFUL"
},
{
"transactionType": "CREDIT",
"amount": 100000.00,
"transactionDate": "2026-06-11T09:13:57.860",
"status": "SUCCESSFUL"
},
{
"transactionType": "CREDIT",
"amount": 1500.00,
"transactionDate": "2026-06-10T23:00:32.540",
"status": "SUCCESSFUL"
},
{
"transactionType": "CREDIT",
"amount": 1500.00,
"transactionDate": "2026-06-10T22:33:41.143",
"status": "SUCCESSFUL"
},
{
"transactionType": "CREDIT",
"amount": 500.00,
"transactionDate": "2026-06-10T22:11:00.227",
"status": "SUCCESSFUL"
},
{
"transactionType": "CREDIT",
"amount": 1000.00,
"transactionDate": "2026-06-10T21:42:36.117",
"status": "SUCCESSFUL"
},
{
"transactionType": "CREDIT",
"amount": 100000.00,
"transactionDate": "2026-06-10T21:41:43.287",
"status": "SUCCESSFUL"
},
{
"transactionType": "CREDIT",
"amount": 100000.00,
"transactionDate": "2026-06-10T21:41:43.287",
"status": "SUCCESSFUL"
}
]
}Response Parameter
| Parameter | Type | Description |
|---|---|---|
| statusCode | String | The status of the operation. See Status Codes section for details |
| statusMessage | String | A human readable status message |
| itemCount | Integer | The number of actions carried out within in the specified start and end date |
| totalItems | Integer | The number of records returned |
| totalPages | Integer | The number of pages returned. |
| currentPage | Integer | The Page number being displayed |
| transactions | Array | An array representing all actions carried out within the time window |
| transactions[].transactionType | String | This indicates if the transaction is a "CREDIT" or "DEBIT" transaction. |
| transactions[].amount | Double | The amount requested or paid depending of the action carried out. |
| transactions[].datetimeUTC | String | Timestamp in UTC indicating when the transaction was performed |
| transactions.[].status | String | Status of the action performed. See documentation on different statuses |
Callback Sample
9.Hosted Account Funding Notification
This allows Paga to send to you deposit notifications that occur on a particular account. Execution of this service should trigger payment logic in your system and provide a response including success/fail result to Paga system.
Please take noteThe callback notification includes a hash parameter that is hashed using the pre-shared hash-key, so by verifying the hash, you can authenticate that the request came from us (as well as authenticating that the hashed parameters haven’t been tampered with).
Parameter | Type | Description |
|---|---|---|
statusCode | Number | Status code of the response. 0 indicates a successful response |
statusMessage | String | Human-readable description |
transactionReference | String | The referenceNumber of the transaction |
fundingTransactionReference | String | This represents the unique reference number of a transaction associated with funding a Hosted Account. |
fundingPaymentReference | String | The payment reference from the original transfer/payment into the Hosted Account. |
accountNumber | String | The Hosted account number for your customer. |
accountName | String | The name of the customer that made the transaction |
financialIdentificationNumber | String | The customer's Bank verification Number (BVN) |
amount | String | The total amount of the transaction |
clearingFeeAmount | String | The fee for receiving a payment into a Hosted Account. |
payerDetails.paymentReferenceNumber | String | This represents the unique reference number of a transaction associated with funding a Hosted Account. |
payerDetails.narration | String | Description provided when funding the account |
payerDetails.paymentMethod | String | This represents the payment method used to fund the Hosted account. |
payerDetails.payerName | String | This represents the name of the payer funding the Hosted account. |
payerDetails.payerBankName | String | This represents the bank name of the payer funding the persistent payment account for payments done via bank transfer. |
payerDetails.payerBankAccountNumber | String | This represents the bank account number of the payer funding the Hosted account for payments done via bank transfer. |
narration | String | Description provided when funding the account |
hash | String | The hash is formed as the SHA-512 hash consisting of the following parameters: (externalReferenceNumber + transactionReference+ transactionDate + amount + accountNumber + hashKey) |
transactionDate | String | Timestamp in UTC indicating when the Transaction was performed |
Sample Request and Response
{
"statusCode": "0",
"statusMessage": "success",
"transactionReference": null,
"fundingTransactionReference": "DFB-U_20260611091357861_4577679_9T94G_qznml",
"fundingPaymentReference": "IE51X91580508200876009",
"accountNumber": "0750529406",
"accountName": "Adewale Merchant Bank",
"financialIdentificationNumber": "22222132329",
"amount": 100000,
"clearingFeeAmount": null,
"payerDetails": {
"paymentReferenceNumber": "IE51X91580508200876009",
"narration": "Checkout Test",
"paymentMethod": "BANK_TRANSFER",
"payerName": null,
"payerBankName": "Access Bank",
"payerBankAccountNumber": null
},
"narration": "Checkout Test",
"hash": "4ae886566c6552b970a316479b0f378f910b8ade59832b17be004a4e49a90ce721cfe83e5f6acd96194c2d02f7e9457552af7e8bb3450f58fe3c1d0de0b249e2",
"transactionDate": "2026-06-11T08:13:57.86"
}{
"status":"SUCCESS",
}**Response
Parameter | Type | Description |
|---|---|---|
status | String | The status of the request, this should just be an |
10.Hosted Account Charge Notification
This notification is sent when a charge transaction occurs on the Hosted account.
Please take noteThe callback notification includes a hash parameter that is hashed using the pre-shared hash-key, so by verifying the hash, you can authenticate that the request came from us (as well as authenticating that the hashed parameters haven’t been tampered with).
Parameter | Type | Description |
|---|---|---|
event | String | This indicates the type of notification being sent |
notification_id | String | This is a unique identifier for each notification request sent. |
statusCode | Number | Status code of the response. 0 indicates a successful response |
statusMessage | String | Human-readable description |
externalReferenceNumber | String | The referenceNumber of the transaction |
transactionType | String | This indicates if the transaction is a "CREDIT" or "DEBIT" transaction. |
transactionDate | String | Timestamp in UTC indicating when the Transaction was performed |
accountReference | String | This is a unique reference number provided by the Organization which identifies the persistent account identifier. It should have a minimum length of 12 characters and a maximum length of 30 characters. |
totalDebitAmount | Float | The total amount debited from the Hosted Account. totalDebitAmount = amount + Fee |
fee | String | The fee for processing the charge request |
amount | String | The total amount credited to the merchant. |
accountNumber | String | The Hosted Account Number for your customer. |
hash | String | The hash is formed as the SHA-512 hash consisting of the following parameters: (externalReferenceNumber + transactionReference+ transactionDate + amount + accountNumber + hashKey) |
Sample Request and Response
{
"event": "HOSTED_ACCOUNT_CHARGE_COMPLETE",
"notificationId": "57c5a081-b609-4d2c-88d6-0af16b4b8a72",
"statusCode": "0",
"statusMessage": "SUCCESS",
"externalReferenceNumber": "REF-20260414-02203232363636631",
"transactionType": "DEBIT",
"transactionDate": "2026-06-11 09:25:46.167",
"accountReference": "0750529406",
"totalDebitAmount": 1000,
"fee": 0,
"amount": 1000,
"accountNumber": "0750529406",
"hash": "7f447d9fce0ae0350d4810a32da0c957152f9ca8990607167a2ed5aea5b6bbc1fc2b383a62ed95b2072c3078b82fe684742cc7f890d6635ecdca59b7b0337a46"
}{
"status":"SUCCESS",
}Response Parameter
Parameter | Type | Description |
|---|---|---|
status | String | The status of the request, this should just be an |
11.Hosted Account Top Up Notification
This notification is sent when top up transaction occurs on the Hosted account.
Please take noteThe callback notification includes a hash parameter that is hashed using the pre-shared hash-key, so by verifying the hash, you can authenticate that the request came from us (as well as authenticating that the hashed parameters haven’t been tampered with).
Parameter | Type | Description |
|---|---|---|
event | String | This indicates the type of notification being sent |
notification_id | String | This is a unique identifier for each notification request sent. |
statusCode | Number | Status code of the response. 0 indicates a successful response |
statusMessage | String | Human-readable description |
externalReferenceNumber | String | The referenceNumber of the transaction |
transactionType | String | This indicates if the transaction is a "CREDIT" or "DEBIT" transaction. |
transactionDate | String | Timestamp in UTC indicating when the Transaction was performed |
accountReference | String | This is a unique reference number provided by the Organization which identifies the persistent account identifier. It should have a minimum length of 12 characters and a maximum length of 30 characters. |
totalDebitAmount | Float | The total amount from the merchant's position. totalDebitAmount = amount + Fee |
fee | String | The fee for processing the top up request |
amount | String | The total amount credited into the hosted account. |
accountNumber | String | The Hosted Account Number for your customer. |
hash | String | The hash is formed as the SHA-512 hash consisting of the following parameters: (externalReferenceNumber + transactionReference+ transactionDate + amount + accountNumber + hashKey) |
Sample Request and Response
{
"event": "HOSTED_ACCOUNT_TOP_UP_COMPLETE",
"notificationId": "fe2b8d29-9cc2-47ee-8a83-8be601633b74",
"statusCode": "0",
"statusMessage": "SUCCESS",
"externalReferenceNumber": "REF-2026263663220414-001",
"transactionType": "CREDIT",
"transactionDate": "2026-06-11 10:15:29.337",
"accountReference": "0750529406",
"totalDebitAmount": 900,
"fee": 0,
"amount": 900,
"accountNumber": "0750529406",
"hash": "41217fb2081f137f6390c8971e5e6d5c4f6ccb744978780e1b39a04d3bc4b85c4ec1d1962298e6f99dd6991436d8322f39823c985a19c0a81ef3023525b98735"
}{
"status":"SUCCESS",
}Response Parameter
Parameter | Type | Description |
|---|---|---|
status | String | The status of the request, this should just be an |
12. Callback Hash Verification
All the callbacks includes a hash to verify the authenticity of the request:
hash: A SHA-512 HMAC signature of the request payload, computed by concatenating the values of the following fields: externalReferenceNumber, transactionReference, transactionDate, amount, accountNumber.
Verification Steps:
- Extract the values of transactionReference, accountNumber, and amount from the incoming payload.
- Append the pre-shared hashKey as the final value.
- Concatenate the values as a single string - (externalReferenceNumber + transactionReference+ transactionDate + amount + accountNumber + hashKey)
- Compute a SHA-512 hash of the concatenated string - SHA512(externalReferenceNumber + transactionReference+ transactionDate + amount + accountNumber + hashKey)
- Compare the result against the value of hash in the request payload received. If they match, the request is authentic.
