Create a Moov account for each party (your platform account is created during onboarding; create additional accounts via POST /accounts) with the required capabilities applied (e.g., transfers, send-funds).
Add a payment method to each account — for bank accounts POST a bank account object to /accounts/{accountID}/bank-accounts and complete micro-deposit or instant verification.
Retrieve the available payment method IDs for source and destination by calling GET /accounts/{accountID}/payment-methods.
Create a transfer by POSTing to /transfers with a JSON body specifying source (accountID and paymentMethodID), destination (accountID and paymentMethodID), amount (currency and value in minor units), and an idempotency key in the X-Idempotency-Key header.
Check the transfer status synchronously from the POST response or asynchronously by subscribing to Moov webhooks for transfer status changes.
Handle capability requirements — if an account lacks a required capability (e.g., send-funds), the transfer will fail with a clear error listing which capabilities need to be enabled.
Known gotchas
Moov uses a capability model — each account must have the relevant capabilities (send-funds, collect-funds, wallet, etc.) approved before transactions work; capability approval can require additional KYC/KYB data submission.
The idempotency key is critical and must be unique per logical transfer; the same key will always return the same transfer response, so generate it deterministically from your internal transfer record ID.
ACH transfers through Moov are subject to standard NACHA settlement windows; do not assume same-day settlement unless you have confirmed your account is enabled for Same Day ACH and the transfer is submitted within the cutoff window.
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