Create a payment recipient: POST /payment_initiation/recipient/create with 'name', 'iban' (for SEPA) or 'bacs' object (sort code + account number for UK), and optionally 'address'; receive a 'recipient_id'.
Create a payment: POST /payment_initiation/payment/create with 'recipient_id', 'reference' (narrative shown on bank statement, typically max 18 characters), 'amount.currency', and 'amount.value' as a float.
Create a Link token for the payment: POST /link/token/create including 'payment_initiation.payment_id' in the request; use this token to initialize Plaid Link on the frontend.
Launch Plaid Link with the token; the customer selects their bank and authorizes the payment via their bank's authentication flow (open banking redirect or in-app auth); on success, Link calls your onSuccess callback with a public_token (not needed for payment-only flows — the payment is already submitted).
Monitor payment status by calling GET /payment_initiation/payment/get with your 'payment_id'; poll or use webhooks ('PAYMENT_STATUS_UPDATE') to detect transitions through 'PAYMENT_STATUS_PROCESSING', 'PAYMENT_STATUS_EXECUTED', or failure states.
Reconcile by matching the 'payment_id' to your internal order; 'PAYMENT_STATUS_EXECUTED' means the bank has accepted the instruction, but actual settlement time varies by scheme (SEPA Instant = seconds, standard SEPA = 1 business day, BACS = 2 business days).
Known gotchas
Plaid Payment Initiation is currently available in the UK and Europe only — it is a separate product from Plaid's US ACH offerings and uses entirely different endpoints; do not conflate the two.
The 'reference' field has strict character and length limits enforced by individual banks, not just Plaid — some UK banks truncate to 12 characters; exceeding limits may cause the payment instruction to be rejected silently by the destination bank.
'PAYMENT_STATUS_EXECUTED' is not the same as settled funds in your account — the bank has dispatched the payment but settlement can still fail in rare cases (e.g., recipient account closed); implement a final reconciliation check against your bank statement.
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