Skip to main content
Use this endpoint to send funds from one of your Shogun accounts to a recipient’s bank account. Intra-bank transfers (within the Shogun network) settle instantly. Inter-bank transfers route via NIP and typically settle within minutes. If your organisation has an active approval policy, the transfer is queued for maker-checker review instead of executing immediately — you’ll receive a pending status in that case. Always perform a Name Enquiry before calling this endpoint to confirm the recipient’s account name. Endpoint
POST https://baasapi.payrepmfb.com/api/v1/transaction/transfer/web/funds_transfer
Sandbox
POST https://shogun-dev.xchangeboxng.com/api/v1/transaction/transfer/web/funds_transfer

Authentication

Include your Bearer token in the Authorization header:
Authorization: Bearer <access_token>
Obtain a token by logging in via User Login.

Request body

source_account_number
string
required
The 10-digit account number to debit. Must be an active account belonging to your business.
source_account_name
string
required
The registered name of the source account.
beneficiary_account_number
string
required
The 10-digit account number of the transfer recipient.
beneficiary_account_name
string
required
The account name of the recipient, as confirmed by a prior name enquiry.
bank_code
string
required
The bank code for the recipient’s bank. Use Fetch Banks to retrieve valid codes.
amount
string (decimal)
required
The amount to transfer in NGN, as a decimal string — for example, "5000.00".
narration
string
A short description or reference for the transfer (e.g., "Payment for Invoice #INV-001"). Appears in transaction records for both sender and recipient.
bank_name
string
The full name of the recipient’s bank. Maximum 255 characters. Recommended for record-keeping.
transfer_type
string
required
The routing type for this transfer. Use "intra" for transfers within the Shogun network or "inter" for transfers to external Nigerian banks via NIP.
otp
string
required
A one-time password for transaction authorisation. Generate an OTP via the Generate OTP endpoint before calling this one.

Example request

curl --request POST \
  --url https://baasapi.payrepmfb.com/api/v1/transaction/transfer/web/funds_transfer \
  --header 'Authorization: Bearer <access_token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "source_account_number": "7801234567",
    "source_account_name": "Acme Corp",
    "beneficiary_account_number": "0123456789",
    "beneficiary_account_name": "Jane Doe",
    "bank_code": "058",
    "bank_name": "Guaranty Trust Bank",
    "amount": "5000.00",
    "narration": "Payment for Invoice #INV-001",
    "transfer_type": "inter",
    "otp": "123456"
  }'

Response

A successful response returns the standard envelope with the transfer record in data.
status
boolean
true when the transfer was initiated successfully.
response_code
string
"00" on success.
message
string
Human-readable status message.
data
object
The initiated transfer details.
{
  "status": true,
  "response_code": "00",
  "message": "Transfer initiated successfully",
  "data": {
    "reference_number": "TRF-20260428-00987",
    "amount": "5000.00",
    "status": "success",
    "narration": "Payment for Invoice #INV-001",
    "created_at": "2026-04-28T11:05:00Z"
  }
}

Error codes

CodeMeaning
00Success
41Customer not found — your session token is invalid or expired
42Source account not found — the source_account_number does not belong to your business
60Customer not active — your business account must be activated
80Service unavailable — the bank provider is temporarily unreachable
83Provider error — the core banking system rejected the transfer (e.g., insufficient funds or daily limit exceeded)