pacs.008 โ FIToFICustomerCreditTransfer
Overviewโ
pacs.008 is the interbank credit transfer message in the ISO 20022 standard. It is sent between Financial Institutions (FIs) to move funds on behalf of a customer. This is the primary payment message flowing through clearing and settlement networks.
- Full name:
FIToFICustomerCreditTransferV10 - Namespace:
urn:iso:std:iso:20022:tech:xsd:pacs.008.001.10 - Direction: Debtor Bank โ (Intermediary Banks) โ Creditor Bank
- Triggered by: pain.001 processing at debtor bank
Where pacs.008 Sits in the Flowโ
Customer initiation (pain.001 / channel API)
-> Debtor bank validates and debits
-> Debtor bank sends pacs.008 off-us
-> Creditor bank receives and credits
-> Status/notifications follow (pacs.002, camt.054)
pacs.008 is normally an off-us message. For on-us routing, banks typically do internal ledger posting and do not need FI-to-FI transfer messaging.
Message Structureโ
pacs.008
โโโ GrpHdr (Group Header) โ 1..1
โ โโโ MsgId Unique message ID
โ โโโ CreDtTm Creation timestamp
โ โโโ NbOfTxs Number of transactions
โ โโโ SttlmInf Settlement Information
โ โ โโโ SttlmMtd Settlement method (INDA/INGA/COVE/CLRG)
โ โ โโโ SttlmAcct Settlement account (if applicable)
โ โโโ InstgAgt / InstdAgt Instructing / Instructed Agent
โ
โโโ CdtTrfTxInf (Credit Transfer) โ 1..n
โโโ PmtId
โ โโโ InstrId Instruction ID (assigned by sender)
โ โโโ EndToEndId End-to-End ID (from pain.001)
โ โโโ TxId Transaction ID (unique within chain)
โโโ IntrBkSttlmAmt Interbank Settlement Amount
โโโ IntrBkSttlmDt Interbank Settlement Date
โโโ SttlmPrty Settlement Priority (HIGH/NORM)
โโโ InstdAmt Original instructed amount
โโโ XchgRate Exchange rate (if FX involved)
โโโ ChrgBr Charge Bearer (DEBT/CRED/SHAR/SLEV)
โโโ Dbtr Debtor details
โโโ DbtrAcct Debtor account
โโโ DbtrAgt Debtor Agent (sending bank)
โโโ CdtrAgt Creditor Agent (receiving bank)
โโโ Cdtr Creditor details
โโโ CdtrAcct Creditor account
โโโ Purp Purpose of payment
โโโ RmtInf Remittance info (passed through)
Settlement Methods (SttlmMtd)โ
| Code | Name | Description |
|---|---|---|
INDA | Instructed Agent | Creditor bank settles via its account at debtor bank |
INGA | Instructing Agent | Debtor bank settles via its account at creditor bank |
COVE | Cover Method | Separate cover payment sent via correspondent bank |
CLRG | Clearing System | Settled through a central clearing system (e.g., NPP, HVPS) |
Charge Bearer (ChrgBr)โ
| Code | Meaning |
|---|---|
DEBT | All charges paid by debtor (sender) |
CRED | All charges paid by creditor (receiver) |
SHAR | Shared โ each party pays their own bank charges |
SLEV | Service Level determines charge allocation |
Payment ID Chainโ
Customer creates: EndToEndId = "CUS-REF-20240101-001"
Debtor Bank adds: InstrId = "DB-INSTR-001"
TxId = "TXID-UUID-001"
These IDs travel unchanged through:
pain.001 โ pacs.008 โ camt.054
โ pacs.002 (status)
โ pacs.004 (return)
pacs.008 in Multi-Hop / Cover Paymentsโ
Debtor Bank โโ[pacs.008]โโโบ Correspondent Bank โโ[pacs.008]โโโบ Creditor Bank
โโโโโโโโโโโโโโโโโโโ[pacs.009 Cover]โโโโโโโโโโโโโโโโโโโโโบ
In cover method (COVE), two parallel flows occur:
- Payment flow: pacs.008 carries payment details to creditor bank
- Cover flow: pacs.009 carries the actual funds via correspondent
Validation Checklistโ
-
MsgIdis globally unique -
NbOfTxsmatches actual count ofCdtTrfTxInf -
IntrBkSttlmDtis a valid business date -
EndToEndIdpreserved from original pain.001 - Creditor account is valid (format check)
- Sanctions screening passed
- Duplicate detection (same
TxIdnot processed twice) -
IntrBkSttlmAmtcurrency is supported
Operational Controlsโ
- Enforce deterministic routing before message build
- Persist immutable outbound event before network send
- Apply idempotent send semantics on retries/timeouts
- Capture full request/response audit trail for investigations
- Monitor pending acknowledgements with scheme-specific SLAs
Related Messagesโ
| Message | Relationship |
|---|---|
pain.001 | Upstream initiator |
pacs.002 | Payment status report (ACK/NACK/RJCT/ACCP) |
pacs.004 | Payment return (if creditor bank rejects) |
pacs.009 | Cover payment (FI-to-FI, no customer details) |
camt.054 | Account notification to creditor |
camt.053 | End-of-day statement |
Real-Time vs Batchโ
| Scenario | Notes |
|---|---|
| NPP (AU) | Single pacs.008 per transaction, sub-second processing |
| SWIFT | Batch or single, same-day or next-day settlement |
| RTGS | Single high-value, real-time gross settlement |
| ACH/DE | Batched, processed in clearing windows |
Java Spring Implementation Notesโ
@Component
public class Pacs008Builder {
public FIToFICustomerCreditTransferV10 build(PaymentOrder order) {
var msg = new FIToFICustomerCreditTransferV10();
// Group Header
var grpHdr = new GroupHeader93();
grpHdr.setMsgId(idGenerator.nextMsgId());
grpHdr.setCreDtTm(XMLGregorianCalendarUtil.now());
grpHdr.setNbOfTxs("1");
grpHdr.setSttlmInf(buildSettlementInfo(order));
msg.setGrpHdr(grpHdr);
// Transaction
var tx = new CreditTransferTransaction50();
tx.setPmtId(buildPaymentId(order));
tx.setIntrBkSttlmAmt(buildAmount(order));
tx.setDbtr(buildDebtor(order));
tx.setCdtr(buildCreditor(order));
tx.setRmtInf(buildRemittanceInfo(order));
msg.getCdtTrfTxInf().add(tx);
return msg;
}
}
Failure Scenariosโ
| Scenario | Response Message | Key Code |
|---|---|---|
| Creditor account not found | pacs.002 RJCT | AC01 |
| Duplicate transaction | pacs.002 RJCT | AM05 |
| Sanction match | pacs.002 RJCT | CH16 |
| Settlement failure | pacs.002 RJCT | AG01 |
| Creditor bank offline | pacs.002 RJCT | REAS |