Skip to main content

Bounce Cheque

Bounce (dishonor) a pending cheque that was returned by the paying bank.

Command: InitiateBounceChequeCommand

Overview

The Bounce Cheque operation marks a cheque as dishonored after the paying bank returns it. For deposits, this reduces uncleared amounts without crediting the balance. For withdrawals, this restores the previously deducted balance since the cheque was not honored.

Bounce vs. Cancel
  • Bounce: Bank-initiated return due to insufficient funds, account closed, etc.
  • Cancel: Customer-initiated stop payment or internal cancellation

Request

{
"clearingEncodedKey": "8a8087e27f2f63a2017f3b0c0c7b0005",
"notes": "Returned - insufficient funds"
}

Parameters

ParameterTypeRequiredDescription
clearingEncodedKeystringYesCheque clearing transaction ID
notesstringNoBounce reason and notes

Business Logic

1. Validation

  • Cheque clearing transaction must exist
  • Must be in PENDING state
  • Cannot bounce already CLEARED/BOUNCED/CANCELLED cheques

2. State Changes for DEPOSITS

  • State: PENDING → BOUNCED
  • Reduces UnclearedChequeAmount by deposit amount
  • Balance remains unchanged (was never credited)
  • Records bounce reason and timestamp

3. State Changes for WITHDRAWALS

  • State: PENDING → CANCELLED
  • Restores account balance by withdrawal amount
  • Records bounce reason
  • Customer notified of returned cheque

Common Bounce Reasons

CodeDescriptionCommon Scenario
INSUFFICIENT_FUNDSInsufficient fundsMost common reason (~70% of bounces)
ACCOUNT_CLOSEDAccount closedAccount no longer active
SIGNATURE_MISMATCHSignature mismatchSignature doesn't match bank records
POST_DATEDPost-dated chequePresented before the date on cheque
STALE_CHEQUEStale chequeOlder than 6 months
STOPPED_BY_DRAWERStopped by drawerCustomer requested stop payment
REFER_TO_DRAWERRefer to drawerContact account holder for more info
EFFECTS_NOT_CLEAREDEffects not clearedPrior cheque not yet cleared

Response (200 OK)

{
"encodedKey": "8a8087e27f2f63a2017f3b0c0c7b0005",
"chequeNumber": "CHQ-123456",
"accountNumber": "1001234567",
"amount": 50000.00,
"transactionType": "DEPOSIT",
"state": "BOUNCED",
"previousState": "PENDING",
"bouncedDate": "2025-12-31T16:00:00Z",
"bounceNotes": "Returned - insufficient funds",
"newBalance": 1000000.00,
"newUnclearedAmount": 0.00
}

Example: Bounce Deposit Cheque

const response = await fetch('https://api.banklingo.com/api/admin/teller/cheques/bounce', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
clearingEncodedKey: '8a8087e27f2f63a2017f3b0c0c7b0005',
notes: 'Returned by paying bank - insufficient funds (NIBSS code: 51)'
})
});

if (response.ok) {
const result = await response.json();
console.log('Cheque bounced successfully');
console.log(`Reason: ${result.bounceNotes}`);
console.log(`Uncleared amount reduced by: ₦${result.amount.toLocaleString()}`);

// Notify customer of bounced cheque
await notifyCustomer(result.accountNumber, {
type: 'CHEQUE_BOUNCED',
chequeNumber: result.chequeNumber,
amount: result.amount,
reason: result.bounceNotes
});
}

Example: Bounce Withdrawal (Restore Funds)

// Withdrawal was already deducted - bounce will restore the balance
const response = await fetch('https://api.banklingo.com/api/admin/teller/cheques/bounce', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
clearingEncodedKey: '9b9087e27f2f63a2017f3b0c0c7b0006',
notes: 'Cheque returned - signature mismatch'
})
});

if (response.ok) {
const result = await response.json();
console.log('Withdrawal cheque bounced - funds restored');
console.log(`Restored balance: ₦${result.newBalance.toLocaleString()}`);
}

Error Responses

400 Bad Request - Invalid State

{
"code": "INVALID_CHEQUE_STATE",
"message": "Cannot bounce cheque in state: CLEARED",
"field": "clearingEncodedKey"
}

404 Not Found

{
"code": "CHEQUE_CLEARING_NOT_FOUND",
"message": "Cheque clearing transaction not found",
"field": "clearingEncodedKey"
}

409 Conflict - Already Bounced

{
"code": "CHEQUE_ALREADY_BOUNCED",
"message": "Cheque has already been bounced",
"field": "clearingEncodedKey"
}

Best Practices

Bounce Processing

  1. Record bounce reasons accurately using standardized codes
  2. Apply bounce charges as per bank policy (typically ₦1,000-₦5,000)
  3. Notify customers immediately via SMS/email when cheque bounces
  4. Track bounce patterns for fraud detection and risk management
  5. Maintain bounce history for compliance and reporting

Customer Communication

  1. Immediate notification when bounce is recorded
  2. Explain bounce reason clearly to customer
  3. Provide bounce reference for dispute resolution
  4. Inform of bounce charges applied
  5. Suggest alternatives (e.g., bank transfer, cash deposit)

Deposit Bounces

For bounced deposit cheques:

  • Reduce uncleared amount immediately
  • Do NOT credit balance (never was credited)
  • Apply bounce charge to depositor's account
  • Return physical cheque to depositor
  • Flag account if repeated bounces occur

Withdrawal Bounces

For bounced withdrawal cheques:

  • Restore full balance that was deducted
  • Mark cheque as invalid in system
  • Notify issuer of dishonored cheque
  • Coordinate with recipient for alternative payment
  • Track dishonored cheques for reporting to credit bureaus (if applicable)

Compliance

  1. Report to credit bureaus if required by regulation
  2. Maintain bounce records for minimum 7 years
  3. Track serial bouncers for account restrictions
  4. Follow CBN guidelines on cheque bounce penalties
  5. Document bounce reasons for audit purposes