less than a minute read • Updated 13 minutes ago
Authorize.net ACH
Connect Foxy to Authorize.net ACH for secure payments.
- Countries
United States
- Features
- Auth Only & Delayed Capture
Authorize.net ACH lets you take payment directly from a customer's US bank account using Authorize.net's eCheck.Net service, which moves funds over the ACH network. It is a separate product from Authorize.net's card processing and has to be applied for separately, even if you already process cards through Authorize.net.
Supported country: United States. ACH is a US-only bank network, so this gateway processes USD from US bank accounts only.
Authorize.net ACH is by a wide margin the most-used ACH gateway on Foxy, so if you are choosing an ACH provider and have no other constraint, it is the best-trodden path.
Read this first: ACH transactions in Foxy stay pending. Authorize.net does not send Foxy any notification when an ACH payment settles or is returned, so Foxy has no way to learn the outcome. An ACH transaction is recorded as pending and stays pending — it will not move to approved or declined on its own. You reconcile settlement in your Authorize.net account or your bank, not in Foxy. This is a limitation at the gateway, not in Foxy. See ACH payments on Foxy for the full explanation and a suggested reconciliation routine.
2. Get your API credentials
Authorize.net ACH uses exactly the same API credentials as Authorize.net card processing — there is no separate eCheck credential.
If you already have Authorize.net card processing connected to Foxy, these are the same two values you used there — you can reuse them rather than generating a new Transaction Key. Generating a new Transaction Key invalidates the old one, which will break your existing card connection.
3. Add the payment method in Foxy
Authorize.net ACH is added alongside your card payment method, not instead of it. A payment method set can hold both, and customers pick between card and bank account at checkout.
The panel is split into a Live setup block and a Test setup block carrying the same two fields. (The Live heading reads "Live setup (inactive)" while the set has Use live credentials switched off — that is the current state of the set, not a different set of fields.)
What the customer fills in at checkout
For an Authorize.net ACH payment, Foxy collects:
Routing number — Notes: The nine-digit ABA routing number of the customer's bank.
Account number — Notes: The bank account number.
Name on account — Notes: The name on the bank account.
Account-ownership checkbox — Notes: See below.
There is no checking/savings selector on this gateway. The checkout does not ask, and Foxy does not send an account type to Authorize.net.
The checkout also shows a checkbox the customer has to tick, reading "I represent that I am the owner and/or authorized signer on the checking account above". The checkout will not submit without it, and there is no setting to turn it off. ACH is a pull from someone's bank account, and NACHA — the body that governs the ACH network — expects the account holder to have authorised the debit. See ACH payments on Foxy for more on these fields.
Testing
Foxy provides shared test credentials for Authorize.net ACH, so you can run test transactions without setting up your own sandbox account. Leave the Test setup fields as they are.
Those shared credentials exercise the integration only. If you need to test against your own account configuration, create an Authorize.net sandbox account at https://developer.authorize.net/hello_world/sandbox/ and put its API Login ID and Transaction Key into the Test setup fields instead.
You cannot test settlement
This is the important caveat. Authorize.net has told us that sandbox ACH transactions are always in a pending status and never reach a settled status. There is no way to make a test ACH payment settle, or to make one return.
That means:
You can confirm that your checkout accepts bank details and that Authorize.net accepts the transaction.
You cannot rehearse what happens on settlement, or on a return, before going live.
Because Foxy never receives a settlement notification from Authorize.net in the first place, this is a smaller loss than it sounds — a settled sandbox transaction would not change anything on the Foxy side either. Your reconciliation process is the thing you cannot dry-run, and you should plan it before your first live ACH order rather than after.
Test bank details
Authorize.net's sandbox accepts a structurally valid routing number and any account number. Foxy's own internal integration tests use routing number 125000024. If your sandbox rejects it, check Authorize.net's current eCheck API reference for the values they publish.
There are no test card numbers for this gateway — it does not touch cards at all.
Advanced features
No 3-D Secure, no client-side JavaScript. ACH has no equivalent of card authentication, and this gateway needs no gateway SDK or JavaScript on your checkout. It is a plain server-side integration, which means fewer moving parts and nothing to break when a script fails to load.
No card verification. There is no CSC or AVS equivalent for a bank account. AVS and CSC settings on your Authorize.net account do not apply to eCheck transactions.
The "Authorize only (no capture)" toggle works here. Authorize.net ACH is the one ACH gateway on Foxy where this toggle genuinely does what it says: turn it on and Foxy submits the transaction as an authorization to be captured later instead of an immediate debit, exactly like the equivalent setting on the Authorize.net card gateway. This is worth knowing precisely because it is the exception — every other ACH gateway on Foxy renders the same toggle but ignores it.
You cannot refund or void an Authorize.net ACH transaction through Foxy. This is worth reading twice, because the Foxy admin looks the same for every payment method. Refunds and voids are not implemented for this gateway: an attempt fails inside Foxy and returns a message to the effect that the gateway is not configured for that action. Nothing is sent to Authorize.net. If you need to return money to a customer who paid by ACH, you do it in your Authorize.net Merchant Interface or through your bank, and you record it in your own systems. Plan for this before you take your first live ACH order — it is not a bug and it is not something support can switch on.
Important notes and caveats
Transactions stay
pendingforever. Covered above and in ACH payments on Foxy. If you have a datafeed, thestatusnode on an ACH transaction will readpendingand no further datafeed will arrive to change it. Do not write fulfilment logic that waits forapprovedon an ACH order — it will never come.ACH is slow. Authorize.net states that eCheck funds arrive within seven days of submission, and that unlike card payments, eCheck transactions receive no immediate authorisation. Nothing about the payment is confirmed at the moment the customer checks out. If you ship on payment, decide explicitly whether you are willing to ship against an unsettled ACH payment.
eCheck.Net can be switched off on you. Authorize.net cancels eCheck services for businesses that fall into its prohibited categories. If your product mix changes, check that you are still eligible.
Reusing your card Transaction Key. If you regenerate your Authorize.net Transaction Key for any reason, update it in both the Authorize.net and Authorize.net ACH entries in your payment method set.
No refunds or voids from Foxy. Covered under Advanced features above, and it is the second thing about this gateway that surprises merchants after the pending status.
Troubleshooting
Every ACH transaction is declined immediately, while card transactions work. The most likely cause is that eCheck.Net is not actually approved and active on your Authorize.net account. Card credentials working proves nothing about eCheck — check the eCheck application status in Account > Marketplace in the Merchant Interface.
Credentials rejected. Confirm the API ID and Transaction Key are in the section matching the mode you are running in — Live setup if the payment method set has Use live credentials on, Test setup if it does not.
A transaction shows as pending days later. That is expected and permanent. See above.
"This gateway is not configured for this action" when refunding. Expected. Foxy has no refund or void path for Authorize.net ACH. Issue the refund in your Authorize.net Merchant Interface instead.
Response codes. Response Reason Codes and Response Reason Text is Authorize.net's authoritative reference. For anything about a specific eCheck transaction's fate — settled, returned, or held — Authorize.net can see detail that Foxy cannot.