Bulk Sub-Wallet Transfers
Fund multiple of your business's own issued (sub) wallets in a single request by uploading a CSV file.
- Endpoint:
POST /api/v1/transfer-requests/bulk/sub-wallet-transfer - Content-Type:
multipart/form-data
cURL Example
curl --location 'https://core-sandbox.payonus.com/api/v1/transfer-requests/bulk/sub-wallet-transfer' \
--header 'Authorization: Bearer xxxxxxxxxxxxxx' \
--form 'file=@"/Users/user/Downloads/bulk_sub_wallet_transfer_template.csv"' \
--form 'description="Payroll wallet top-up"' \
--form 'reference="ONUS-SUBWTRNF-BLK-20250101-001"' \
--form 'businessId="xxx-xxx-xxx"' \
--form 'walletId="xxx-xxx-xxx"' \
--form 'countryCode="NG"' \
--form 'currency="NGN"' \
--form 'notificationUrl=""'
Request Fields
The following multipart form fields are supported. Items marked as required must be provided.
reference(required): A unique reference for the bulk job for idempotency and reconciliation.businessId(required): Your business identifier (UUID). Must own every sub wallet referenced in the CSV.walletId(required): The ID of your own business wallet to debit. A business can hold multiple wallets, so this must always be specified explicitly — there is no automatic fallback.countryCode(required): ISO-2 country code, e.g.,NG.currency(required): ISO-3 currency code, e.g.,NGN. Must match the currency of every sub wallet referenced in the CSV.file(required): CSV file containing the list of sub-wallet transfers.description(optional): Description of the bulk transfer batch.notificationUrl(optional): Callback URL for notifications.
CSV File Format
Download the CSV template and populate it with your transfer rows:
- Download: bulk_sub_wallet_transfer_template.csv
Expected columns (header row):
WalletReference: The reference you assigned to the sub wallet when you created it. Identifies which of your own sub wallets receives the funds for that row.Amount: Transfer amount (base unit, e.g., 500 → 500 NGN).Email: Notification email for the row (optional per row).Narration: Per-row description or note for the transfer.
Every row funds a sub wallet owned by businessId, debited from the wallet identified by walletId. You can include as many rows as you like — wallet lookups are batched internally, so large files are processed efficiently. Do not remove the header row.
Response
The API will return the following information:
| Field | Type | Description |
|---|---|---|
| message | string | Success when the batch has been accepted and queued for processing |
Notes
- Idempotency: Use a distinct
referenceper bulk upload to prevent duplicates. - Each
WalletReferencemust belong tobusinessIdand must not have been deleted — if any row's reference can't be resolved, the entire batch is rejected (nothing is created). - Each sub wallet's currency must match the request
currency. - Validation: The request will fail if required form fields are missing or the CSV does not conform to the expected format.