Funding
Before funding, the customer needs a Go Account and 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.
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)
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.
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, confirms the customer accepted the ACH termsbankId— 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
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.
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.
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