Skip to main content

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.


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
Bank accounts are linked at the enterprise level

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.

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.

The ACH agreement is usually a one-time step per bank account

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-debit
  • amount — the deposit amount in USD cents (e.g., "1000" = $10.00)
  • checkboxAgreement — must be true, confirms the customer accepted the ACH terms
  • bankId — the ID of the linked bank account to debit from
  • goAccountId — the Go Account to deposit into
  • Returns a txId you can use to track the deposit

Example payload:

{
"amount": "1000",
"checkboxAgreement": true,
"bankId": "<bankAccountId>",
"goAccountId": "<goAccountId>"
}
ACH amounts use USD cents and do not settle instantly

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.

Do not credit a crypto deposit on first detection alone

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