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
| Parameter | Type | Required | Description |
|---|---|---|---|
| clearingEncodedKey | string | Yes | Cheque clearing transaction ID |
| notes | string | No | Bounce 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
| Code | Description | Common Scenario |
|---|---|---|
| INSUFFICIENT_FUNDS | Insufficient funds | Most common reason (~70% of bounces) |
| ACCOUNT_CLOSED | Account closed | Account no longer active |
| SIGNATURE_MISMATCH | Signature mismatch | Signature doesn't match bank records |
| POST_DATED | Post-dated cheque | Presented before the date on cheque |
| STALE_CHEQUE | Stale cheque | Older than 6 months |
| STOPPED_BY_DRAWER | Stopped by drawer | Customer requested stop payment |
| REFER_TO_DRAWER | Refer to drawer | Contact account holder for more info |
| EFFECTS_NOT_CLEARED | Effects not cleared | Prior 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"
}
Related Operations
- Clear Cheque: Finalize successful clearing
- Cancel Cheque: User-initiated stop payment
- Get Uncleared Cheque: Query pending cheques
- Get All Cheque Clearing Requests: List all clearing requests
- Initiate Cheque Deposit: Create deposit that may bounce
- Initiate Cheque Withdrawal: Create withdrawal that may bounce
Best Practices
Bounce Processing
- Record bounce reasons accurately using standardized codes
- Apply bounce charges as per bank policy (typically ₦1,000-₦5,000)
- Notify customers immediately via SMS/email when cheque bounces
- Track bounce patterns for fraud detection and risk management
- Maintain bounce history for compliance and reporting
Customer Communication
- Immediate notification when bounce is recorded
- Explain bounce reason clearly to customer
- Provide bounce reference for dispute resolution
- Inform of bounce charges applied
- 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
- Report to credit bureaus if required by regulation
- Maintain bounce records for minimum 7 years
- Track serial bouncers for account restrictions
- Follow CBN guidelines on cheque bounce penalties
- Document bounce reasons for audit purposes