Skip to content

ACH

ACH is the primary method of transferring funds in the U.S., and it supports an immense range of payment scenarios. Most payment engines wrap that complexity behind a simpler interface, useful until you need a less-common flow. GIB takes the opposite approach: direct access to the network, with guidance where it helps and no abstraction that hides what's happening. Raw ACH file downloads are always available.

GIB acts as the Originating Depository Financial Institution (ODFI) when you submit; we receive as the RDFI when entries arrive at one of your accounts or virtual accounts.

How ACH works

ACH is an asynchronous network that sends files containing batches of transfers from the originating depository financial institutions (ODFI) to the Federal Reserve, and ultimately onward to the receiving depository financial institutions (RDFI). The network is unique in that it enables both push and pull transfers.

When you submit an ACH, those transfers go through multiple state transitions. One of the most powerful features of GIB is our ability to notify you during each transition. This keeps you updated throughout the process and allows you to track the outcome of each transfer.

Those new to payments or the U.S. market are often surprised to learn that ACH does not offer an explicit acknowledgement of success. ACH takes an exception-based approach: you find out the payment is successful by not receiving an error. Such "errors" are called Returns.

When to use it

  • Push payments (you send money out): payroll, marketplace payouts, vendor payments, refunds.
  • Pull payments (you debit an external account): account funding, recurring subscription billing, invoice collection.
  • B2B with structured remittance: see CTX in the SEC code table below.

Don't use ACH for:

  • Internal transfers between two GIB accounts, use BOOK instead.
  • High-value transfers needing settlement finality, use Domestic Wire.
  • Cross-border, use International Wire.
  • Sub-real-time consumer push, ACH is not real-time even at same-day; use a wire if you need T+0 finality.

Bundling many end-customer payments

Fintechs that nest many small end-customer payments inside a single ACH credit (common for consumer remittance routed through a US-based liquidity provider or payment service provider, payroll bulk credits, and marketplace mass payouts) create a Subtransaction for each underlying customer payment, inbound or outbound. The bulk ACH is the only event on the rail; the Subtransactions are how the true senders and ultimate beneficiaries reach GIB's recordkeeping, monitoring, and OFAC screening. For International ACH (IAT), the same applies whenever the IAT batch represents many underlying consumer payments rather than one organization-to-organization transfer.

Operations

Operation Description API reference
Create ACH transaction (subledger) Create a single ACH Transaction directly (type: "ach") from your subledger system createTransaction
Parse ACH file Validate a NACHA or JSON file without creating Transactions; use before submitting publicTransactionParseACH
Create ACH transactions (file) Submit a NACHA or JSON file to create Transactions synchronously transactionCreateACH
Create ACH transactions (bulk) Submit a large file asynchronously; returns immediately, processes in background transactionCreateACHBulk
List transactions Retrieve and filter ACH Transactions getTransactions
Get transaction history Retrieve audit history for a Transaction getTransactionHistory
Get transaction files Retrieve the raw NACHA file and parsed JSON for a Transaction, sent or received getTransactionFiles
Originate a return Return an inbound entry you choose not to accept createTransactionReturn

Transactions cannot be canceled individually; cancel the parent Batch via updateBatch (set state to canceled) while it is in created state.

ACH files must be balanced

Every batch you send must be balanced. Each payment entry moves money to or from someone else's account; the batch also carries an offset entry against your own account at GIB, for the net of those entries. The offset is how GIB knows which of your accounts funds or receives the batch: the API uses it as the origin account for every entry in the batch. An offset entry is an entry whose receiver name is OFFSET.

GIB rejects the whole file when you submit it if any batch breaks these rules:

  • Use your own account. The offset's routing and account number must be an account at GIB configured on your user.
  • One offset per batch. In the JSON format, add an offset object to each batch and GIB generates the offset entry for you. See Create an ACH Transaction using JSON for an example. A batch that mixes debits and credits gets two offset entries from the offset object, one per side. In a NACHA file, a batch may likewise carry at most one debit and one credit offset entry, both on the same account.
  • At least one payment entry. A batch made only of offset entries is rejected.
  • Balanced amounts. The batch's debits, offset entries included, must equal its credits.
  • Rebalance after any change. If you remove entries from a batch, for example after an OFAC rejection, adjust the offset to the remaining entries.

Requests to createTransaction are balanced for you.

Common stages in the lifecycle of an ACH transfer

For the canonical state machine, see Transactions.

Initiation

Each created ACH transfer request incorporates mandatory details: account number, routing number, amount, and Standard Entry Class (SEC) code. The request may optionally include parameters such as the recipient's name and identifying number, though most financial institutions do not enforce that the recipient name on the transfer match the account holder name.

Batching

ACH transactions are batched and do not settle instantly. We acknowledge that this may be a confusing concept in a 24/7 world. As such, when initiating an ACH transfer request, we, as the originating depository financial institution (ODFI), consolidate all ACH transfers into a smaller set of NACHA files for submission.

Submission and clearing

Banks submit these batch files to the Federal Reserve at specified times each day. These times align with specific submission windows and affect when funds are available at the receiving depository financial institutions (RDFI). If a file is successfully submitted, the Federal Reserve will respond with an acknowledgment, and GIB publishes and creates webhooks with the submission status of every ACH file.

ACH transfers can be submitted with different settlement timing (Same Day or Standard). For specific cutoffs and processing windows, see the central Timing & cutoffs.

Funds transfer and funds availability

The actual transfer of funds occurs during the settlement process, during which the Federal Reserve finalizes their calculations on the amounts to be debited and credited to the bank.

For an outbound ACH credit entry (ACH push from your account at GIB), funds will be deducted from the originator's bank account immediately upon initiation. If there are insufficient funds on the originator's bank account, the transfer request will fail.

For an outbound ACH debit transfer (ACH pull initiated from your account at GIB), funds will be made available upon receipt, subject to any holds placed by the Bank.

For specific timing and availability details, see the central Timing & cutoffs.

Receiving ACH: identifying the sender

When an ACH entry arrives at one of your accounts or virtual accounts, the sender is identified by the fields below. A domestic ACH entry carries the receiver's account number only; the NACHA format has no field for the sender's account number.

NACHA field Record What it identifies Where to find it
Company Name Batch Header The sender, as known to the receiver origin_account_name
Company Identification Batch Header The sender's ID, assigned by the sender's bank Parsed file (companyIdentification)
Company Entry Description Batch Header Purpose of the payment, set by the sender reference, together with the entry's Identification Number
Originating DFI Identification Batch Header First 8 digits of the sender's bank routing number Parsed file (ODFIIdentification)
Payment Related Information Addenda 05 Free-text remittance from the sender payment_info
Trace Number Entry Detail Unique identifier of the entry trace_reference

Company Name is limited to 16 characters, so longer names arrive shortened. When a payment is sent through a payment processor or payroll provider, Company Name and Company Identification may identify that service rather than the payer.

Reconciling by sender. Company Identification paired with the Originating DFI routing number is the most stable way to recognize a repeat sender. Company Identification is assigned by the sender's bank, so it is unique only within that bank.

Identifying payers by account. To tell payers apart reliably, give each payer its own virtual account. The account that receives the payment then identifies who paid.

Getting the full entry. Every field received from the network is available with getTransactionFiles. In the dashboard, open the transaction under Transactions and select Show files. Both offer the raw NACHA file and a parsed JSON version. For full field definitions, see the NACHA ACH Developer Guide.

Returns

Returns occur when a payment instruction fails. There are a myriad of reasons why the payment might fail, and fortunately the reason is nearly always provided through the Return Code. You can see the list of Return Codes in the response section here.

Long-tail risk on consumer-authorization codes. Most ACH returns arrive within 2 banking days of the original entry. Codes related to consumer authorization (R05, R07, R10, R11, R37, R38, R51) can arrive up to 60 calendar days after the entry. The original entry will appear settled for weeks; the return can still hit months later. Build your customer-facing fund-availability promises, credit decisioning, and customer support flows accordingly.

Customers are right to be concerned about returns given that they may have already credited the beneficiary and recovery may be difficult to impossible. Note however that ACH push is generally the simpler approach as you are sending money from an account you control, meaning that, assuming you have funds, the most likely return reason relates to having incorrect account details for the beneficiary.

ACH pull is far more likely to result in failure and often occurs due to insufficient funds or invalid account details. Reducing the likelihood of returns is a complex topic. As such, if your funds flow relies upon ACH pulls, we suggest at minimum that you verify the counterparty using micro-deposits or a service like Plaid.

Please also review our Automated Returns documentation. For originating a return on an inbound entry yourself, see Returns.

Return codes

The following table covers the supported subset of ACH return codes for use with createTransactionReturn. Codes outside this list will be rejected.

Code Description Detail Time Frame
R01 Insufficient Funds The available and/or cash reserve balance is not sufficient to cover the dollar value of the debit Entry. 2 Banking Days
R02 Account Closed A previously active account has been closed by the customer or RDFI. 2 Banking Days
R03 No Account / Unable to Locate Account The account number structure is valid and it passes the check digit validation, but the account number does not correspond to the individual identified in the Entry, or the account number designated is not an existing account. 2 Banking Days
R04 Invalid Account Number Structure The account number structure is not valid. 2 Banking Days
R05 Unauthorized Consumer Debit using Corporate SEC Code CCD or CTX debit Entry was transmitted to a Consumer Account of the Receiver and was not authorized by the Receiver. 60 Calendar Days
R06 ODFI Requested Return The ODFI has requested that the RDFI return an Erroneous Entry. Any
R07 Customer Revoked Authorization The RDFI's customer (the Receiver) revoked the authorization previously provided to the Originator for this debit Entry. 60 Calendar Days
R08 Payment Stopped The Receiver has placed a stop payment order on this debit Entry. 2 Banking Days
R09 Uncollected Funds A sufficient ledger balance exists to satisfy the dollar value of the transaction, but the available balance is below the dollar value of the debit Entry. 2 Banking Days
R10 Originator not known and/or not authorized to Debit Receiver's Account The RDFI has been notified by the Receiver that the Entry is unauthorized, improper, ineligible, or part of an incomplete transaction. For ARC and BOC entries, the RDFI has been notified by the Receiver that the signature on the source document is not authentic, valid, or authorized. For POP Entries, the RDFI has been notified by the Receiver that the signature on the written authorization is not authentic, valid, or authorized. 60 Calendar Days
R11 Customer advises not within Authorization Terms The authorization to debit exists, but there is an error or defect in the payment such that the entry does not conform to the terms of the authorization. 60 Calendar Days
R12 Account Sold to Another DFI A financial institution received an Entry to an account that was sold to another financial institution. 2 Banking Days
R14 Representative Payee Deceased The representative payee is either deceased or unable to continue in that capacity. The beneficiary is not deceased. 2 Banking Days
R15 Beneficiary / Account Holder Deceased (1) The beneficiary is deceased; or (2) the account holder is deceased. 2 Banking Days
R16 Account Frozen / Returned per OFAC (1) Access to the account is restricted due to specific action taken by the RDFI or by legal action; or (2) OFAC has instructed the RDFI or Gateway to return the Entry. 2 Banking Days
R17 File Record Edit Criteria / Suspicious Entry with Invalid Account No. / Return of Improperly-Initiated Reversal (1) Field(s) cannot be processed by RDFI; or (2) the Entry contains an invalid DFI Account Number (account closed/no account/unable to locate account/invalid account number) and is believed by the RDFI to have been initiated under questionable circumstances. 2 Banking Days
R20 Non-Transaction Account ACH Entry to a non-Transaction Account. 2 Banking Days
R21 Invalid Company ID The Identification Number used in the Company Identification Field is not valid. 2 Banking Days
R22 Invalid Individual ID The Receiver has indicated to the RDFI that the number with which the Originator was identified is not correct. 2 Banking Days
R23 Receiver Refused Credit Any credit Entry that is refused by the Receiver may be returned by the RDFI. Any
R24 Duplicate Entry The RDFI has received what appears to be a duplicate Entry; i.e., the trace number, date, dollar amount and/or other data matches another transaction. 2 Banking Days
R29 Not Authorized by Corporate Customer The RDFI has been notified by the Receiver (Non-Consumer) that a specific Entry has not been authorized by the Receiver. 2 Banking Days
R31 Permissible Return (CCD and CTX only) The RDFI may return a CCD or CTX Entry that the ODFI agrees to accept. Any
R33 Return of XCK This Return Reason Code may only be used to return XCK Entries and is at the RDFI's sole discretion. 60 Calendar Days
R37 Source Document Presented The source document to which an ARC, BOC, or POP Entry relates has been presented for payment. 60 Calendar Days
R38 Stop Payment on Source Document The RDFI determines a stop payment order has been placed on the source document to which the ARC or BOC Entry relates. 60 Calendar Days
R39 Improper Source Document The RDFI determines that: (1) the source document used for an ARC, BOC, or POP Entry to its Receiver's account is improper, or (2) an ARC, BOC, or POP Entry and the source document to which the Entry relates have both been presented for payment and posted to the Receiver's account. 2 Banking Days
R51 Ineligible / Improper Item Related to RCK An RCK Entry is considered to be ineligible or improper. 60 Calendar Days
R52 Stop Payment on Item Related to RCK A stop payment order has been placed on the item to which the RCK Entry relates. 60 Calendar Days
R53 Item and RCK Presented for Payment In addition to an RCK Entry, the item to which the RCK Entry relates has also been presented for payment. 60 Calendar Days

Notifications of Change (NOC)

A Notification of Change is a non-monetary message sent by the receiving bank (RDFI) to notify GIB, as the originating bank (ODFI), that information used in a prior ACH entry is incorrect or outdated and should be corrected for future entries. Common corrections: routing number, account number, account type (checking vs. savings), individual name, individual identification number. NOCs frequently result from bank mergers or acquisitions that change routing or account numbers, but they also arise from routine data corrections by the RDFI.

NOCs are not optional to act on. Under the NACHA Operating Rules, your organization must update its records so that future ACH entries to the same receiver use the corrected information within six banking days of receipt of the NOC, or before initiating another entry to that receiver, whichever is later. Non-compliance can result in penalties under the NACHA Operating Rules, and continued non-compliance can lead to the RDFI refusing future entries to the affected receiver.

An NOC itself is informational, not a Return. The original entry was or will be processed normally; the NOC just tells you what to correct going forward.

You'll receive each NOC via webhook when it's posted to the API. Individual users can also opt in to in-app and email notifications via the GIB platform. The corrected information from the RDFI is included in the NOC payload.

Operational notes

A few GIB-specific behaviors to be aware of when integrating against ACH:

  • ACH origination confirmation. GIB confirms ACH origination via webhook.
  • OFAC handling on outbound batches. For OFAC hits, the entire ACH batch is rejected and the customer is notified. The customer must then remove the OFAC-hit transactions and rebalance the ACH file.
  • Addenda passthrough. Generally, neither GIB nor our correspondent bank changes addenda content in ACH files. Confirm passthrough of any required data during the penny-test phase to ensure your customer's needs are met.
  • Inbound files. Files are pushed to GIB throughout the day, and ACH returns received from RDFIs arrive in them. See Receiving ACH for the sender fields and for downloading the raw and parsed files.

Timing & cutoffs

GIB's ACH submission cutoffs, Federal Reserve processing windows, business-day rules, and inbound/return file timing are documented centrally on the Timing & cutoffs page.

SEC codes

A Standard Entry Class (SEC) code is a three-character code used to identify various properties of ACH transfers. GIB supports all SEC codes for inbound ACH transfers. However, for outbound ACH transfers initiated via our ACH transfer API, only certain SEC codes are supported by GIB. Be sure to include an entry_class_code when creating an ACH transfer.

SEC Description Outbound Inbound
ACK Payment Acknowledgment: Non-Monetary Entry initiated by an RDFI to provide an acknowledgment of receipt of a CCD request. No Yes
ARC Accounts Receivable: Single Entry debit initiated by an Originator to the Receiver's account based on an Eligible Source Document provided to the Originator by the Receiver (1) via the U.S. mail or delivery service, (2) at a dropbox location, or (3) in person for payment of a bill at a manned location. No Yes
ATX Financial EDI Acknowledgement: Non-Monetary Entry initiated by an RDFI to provide an acknowledgment of receipt of a CTX request. No Yes
BOC Back Office Conversion: Single Entry debit initiated by an Originator to the Receiver's account based on an Eligible Source Document provided to the Originator by the Receiver at the point of purchase or at a manned bill payment location for subsequent conversion during back office processing. No Yes
CCD Corporate Credit or Debit: Entry initiated by an Organization to transfer funds to or from an account of that Organization or another Organization. Yes Yes
CIE Customer Initiated Entry: Credit Entry initiated by or on behalf of the holder of a Consumer Account to transfer funds to the account of the Receiver. Yes Yes
CTX Corporate Trade Exchange: Entry initiated by an Organization to transfer funds to or from the account of that Organization or another Organization that permits the inclusion of payment-related remittance information in ANSI or UN/EDIFACT syntax. Yes Yes
IAT International ACH Transaction: Entry that is part of a payment transaction involving a Financial Agency's office that is not located in the territorial jurisdiction of the United States. An office of a Financial Agency is involved in the payment transaction if it (1) holds an account that is credited or debited as part of the payment transaction, (2) receives payment directly from a Person or makes payment directly to a Person as part of the payment transaction, or (3) serves as an intermediary in the settlement of any part of the payment transaction. Yes Yes
MTE Machine Transfer Entry: Entries initiated at an "Electronic terminal," as defined in Regulation E, to transfer funds to or from a Consumer Account maintained with an RDFI, i.e., an ATM cash deposit or withdrawal. No Yes
POP Point-of-Purchase Entry: Single Entry debit initiated by an Originator to the Receiver's account based on an Eligible Source Document provided to the Originator by the Receiver at the point of purchase or manned bill payment location to transfer funds from the Receiver's account. No Yes
POS Point-of-Sale Entry: Debit Entry initiated at an "Electronic terminal," as defined in Regulation E, to transfer funds from a Consumer Account of the Receiver to pay an obligation incurred in a point-of-sale transaction, or to effect a point-of-sale terminal cash withdrawal. Also an adjusting or other credit Entry related to such debit Entry, transfer of funds, or obligation. No Yes
PPD Prearranged Payment and Deposit: Entry initiated by an Organization based on a standing or a Single Entry authorization from a Receiver to transfer funds to or from a Consumer Account of the Receiver. Yes Yes
RCK Re-presented Check: Single Entry debit constituting a presentment notice of an item eligible. No Yes
SHR Shared Network Transaction: Debit Entry initiated at an "Electronic terminal," as defined in Regulation E, to transfer funds from a Consumer Account of the Receiver to pay an obligation incurred in a point-of-sale transaction, or to effect a point-of-sale terminal cash withdrawal. Also an adjusting or other credit Entry related to such debit Entry, transfer of funds, or obligation. SHR Entries are initiated in a shared network where the ODFI and RDFI have an agreement in addition to these Rules to process such Entries. No Yes
TEL Telephone-Initiated Entry: Debit initiated by an Originator pursuant to an oral authorization obtained over the telephone to transfer funds from a Consumer Account of the Receiver. Yes Yes
TRC Check Truncation Entry: Debit Entry initiated pursuant to a Check Truncation Program that permits the Truncation of a single Check drawn on the paying bank. No Yes
TRX Check Truncation Entries Exchange: Debit Entry initiated based on a Check Truncation Program that permits the Truncation of multiple Checks drawn on the same paying bank. No Yes
WEB Internet-Initiated/Mobile Entry: (1) a debit Entry initiated by an Originator to a Consumer Account of the Receiver based on (a) an authorization that is communicated, other than by an oral communication, from the Receiver to the Originator via the Internet or a Wireless Network, or (b) any form of authorization if the Receiver's instruction for the initiation of the individual debit Entry is designed by the Originator to be communicated, other than by an oral communication, to the Originator via a Wireless Network; or (2) a credit Entry initiated by or on behalf of the holder of a Consumer Account that is intended for the Consumer Account of a Receiver, regardless of whether the authorization of such Entry is communicated via the Internet or Wireless Network. Yes Yes
XCK Destroyed Check Entry: Debit Entry initiated with respect to an item eligible. No Yes

NACHA return-rate thresholds

NACHA enforces aggregate return-rate thresholds at the program level:

  • Administrative (R02, R03, R04, etc.): 3.0%
  • Unauthorized (R05, R07, R10, R11, R29, R37, R38, R51): 0.5%
  • Total: 15%

Approaching any threshold is an operational issue; GIB monitors program-wide rates and will alert you well before NACHA does. See Reconciliation for daily monitoring practices.

Submission paths: file vs. JSON

You can submit ACH in two formats:

  • NACHA file: a binary file conforming to the NACHA spec (PPD, CCD, CTX, etc.). Best for batch use cases or when migrating from an existing in-house ACH stack. See Batches & Files.
  • JSON: a structured request body. Best for one-off submissions, API-first integrations, and when you don't already have a NACHA file generator.

Both paths produce identical results downstream; pick whichever fits your stack.