Bank payments

Let customers pay from a US checking or savings account by ACH debit.

Customers can pay by bank account on Checkout, invoice payment pages, Checkout elements and the billing portal. You can also enter a bank account under US bank account in New payment, or create the payment through the API.

To offer bank payments, go to Settings → Checkout and turn on US bank accounts (ACH) under Payment methods. If it’s unavailable, the option reads “Contact Bias to enable this payment method.”

Processing and settlement

A bank payment starts as Processing and becomes Succeeded once the debit settles, a few business days later. You receive payment.succeeded then. An invoice paid by bank stays Open until the payment succeeds.

A bank account payment in the Processing state

If the bank rejects the debit before it settles, the payment becomes Failed with a decline code such as insufficient_funds or account_closed, and you receive payment.failed. An invoice it was paying is owed again.

Bank payments can’t be authorized and captured later. To stop a payment that’s still processing, cancel it with the API. A processing payment can’t be refunded.

In a sandbox, the test account 000123456789 (routing number 110000000) succeeds right away, and pm_usba_processing stays Processing. See test payment methods for declines and returns.

Personal and business accounts

A bank account’s account_holder_type is individual (the default) or company. Debits from a company account are sent as corporate (CCD) entries. When checkout saves a bank account, the customer chooses Personal or Business under Account holder, and the form shows the matching authorization.

Debit authorization

Before Bias debits a saved bank account without the customer present, for a subscription renewal, an invoice charged automatically, or a payment you create, the customer must have authorized it. Bias records each authorization as a mandate: the exact text, when it was accepted, and how.

Checkout shows the authorization whenever it saves a bank account: in subscription and setup mode, and when a customer pays a subscription’s invoice. The customer accepts it by paying. For a personal account it reads:

By providing your bank account details, you authorize ACME Inc. to debit that account by ACH for payments you agree to, including subscription renewals, in the amounts and on the dates of your agreement. You can revoke this at any time by contacting ACME Inc. at billing@acme.com, allowing reasonable time before the next debit.

For a business account:

By providing your company’s bank account details, you confirm you may act for the account holder and authorize ACME Inc. to debit that account by ACH (CCD) for payments the account holder agrees to, including subscription renewals, in the amounts and on the dates of its agreement. This authorization lasts until revoked by contacting ACME Inc. at billing@acme.com, allowing reasonable time before the next debit.

The text uses your business name and the email under Customer support in Settings → Details. Checkout sessions expose it as mandate_text and company_mandate_text. If you build your own payment button, show it as described in custom forms.

To save a bank account through the API, send the customer’s authorization in mandate_data. Without authorization_text, Bias records its standard text above.

server.ts

const payment = await bias.payments.create({
    amount: 4900,
    customer: "cus_4fbCZ8xT2kQmWn9pYr3vD",
    payment_method: {
        us_bank_account: {
            account_number: "000123456789",
            routing_number: "110000000",
            account_type: "checking",
            account_holder_type: "company",
        },
        setup_future_usage: "off_session",
    },
    mandate_data: {
        customer_acceptance: {
            type: "online",
            ip_address: "203.0.113.24",
            user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 15_6) AppleWebKit/605.1.15",
        },
    },
});

Use type: "offline" for an authorization collected another way, such as in writing. For a bank account that’s already saved, record one with Create a mandate.

Bias emails the customer a copy of each authorization they accept. Leave Debit authorizations on in Settings → Customer emails: US federal law (Regulation E) requires this notice.

A payment that saved a bank account shows its Debit authorization in the payment’s details. On a subscription paid by bank, the Activity card shows Customer authorized ACH debits. Click it to see the authorization text, when and how it was accepted, and the customer’s IP address.

Returns

A bank can return a debit even after it succeeds, for example when the customer tells their bank they didn’t authorize it. Consumers can do this for up to 60 days after the debit.

When a succeeded payment is returned:

  • The payment stays Succeeded and its invoice stays paid. Its page shows Returned by the bank with the return code, and the payment’s ach_return is set.
  • Bias records a lost dispute for the returned amount and emails you. There’s nothing to respond to. See disputes.
  • The payment can’t be refunded.

If the return means the account can’t be debited again, for example because it’s closed or the debit was unauthorized, Bias deactivates the bank account and revokes its mandate, including every other saved copy of the same account. A subscription paid by that account fails at its next renewal. Returns for insufficient or uncollected funds leave the account active, and subscription retries try it again.

Refunds

A succeeded bank payment can be refunded from its page or the API, in full or in part, as described in refunds. A bank refund is Pending until it settles, then Succeeded.