Build the Group Header (GrpHdr) block: populate MsgId with a unique identifier, CreDtTm with current UTC timestamp, NbOfTxs with transaction count, and SttlmInf with the settlement method (INDA, INGA, or CLRG depending on correspondent arrangement)
Build the Credit Transfer Transaction Information (CdtTrfTxInf) block: populate PmtId/EndToEndId with your unique reference, IntrBkSttlmAmt with the interbank settlement amount and currency, ChrgBr with the charge bearer instruction (DEBT, CRED, SHAR, or SLEV)
Populate Debtor (Dbtr) and DebtorAccount (DbtrAcct) with the originator's legal name and IBAN or account number; populate Creditor (Cdtr) and CreditorAccount (CdtrAcct) with the beneficiary's details
Include CreditorAgent (CdtrAgt) with the beneficiary bank's BIC/SWIFT code; for chains involving correspondent banks, include IntermediaryAgent1 (IntrmyAgt1) if required by your routing path
Validate the assembled XML against the pacs.008.001.08 (or current version) XSD schema before submission; schema validation errors cause rejection at the receiving FI without a business-level explanation
Known gotchas
The pacs.008 version in use varies by network and corridor; SWIFT gpi uses a specific subset of fields and requires the UETR (Unique End-to-end Transaction Reference) in the supplementary data — confirm which version your network requires
ChrgBr value SLEV means the charge bearer follows the service level agreement; using SLEV without a defined service level in SvcLvl causes processing failures at some correspondent banks
Amount precision rules differ by currency: JPY has zero decimal places, most others use two — encoding 100.00 JPY instead of 100 fails schema validation
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp