Skip to main content
Use this endpoint to move funds from one of your Shogun accounts to a recipient’s bank account. The API supports two transfer modes: intra-bank transfers between Payrep MFB accounts (instant, no interbank fees) and inter-bank transfers to any Nigerian bank via NIP (real-time interbank settlement). Before calling this endpoint you must run Name Enquiry — it returns the bvn and kyc values that are required fields here.

Endpoint

POST https://baasapi.payrepmfb.com/api/v1/transaction/transfer/api/funds_transfer

Authentication

Pass your bearer JWT in the Authorization header. Obtain a token from Generate Token.
Authorization: Bearer <access_token>

Request body

source_account_number
string
required
The Shogun account number to debit. Must be an active account belonging to your business with sufficient balance to cover the transfer amount.
source_account_name
string
required
Name of the source account holder. This appears on the debit record.
beneficiary_account_number
string
required
Account number of the recipient. For inter-bank transfers this is the account number at the destination bank.
beneficiary_account_name
string
required
Full name of the recipient as returned by Name Enquiry in data.account_name. Must match the registered name at the destination bank.
bank_code
string
required
Bank code of the recipient’s bank. Use 090823 for intra-bank (Payrep MFB) transfers. For inter-bank transfers use the recipient bank’s NIP code — retrieve the full list from Fetch Banks.
bank_name
string
Human-readable name of the recipient’s bank. Optional but recommended for your own records.
amount
string
required
Transfer amount in NGN formatted as a decimal string (for example, "5000.00"). Do not include currency symbols or commas. Minimum value is "1.00".
transfer_type
string
required
Transfer mode. Use intra for Payrep MFB-to-Payrep MFB transfers or inter for transfers to external Nigerian bank accounts via NIP.
reference_number
string
required
Your unique identifier for this transaction. Use this reference to query status via Transaction Status. Must be globally unique across all your transfers — the API rejects duplicate references.
remarks
string
Narration for the transaction. This text appears on the recipient’s bank statement. Use a value meaningful for reconciliation, such as an invoice or order identifier.
bvn
string
Bank Verification Number of the recipient, returned by Name Enquiry in data.bvn. Required for inter-bank transfers.
kyc
string
KYC level of the recipient, returned by Name Enquiry in data.kyc. Pass the value directly — do not hardcode it.

Request example

curl -X POST https://baasapi.payrepmfb.com/api/v1/transaction/transfer/api/funds_transfer \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "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": "25000.00",
    "transfer_type": "inter",
    "reference_number": "ACME-PAY-20260428-0042",
    "remarks": "Vendor payout — Invoice INV-2026-042",
    "bvn": "98765432101",
    "kyc": "3"
  }'

Responses

200 — Transfer initiated

{
  "status": true,
  "response_code": "00",
  "message": "Transfer initiated successfully",
  "data": {
    "transaction_id": "txn_a1b2c3d4e5f6",
    "reference_number": "ACME-PAY-20260428-0042",
    "amount": "25000.00",
    "transfer_type": "inter",
    "status": "SUCCESSFUL",
    "created_at": "2026-04-28T10:30:00Z"
  }
}

Error — Insufficient funds

{
  "status": false,
  "response_code": "51",
  "message": "Insufficient balance to complete this transfer.",
  "data": null
}

Error — Duplicate reference

{
  "status": false,
  "response_code": "50",
  "message": "A transaction with this reference number already exists.",
  "data": null
}

Error — Provider unavailable

{
  "status": false,
  "response_code": "80",
  "message": "Service temporarily unavailable. Please retry.",
  "data": null
}

Response fields

data.transaction_id
string
Shogun’s internal identifier for this transaction. Store this alongside your own reference_number for support queries.
data.reference_number
string
Your reference_number echoed back. Use this to query the final status via Transaction Status.
data.amount
string
Amount transferred in NGN.
data.transfer_type
string
intra or inter, echoed from your request.
data.status
string
Current status of the transfer. Possible values: SUCCESSFUL, PENDING, FAILED.
data.created_at
string
ISO 8601 timestamp of when the transfer was created.

Error codes

Response codeMeaning
00Success — transfer initiated
50Duplicate reference number — use a unique reference_number per transfer
51Insufficient balance on the source account
80Core banking provider temporarily unavailable — retry with backoff
83Provider rejected the transfer — check field values and retry
Use a unique reference_number for every transfer request. If you retry a failed request, generate a new reference number — reusing a reference that was partially processed may result in a duplicate transaction. Use the remarks field with a meaningful value (such as an invoice ID) to simplify reconciliation.