Skip to main content

Inbound Payments

An inbound payment is a credit transfer received by a bank on behalf of one of its customers โ€” money coming in to the bank from another financial institution. It is the counterpart to an outbound payment.


Inbound Payment Sources

SourceMessageTiming
NPP (domestic real-time)pacs.008 via NPPSub-second
BECS Direct Entry (batch credit)DE file via AusPayNetD+1
SWIFT / cross-borderMT103 / pacs.008D+0 to D+2
RTGS / HVCSMT202 / pacs.009Same-day
BPAYBatch fileD+1
On-us (internal)Internal instructionReal-time

Inbound Payment Processing โ€” End to End

Inbound pacs.008 / DE credit arrives at bank
โ”‚
โ–ผ
1. SCHEMA VALIDATION
- Message format correct?
- All mandatory fields present?
- Character encoding valid?
โ”‚
โ–ผ
2. DUPLICATE DETECTION
- Check MsgId, InstrId, EndToEndId, UETR
- If duplicate: reject with AM05 or log and skip
โ”‚
โ–ผ
3. BENEFICIARY LOOKUP
- Resolve BSB/account or PayID to customer record
- Account exists? Active? Type compatible?
- If not found: REJECT (AC01/AC04) or exception queue
โ”‚
โ–ผ
4. COMPLIANCE CHECKS (parallel)
โ”œโ”€โ”€ Sanctions screening (debtor, creditor, remittance info)
โ”œโ”€โ”€ AML / Transaction Monitoring
โ””โ”€โ”€ Fraud rules
โ”‚
โ”œโ”€โ”€ PASS โ†’ proceed
โ””โ”€โ”€ FAIL โ†’ HOLD for manual review (compliance queue)
โ”‚
โ–ผ
5. CREDIT HOLD ASSESSMENT
- Large amount triggers temporary hold?
- Structuring indicators?
- High-risk jurisdiction?
โ”‚
โ–ผ
6. CREDIT POSTING
- Debit settlement/nostro account
- Credit customer account
- Record with full reference chain
โ”‚
โ–ผ
7. CUSTOMER NOTIFICATION
- Send camt.054 (debit/credit notification)
- Push notification (mobile banking)
- Send pacs.002 acknowledgement back to sender

STP vs Exception Routing

Straight-Through Processing (STP)

An inbound payment is STP if it passes all automated checks without human intervention:

  • Schema valid โœ…
  • No duplicate โœ…
  • Beneficiary found and account active โœ…
  • No sanctions/AML hits โœ…
  • No credit hold triggers โœ…
  • Credit posts automatically โœ…

Target STP rate for mature payments systems: >95%

Exception / Manual Queue

Payments failing any automated check enter the exception queue for manual investigation:

Exception TypeTypical CauseResolution
Beneficiary not foundAccount closed, BSB changedReturn pacs.004 or contact sender
Duplicate detectedRetry without dedupConfirm duplicate; reject or hold
Sanctions hitName match on sanctions listCompliance team review โ€” hold or return
AML alertUnusual transaction patternAML analyst reviews within SLA
Invalid formatMalformed message fieldsReturn pacs.002 RJCT with FF01
Credit holdLarge amount, high-risk sourceCompliance approval required

Beneficiary Validation

Receiving banks validate the beneficiary's account details before crediting:

BSB/Account Validation

CheckValidation
BSB formatMust be 6 digits (xxx-xxx format)
BSB existenceBSB must be registered in the BSB Directory
Account existenceAccount must exist and be active at that BSB
Account typeMust be eligible to receive credits (not credit-only or restricted)
Currency matchPayment currency must match account currency (or FX conversion rules applied)
Name match (CoP)If CoP enabled: check beneficiary name matches account holder

PayID Lookup (NPP)

For NPP payments using PayID:

  1. Sender bank resolves PayID โ†’ BSB/account via NPPA PayID directory
  2. Resolution returns beneficiary name (shown to sender for CoP verification)
  3. Transaction routed to beneficiary bank using resolved BSB/account

Credit Hold Rules

Banks may temporarily hold an inbound credit before posting to the customer account:

TriggerTypical Hold DurationAction Required
Amount > threshold (e.g. >$1M)1โ€“4 hoursCompliance officer reviews
Source: high-risk jurisdiction1โ€“2 business daysAML team review
Sanctions name matchUntil resolvedCompliance + legal
Structuring indicators1โ€“2 business daysSAR filing assessment
Account under freeze orderIndefinitelyCourt order / legal team
Missing mandatory reference1โ€“4 hoursOperations traces funds

During a hold:

  • Customer funds are NOT available
  • Interest may or may not accrue (depending on policy)
  • Customer should be notified (if legally permitted)

camt.054 โ€” Credit Notification to Customer

Once the credit is posted, the bank sends the customer a camt.054 notification:

<BkToCstmrDbtCdtNtfctn>
<GrpHdr>
<MsgId>NTFN-2024-001</MsgId>
<CreDtTm>2024-01-15T14:23:00</CreDtTm>
</GrpHdr>
<Ntfctn>
<Acct>
<Id><Othr><Id>12345678</Id></Othr></Id>
</Acct>
<Ntry>
<CdtDbtInd>CRDT</CdtDbtInd>
<Amt Ccy="AUD">5000.00</Amt>
<BookgDt><Dt>2024-01-15</Dt></BookgDt>
<NtryDtls>
<TxDtls>
<Refs>
<EndToEndId>E2E-PAY-123456</EndToEndId>
</Refs>
<RmtInf>
<Ustrd>Invoice INV-2024-001 payment</Ustrd>
</RmtInf>
</TxDtls>
</NtryDtls>
</Ntry>
</Ntfctn>
</BkToCstmrDbtCdtNtfctn>

Engineering Patterns

Inbound Payment Handler

@Service
public class InboundPaymentProcessor {

public InboundResult processInbound(Pacs008Message message) {

// 1. Idempotency check
if (paymentRepository.existsByEndToEndId(message.getEndToEndId())) {
return InboundResult.duplicate(message.getEndToEndId());
}

// 2. Beneficiary lookup
CustomerAccount account = accountService
.findByBsbAndAccount(
message.getCreditorBsb(),
message.getCreditorAccount()
)
.orElseThrow(() -> new BeneficiaryNotFoundException(message));

// 3. Compliance โ€” run async but wait for result
ComplianceResult compliance = complianceService
.screenInbound(message);

if (compliance.requiresHold()) {
return holdForReview(message, account, compliance.getHoldReason());
}

if (compliance.isRejected()) {
return returnPayment(message, compliance.getReturnCode());
}

// 4. Credit posting
CreditResult credit = postingService.creditAccount(
account,
message.getAmount(),
message.getCurrency(),
buildPostingReference(message)
);

// 5. Notify customer
notificationService.sendCreditNotification(account, credit);

// 6. Send pacs.002 acknowledgement
pacs002Service.sendAccepted(message.getMsgId(), message.getEndToEndId());

return InboundResult.success(credit);
}
}

Interview Questions

Q: What is the difference between STP and exception processing for inbound payments?

STP (Straight-Through Processing) = all automated checks pass โ†’ payment credited without human intervention. Exception = one or more checks fails (compliance hit, account not found, format error) โ†’ payment enters a manual review queue. A bank's STP rate is a key operational KPI โ€” low STP means high operational cost and slower customer credit.

Q: When should a bank hold an inbound credit rather than post it immediately?

When: sanctions screening returns a match requiring analyst review; AML rules flag the transaction for investigation; the amount exceeds a policy threshold requiring authorisation; the account is under a legal freeze; or structuring indicators suggest the payment is part of a layering scheme. The payment is held in a suspense/holding account while under review.


๐Ÿ“–
Track Page Progress0 / 635 Read
Knowledge Base Completion0%