Sending an ACH Transfer
ACH is the dominant low-value transfer mechanism in the US, and Increase processes billions of dollars of ACH transfers each year. Creating an ACH Transfer sends an ACH transfer from your Increase Account.
Outbound credits and outbound debits
Inbound and outbound describe who originated a transfer. Transfers you originate are outbound, and Increase represents them as ACH Transfers. Transfers someone else originates against your Account Numbers are inbound, and are covered in receiving an ACH transfer.
Every ACH transfer is either a credit or a debit. An ACH credit pushes money to the receiving account. An ACH debit pulls money from the receiving account. The sign of the ACH Transfer’s amount determines which one you send: positive for a credit, negative for a debit.
| You are | Effect on your Account | |
|---|---|---|
| Credit | Paying the receiver | Funds are removed |
| Debit | Collecting from the payer | Funds are added |
This guide covers sending an ACH credit. Sending an ACH debit needs authorization from the counterparty and is subject to funds holds, so it has its own guide, debits and funds holds. The lifecycle, settlement, notifications of change, approvals, and reviews below apply to both.
ACH directions covers all four combinations of credit or debit and inbound or outbound.
Lifecycle
pending_submission | The transfer is pending submission to the Federal Reserve. |
pending_reviewing | The transfer is pending review by Increase. |
submitted | The transfer has been submitted to the Federal Reserve. |
returned | The transfer has been returned by the receiver. There will be a second Transaction for the return. |
rejected | The transfer was not submitted because Increase or our partner bank declined it. See Reviews and rejections. |
requires_attention | A rare status set when a transfer needs manual intervention from the Increase team. More about requires_attention. |
Optionally, transfers can be held for approval by another team member. In that case, you will see two additional statuses:
pending_approval | The transfer requires approval from a member of your team. |
canceled | The transfer has been canceled. |
Sending an ACH credit with Increase
Originating an ACH credit via the Increase API kicks off several steps involving you, Increase, the Federal Reserve, and the receiving bank.
- You make a
POST /ach_transferscall with the details of how much you’d like to send and data about the recipient. Your account needs an available balance that covers the transfer; in sandbox, you can fund an account with the inbound wire transfer simulation. - A Pending Transaction is immediately created to hold the full amount of the transfer. When the transfer settles, the Pending Transaction completes and a posted Transaction is created.
- When the file is submitted to the Federal Reserve, Increase updates the ACH Transfer object with its
submissiondetails. - When the Federal Reserve acknowledges the file (usually within fifteen minutes of file submission), Increase updates the ACH Transfer object with its
acknowledgementdetails. - The Federal Reserve forwards the transfer details to the receiving bank several times per day. The predicted settlement time is in
submission.expected_funds_settlement_at. There may be delays and processing time required at the receiving bank, however.
ACH transfers work based on a principle of assumed success. There’s no positive acknowledgement from a receiving bank confirming that they’ve received and allocated the transfer to one of their customers’ accounts.
Settlement
FedACH acknowledges Increase’s submission within minutes, but money doesn’t settle right away. Funds move between the originating and receiving banks’ settlement accounts at the Federal Reserve at fixed times during the day according to the FedACH processing schedule.
Since FedACH doesn’t confirm when a transfer settles, Increase calculates the expected settlement time from the submission window and reports it on the ACH Transfer as submission.expected_funds_settlement_at. The ACH Transfer therefore has no settled status. Settling doesn’t change the status; it stays submitted, and settlement is instead recorded in the settlement.settled_at field. Watch that field rather than waiting for a status change to know a transfer has settled.
A transfer always settles, even when the receiving bank returns it. After acknowledging the transfer, FedACH forwards it to the receiving bank, which may return it for reasons like an unrecognized account number, insufficient funds, or a closed account. If the return arrives before the expected settlement time, Increase still settles the transfer first and creates a second Transaction for the return to offset it. The two Transactions match what happened at the Federal Reserve, where money moved to the receiving bank’s account and then moved back.
The two Transactions don’t reference each other directly. Both reference the ACH Transfer: the original posting through source.ach_transfer_intention.transfer_id, and the return through source.ach_transfer_return.transfer_id. To correlate a return with the original posting, join on the ACH Transfer’s id.
To simulate a return in Sandbox, use the ACH Transfer return simulation. There’s no simulation for a transfer that submits but never settles, because once FedACH acknowledges a transfer, Increase settles it automatically at the expected settlement time.
Notifications of change
After a transfer settles, the receiving bank may send back a Notification of Change. This is a non-financial message saying that some of the details you sent are outdated and future transfers to this recipient should use corrected details. It usually accompanies a transfer that posted, but a receiving bank can also send one along with a return. Common examples are a routing number that changed after a bank merger, an account number that was reformatted, or an account that turned out to be a savings account rather than a checking account.
Increase records each notification on the ACH Transfer in the notifications_of_change array, ordered by when they were received. Notifications of change typically arrive in the days after a transfer settles, so the best way to be notified is to listen for the ach_transfer.updated webhook. You must use the corrected details for any future transfers to that recipient.
To simulate a notification of change in Sandbox, use the ACH Transfer notification of change simulation. If you have an Event Subscription configured, this also fires the ach_transfer.updated webhook.
Approvals
For transfers that require approval from another team member, the ACH Transfer is created with a status of pending_approval and a Pending Transaction is created to hold funds.
If the transfer is approved, the ACH Transfer object updates with its approval details and the status is changed to pending_submission. Once the transfer is submitted, the Pending Transaction status updates to complete and a new Transaction is created to remove funds from your Account. After this point, the transfer cannot be canceled.
If the transfer is not approved, the ACH Transfer object updates with its cancellation details and the status is changed to canceled. The Pending Transaction status updates to complete but no additional Transaction is created.
Reviews and rejections
A transfer is rejected when Increase or our partner bank decides not to submit it. This is rare and typically happens for suspected fraud. No Transaction is created on your Account. There are two ways this can happen, both of which route the transfer through pending_reviewing before it moves to pending_submission (approved) or rejected (not approved):
- An Increase operator pulls the transfer for review.
- The transfer would breach Increase’s limits with our partner bank, so the partner bank reviews it.
rejected is different from returned. A rejection happens before the transfer leaves Increase, while a return comes from the receiving bank after settlement. There’s no Sandbox simulation for rejected because it requires a reviewer at Increase or our partner bank to decline the transfer.