Funding
Before funding, the customer needs a Go Account. For fiat funding, they also need a linked bank account. Two ways to add money: pull USD from their bank (ACH) or receive Bitcoin/stablecoins to a deposit address.
Link Bank Account
Connect the customer's bank account so they can deposit and withdraw USD.
POST /api/v2/bankaccounts- Requires routing number, account number, and owner details
- The bank account is scoped to the enterprise via
enterpriseId
Once a bank account is linked and approved for an enterprise, it can be reused for ACH deposits and fiat withdrawals for that customer. It is not tied to a single funding attempt.
Creating the bank account record does not make it immediately usable for ACH or wires. The bank account may remain pending for some time, and ACH should only be attempted once verificationState is approved or verified.
You'll need their account number, routing number, and account type (checking/savings).
Fiat Funding (ACH)
Pull USD from the customer's linked bank account into the Go Account. This is a two-step process: first the customer must agree to the ACH terms, then you initiate the debit.
Get ACH Agreement
Before initiating a deposit, you must retrieve and display the ACH agreement to the customer. This only needs to be done once per bank account — subsequent deposits to the same bank account don't require it again.
GET /api/fiat/v1/transaction/ach-debit/agreementbankId— the ID of the linked bank accountamount— the expected amount per transaction over the ACH debit, in USD cents (informational only)
The response contains the full authorization language, including account information, authorization details, and the legal acknowledgment text. You must display this to the customer and collect their explicit consent before proceeding.
This is easy to miss in implementation. After a customer accepts the ACH agreement for a given bank account, you do not need to fetch and re-present it for every later deposit to that same bank account.
amount does not bind future depositsIt reflects the typical per-transaction size and is informational only. You can debit a different amount on the actual deposit call without re-fetching the agreement.
The agreement request and ACH debit request are forwarded independently. If your product needs a stricter audit trail for whether the agreement has already been shown for a bank account, store that acceptance state on your side.
Initiate ACH Deposit
Once the customer has agreed to the ACH terms, initiate the debit to pull funds from their bank into the Go Account.
POST /api/fiat/v1/transaction/ach-debitamount— the deposit amount in USD cents (e.g.,"1000"= $10.00)checkboxAgreement— must betrue. Once the customer has accepted the agreement for a bank account, you can sendtrueon every subsequent deposit for that same bank account without re-promptingbankId— the ID of the linked bank account to debit fromgoAccountId— the Go Account to deposit into- Returns a
txIdyou can use to track the deposit
ACH debit requests that omit amount, bankId, goAccountId, or checkboxAgreement: true are rejected before they are forwarded, so it is worth validating those fields in your own request builder as well.
Example payload:
{
"amount": "1000",
"checkboxAgreement": true,
"bankId": "<bankAccountId>",
"goAccountId": "<goAccountId>"
}
An amount of "1000" means $10.00, not $1,000. After the debit is initiated, funds typically settle in 1-3 business days, so you should not treat the deposit as immediately available.
Settlement takes 1-3 business days via partner banks.
Track the Deposit
The txId returned by the debit call identifies the transaction. Once settlement is in progress, the movement appears as a wallet transfer on the destination Go Account's wallet.
GET /api/v2/{coin}/wallet/{walletId}/transfer— poll this to check the state of the deposit- All wallet movements (ACH deposits, crypto receives, internal transfers) are surfaced through the same transfer resource
Because ACH settles in 1-3 business days, the corresponding transfer may not be visible immediately after initiating the debit.
Crypto Funding (Bitcoin & Stablecoins)
Generate a deposit address for the customer. They send crypto from any external wallet.
An address receiving a transaction does not mean the funds are final yet. Wait for the confirmation threshold you require before marking the deposit as available to the customer.
Address generation can briefly fail right after Go Account creation while the wallet finishes initializing. Retrying for a short period is expected behavior for a brand-new account.
We recommend waiting for at least 1 confirmation before crediting the user. Reach out for supported stablecoins and other assets.
Putting It Together
Next Steps
- Conversions — Buy or sell Bitcoin
- Withdrawals — Send funds out