Compose a pacs.008 FIToFICstmrCdtTrf message with correct GrpHdr (MsgId, CreDtTm, NbOfTxs, SttlmInf/CLRG), CdtTrfTxInf (InstrId, EndToEndId, IntrBkSttlmAmt, CdtrAgt/FinInstnId/ClrSysMmbId, Cdtr, CdtrAcct)
Submit the pacs.008 to your FedNow participant gateway (direct or sponsor-bank API) over HTTPS with idempotency header keyed on InstrId
Poll or receive the pacs.002 FIToFIPmtStsRpt; check TxInfAndSts/TxSts: ACSP (accepted, settlement pending), ACSC (accepted, settlement completed), or RJCT (rejected)
On RJCT parse StsRsnInf/Rsn/Cd (e.g., AM04 insufficient funds, RC01 invalid routing) and surface the structured reason to the caller
On ACSC mark the payment settled; store EndToEndId and IntrBkSttlmDt for reconciliation
If no pacs.002 arrives within the FedNow timeout window (~20 seconds), send a pacs.028 payment status request and await a second pacs.002
Known gotchas
FedNow requires BIC-format ClrSysMmbId for the creditor agent even though US banks use routing numbers — use the ABA-to-BIC mapping table provided by the Fed
The pacs.002 for a FedNow payment arrives within seconds but your listener must be up before you send; fire-and-poll is not reliable — use a webhook or persistent connection
InstrId must be unique per message within your participant; reusing it will cause a duplicate-detection rejection even if the prior payment failed
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