This guide walks you through the steps to support ACH bank deposits using the REST API — from generating deposit instructions to monitoring for the incoming transfer.Documentation Index
Fetch the complete documentation index at: https://developer.uphold.com/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
- The user has completed onboarding and has the required capabilities enabled.
Walkthrough
Check available rails
Call List Rails to verify ACH supports thedeposit feature before proceeding.
constraints field indicates that US rail deposits can only be credited to the user’s default USD account, regardless of the network used.
Select destination account
USD bank deposits can only be credited to the user’s default USD account.Find the default account
Call List default accounts to retrieve it.Create a new account
If the user has no default USD account, create one with Create account before proceeding.Generate deposit method
For US bank rails, the same account and routing number are shared across all networks (ACH, FedNow / RTP, and Wire), so the same deposit method is generated and can be used for any of these networks. Call Set up account deposit method with the target account id and the desired network. For subsequent calls, use Get account deposit method instead.network=fednow or network=wire to generate instructions branded for those networks instead. A successful response includes the bank details for the user to initiate the transfer.
The deposit method may initially return
status: processing while the details are being prepared. Call Get account deposit method to make sure the deposit method is ready (status: ok) before displaying instructions to the user.Monitor for the incoming transfer
Prefer webhooks for real-time updates, or fall back to polling if webhooks are not feasible.- Webhook events (recommended):
- core.transaction.created
status: processing→ bank transfer received, pending posting
- core.transaction.status-changed
status: completed→ funds settledstatus: failed→ irrecoverable error
- core.transaction.created
- Polling (fallback): Get transaction
Sample transaction
In a successful ACH bank deposit, the origin is represented as abank-address node. The destination is the user’s default USD account.
Notify the user
Display an in-app confirmation when the transaction iscompleted, and send an email if applicable.
You now support ACH bank transfer deposits via the REST API.