Maintain a pending payments table keyed on InstrId and EndToEndId with the submission timestamp; set a timer for each unacknowledged payment (FedNow's expected acknowledgment window is roughly 20 seconds under normal conditions)
When the timer fires without a pacs.002 acknowledgment, compose a pacs.028 FIToFIPmtStsReq message referencing the original pacs.008 via OrgnlMsgId and OrgnlInstrId
Send the pacs.028 to the FedNow network via your participant bank's gateway using the same idempotency-safe submission channel as the original pacs.008
Await the responding pacs.002 triggered by the pacs.028 inquiry; parse TxSts as before — ACSC (settled), ACSP (still processing), RJCT (rejected), or PDNG (still pending at a downstream bank)
If pacs.002 returns ACSC, mark the original payment settled and do not re-submit; if RJCT, surface the reason code and allow the caller to correct and resubmit as a new payment with a new InstrId
If pacs.002 still returns PDNG or no response arrives after a second inquiry, escalate to your participant bank's operations team with the UETR for manual investigation
Known gotchas
Never re-submit the original pacs.008 as a new payment without first confirming via pacs.028 that the original was not settled — double-submission creates duplicate payments that are extremely difficult to recover without the receiving bank's cooperation
pacs.028 itself may not receive a response if there is a widespread network issue; implement exponential backoff with a human-alerting fallback rather than looping indefinitely
The pacs.028 timeout investigation window has implicit business day constraints — a pacs.028 sent for a payment that was submitted just before a FedNow operating-hours boundary may span days before resolution
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