Overview of ACH

Learn about ACH Payments and review example ACH files.

ACH Network is the National Automated Clearing House (ACH) for electronic funds transfers. It processes financial transactions for consumers, businesses, and federal, state, and local governments. ACH processes large volumes of credit and debit transactions in batches.

ACH credit transfers include direct deposit for payroll, Social Security and other benefit payments, tax refunds, and vendor payments. ACH direct debit transfers include consumer payments on insurance premiums, mortgage loans, and other kinds of bills.

The rules and regulations that govern the ACH network are established by National Automated Clearing House Association (NACHA).

Request to enable at TabaPay Support or [email protected].

How ACH Payments Work

For each ACH payment from a payor's bank account to a payee's bank account, there are effectively two ACH transactions created and transmitted, namely an ACH Debit transaction and an ACH Credit transaction. In the case of a payor and payee having an account at the same financial institution (FI), there is only one ACH transaction, which is often called an "on-us" transaction.

The payee's sending institution creates, batches, and transmits an ACH Debit transaction to the payor's receiving institution. The ACH Debit transaction instructs the receiving institution to withdraw and transmit the funds from the payor's bank account to the sending institution.

The receiving institution must send the return to the sending institution by the end of the following business day if it is unable to debit the funds from the payor's account. For example, if the account was not found, the account was closed, or the account was frozen.

For an ACH Debit transaction, the sending institution may be a third-party bank, rather than the payee's bank.


Same Day vs Next Day

There are two types of ACH settlements.

ACH debits and credits are transactions that are created, batched, and transmitted typically by way of a financial institution's connection to the ACH Network.

The sending bank (ODFI) submits the batch to the receiving bank (RDFI). When the receiving bank receives the transaction, it has until the end of the next business day to send a rejection to the ODFI. If no return is received by the morning of the third business day, the transaction is considered successful.

API Integration

For how ACH API integration works, refer ACH via API. For more details on general file based integration open the accordion.

ACH File

Refer to ACH File Overview by NACHA to understand ACH file formatting.

File Details

File sharing details will be provided to the client

File Name and Type Details
**Input File Name** yyyymmdd\_ISO\_MID\_ACHInput\_N\_v2-5.csv Sent to TabaPay
**Output File Name** yyyymmdd\_ISO\_MID\_ACHOutput.csv Received from TabaPay
**Processed File Name** yyyymmdd\_ISO\_MID\_ACHProcessed\_A.csv Received from TabaPay
  • yyyymmdd=file date
  • N=sequence number (1..n) if multiple files per cycle used
  • A=file modifier (A..Z)
  • For ISO, do not use the MID
  • Comma separator for each field

Note: The Processed File Name is not a final status or final completed file.

Input files

File based input file generation, refer to ACH via Batch File Exchange. For ACH API transactions, refer to ACH via API.

Cut-off times:

ACH Input TypeSame DayNext Day
File based7:00 AM PT5:30 PM PT
API*12:00 PM PT5:30 PM PT

*Files are still processed with ACH API initiated by Create Transaction API.

🏦

ACH Cut-Off Times Vary with Sponsor Banks

Depending on your sponsor bank, your ACH File Based Same Day cut-off time may vary between 7 AM PT or 12 PM PT. Contact TabaPay Support, or email [email protected].

  • File cut-off missed will be moved to next window
  • Confirmation of processing email to merchant

TabaPay Processed Files, Output Files, Return Files:

You/merchant/client picks up Processed files, and Output files, and Return files in the file sharing tool 'Outbox'.

  • Processed file delivered within minutes of ACH files being processed by bank; One file for each merchant batch.
  • Output file delivered next business day; same format as Processed file - with Trace ID and processed time from bank

Guidelines

  • All files received prior to same day cut-off are processed as same day, otherwise processed as next day.
  • ISO+MID assigned by TabaPay.
  • CompanyName, CompanyID assigned by TabaPay.
  • IIN must be unique by CompanyName, CompanyID as traceIDs and returns provided by IIN. For Person-to-Person WEB credit Entries, this field is required and contains the name of the consumer Originator. For WEB debit Entries, this field is optional, and is used at the discretion of the Originator.
  • Offset account is always merchant's DDA at ODFI. Option to include offset records (default is no offset).

Explanation for each file

There are 4 files associated with ACH.

Generated by the you the merchant/client and contains the transaction requests.

SFTP Push

TabaPay pushes ACH files via SFTP. Security options can include:

  • Merchant whitelists TabaPay IP
  • SFTP ID and Password
  • TabaPay public key for SFTP security (ID or ID+PW)
  • File encryption using Merchant public PGP key

ACH Request

Refer to ACH API for fields in the API request. View the following file format option for ACH file requests, or view a NACHA file format.

For file based format refer to ACH File Exchange


ACH Response

As a response, you will receive the ACH Processed file after the files are processed by the bank. This is not a final status.

Response and Processed File Format

ISO

Assigned by TabaPay

MID

Assigned by TabaPay

Entry Type

CCD, PPD, Web

3 alpha

Status

Output file: Complete, Error. Processed file: Accepted or Rejected

See Response Codes

Result

0, Response Code

See Response Codes

Same Day or Next Day

S, N

1 alpha

Same Day must be in by cutoff time or converts to next day

Processed date

mm-dd-yyyy

Settlement date

mm-dd-yyyy

Amount

########.##

999999.99

2 decimal places

IIN

abcdefghijklmnop

15 alpha-numeric

No commas, no blanks. No symbols

Trace ID

################

15 numeric

Output file only - from bank

First name

doe

22 alpha-numeric combined First Name and Last Name

No commas, blanks allowed.  No symbols 

Last name

doe

No commas, blanks allowed.  No symbols 

Account type

C/S/L/BC/BS/G

Up to 2 Alphabet (C, S, L, G, BC, BS)

Checking(C), Savings(S), Loan (L) Business Checking (BC), Business Savings (BS) General Ledger (G)

RTN

#########

Exactly 9 digits; must have checksum

Destination Bank Routing Number

Account

###############

4-17 numeric

Destination Bank account number

Credit-Debit

C

1 alpha C, D

Credit or Debit (C or D)

Fee

##.##

4 numeric with decimal (signed)

##.##

Message

Processed file contains a descriptive reason of any Rejected entries

ACH Response File Sample

To zoom in for smaller table values, pinch out on your trackpad. For an Apple Mac, type CMD and the plus sign (⌘ and +). For PC, use CTRL and +.

ISO

MID

Status

Result

ACH Type

Processed date

Settlement date

Entry Type

Entry Description

Credit-Debit

Amount

Trace ID

IIN

First name

Last name

Account Type

RTN

Account

Fee

1000

1

Complete

0

N

03-11-24

03-12-24

CCD

D

100

9234000001

Samwise

Gamgee

C

123456789

4444444444

0.25

1000

2

Error

422: Duplicate IIN

N

03-11-24

03-12-24

CCD

D

101

9234000002

Samwise

Gamgee

C

123456789

4444444445

0.25

1000

2

Error

422: ACHType

S

03-11-24

03-12-24

CCD

C

102

9234000003

Samwise

Gamgee

BC

233456789

3333333335

0.25

1000

2

Error

422: EntryType

N

03-11-24

03-12-24

PPD

D

101

9234000004

Samwise

Gamgee

BC

123456789

4444444445

0.25

1000

2

Complete

0

S

03-11-24

03-12-24

CCD

C

102

9234000005

Samwise

Gamgee

C

233456789

3333333335

0.25

1000

2

Complete

0

S

03-11-24

03-12-24

CCD

C

102

9234000006

Samwise

Gamgee

C

233456789

3333333335

0.25


ACH Returns (Includes "Rejects" and "NOCs")

The ACH Return files are shared after payments are returned to original sender and can be shared 6-7 days after the payment return.

ACH Return files are sent to merchants/clients after the bank shares the ACH payment is returned.

For a full table view of all the return codes, refer to ACH Return Codes.

ACH Return File Format

ISO

ISO

MID

MID

Return date

Date (5_70_75)

Amount

Amount (6_30_39)

Account

Account (6_13_29)

RTN

ABA/Routing (6_04_12)

Name

Individual Name (6_55_76)

IIN

Individual ID (6_40_54)

Matches IIN from input

ACH RC

Transaction Code (6_02_03)

Trace

Trace (80_94)

Bank Discretionary

Bank Discretionary (6_77_78)

Addenda

Addenda (7_04_83)

Descriptive Date

Descriptive Date (5_64_69)

Company Name

Company Name (5_05_20)

IIN unique to company name and ID

Company Discretionary

Company Discretionary (5_21_40)

Company ID

Company ID (5_41_50)


Class

Class (5_51_53)

Entry Description

Company Entry Description (5_54_63)

Batch

Batch (5_88_94)

ODFI

Originating DFI (5_80_87)

Immediate Destination

Immediate Destination (1_04_13)

Immediate Origin

Immediate Origin (1_14_23)

File Date

File Date (1_24_29)

File Time

File Time (1_30_33)

File modifier

File Modifier (1_34_34)

Immediate destination name

Immediate Destination Name (1_41_63)

Immediate origin name

Immediate Origin Name (1_87_94)

Amount

Amount_Unsigned (no dollar or comma)

Service CC

Service Class 2xx (5_02_04)

Julian Date

Julian_Settle_Date (5_76_78)

Text4

Text4

Text5

Text5

Return Code

Return Code (7_04_06)


Return Description

Return Description


Original Trace #

Original Trace (7_07_21)

Optional Date

Optional Date (7_22_27)

Original RDFI

Original Receiving DFI (7_28_35)

Addenda Text

Addenda Text (7_36_79)

Addenda Trace

Addenda Trace (7_80_94)

Addenda Type

Addenda Type (7_02_03)

Returns Origin ID

Returns Origination Transaction Code (calculated)

Returns RTN

Returns ABA 9 digit (concatenated)

Amount

Amount_Unsigned (no dollar or comma)


ACH Return Codes

Also found at ACH Return Codes.

ACH Return Codes Table
   <th>
     <p><strong> Description</strong></p>
   </th>

   <th>
     <p><strong>Detail</strong></p>
   </th>
 </tr>

 <tr>
   <td>
     <p>R01</p>
   </td>

   <td>
     <p>Insufficient funds</p>
   </td>

   <td>
     <p>Available balance is not sufficient to cover the amount of the debit entry</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R02</p>
   </td>

   <td>
     <p>Bank account closed</p>
   </td>

   <td>
     <p>Previously active amount has been closed by the customer of RDFI</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R03</p>
   </td>

   <td>
     <p>No bank account/unable   to locate account</p>
   </td>

   <td>
     <p>Account number does not correspond to the individual identified in the entry, or the account number
     designated is not an open account</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R04</p>
   </td>

   <td>
     <p>Invalid bank account number</p>
   </td>

   <td>
     <p>Account number structure is not valid</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R06</p>
   </td>

   <td>
     <p>Returned per ODFI request</p>
   </td>

   <td>
     <p>ODFI requested the RDFI to return the entry</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R07</p>
   </td>

   <td>
     <p>Authorization revoked by customer</p>
   </td>

   <td>
     <p>Receiver has revoked authorization</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R08</p>
   </td>

   <td>
     <p>Payment stopped</p>
   </td>

   <td>
     <p>Receiver of a recurring debit has stopped payment of an entry</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R09</p>
   </td>

   <td>
     <p>Uncollected funds</p>
   </td>

   <td>
     <p>Collected funds are not sufficient for payment of the debit entry</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R10</p>
   </td>

   <td>
     <p>Customer advises not authorized</p>
   </td>

   <td>
     <p>Receiver has advised RDFI that originator is not authorized to debit his bank account</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R11</p>
   </td>

   <td>
     <p>Check truncation entry return</p>
   </td>

   <td>
     <p>To be used when returning a check truncation entry</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R12</p>
   </td>

   <td>
     <p>Branch sold to another RDFI</p>
   </td>

   <td>
     <p>RDFI unable to post entry destined for a bank account maintained at a branch sold to another financial
     institution</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R13</p>
   </td>

   <td>
     <p>RDFI not qualified to participate</p>
   </td>

   <td>
     <p>Financial institution does not receive commercial ACH entries</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R14</p>
   </td>

   <td>
     <p>Representative payee deceased or unable to continue in that capacity</p>
   </td>

   <td>
     <p>The representative payee authorized to accept entries on behalf of a beneficiary is either deceased or unable
     to continue in that capacity</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R15</p>
   </td>

   <td>
     <p>Beneficiary or bank account holder</p>
   </td>

   <td>
     <p>(Other than representative payee) deceased\* - (1) the beneficiary entitled to payments is deceased or (2) the
     bank account holder other than a representative payee is deceased</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R16</p>
   </td>

   <td>
     <p>Bank account frozen</p>
   </td>

   <td>
     <p>Funds in bank account are unavailable due to action by RDFI or legal order</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R17</p>
   </td>

   <td>
     <p>File record edit criteria</p>
   </td>

   <td>
     <p>Fields rejected by RDFI processing (identified in return addenda)</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R18</p>
   </td>

   <td>
     <p>Improper effective entry date</p>
   </td>

   <td>
     <p>Entries have been presented prior to the first available processing window for the effective date.</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R19</p>
   </td>

   <td>
     <p>Amount field error</p>
   </td>

   <td>
     <p>Improper formatting of the amount field</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R20</p>
   </td>

   <td>
     <p>Non-payment bank account</p>
   </td>

   <td>
     <p>Entry destined for non-payment bank account defined by reg. </p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R21</p>
   </td>

   <td>
     <p>Invalid company ID number</p>
   </td>

   <td>
     <p>The company ID information not valid (normally CIE entries)</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R22</p>
   </td>

   <td>
     <p>Invalid individual ID number</p>
   </td>

   <td>
     <p>Individual id used by receiver is incorrect (CIE entries)</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R23</p>
   </td>

   <td>
     <p>Credit entry refused by receiver</p>
   </td>

   <td>
     <p>Receiver returned entry because minimum or exact amount not remitted, bank account is subject to litigation,
     or payment represents an overpayment, originator is not known to receiver or receiver has not authorized this
     credit entry to this bank account</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R24</p>
   </td>

   <td>
     <p>Duplicate entry</p>
   </td>

   <td>
     <p>RDFI has received a duplicate entry</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R25</p>
   </td>

   <td>
     <p>Addenda error</p>
   </td>

   <td>
     <p>Improper formatting of the addenda record information</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R26</p>
   </td>

   <td>
     <p>Mandatory field error</p>
   </td>

   <td>
     <p>Improper information in one of the mandatory fields</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R27</p>
   </td>

   <td>
     <p>Trace number error</p>
   </td>

   <td>
     <p>Original entry trace number is not valid for return entry; or addenda trace numbers do not correspond with
     entry detail record</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R28</p>
   </td>

   <td>
     <p>Transit routing number check digit error</p>
   </td>

   <td>
     <p>Check digit for the transit routing number is incorrect</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R29</p>
   </td>

   <td>
     <p>Corporate customer advises not authorized</p>
   </td>

   <td>
     <p>RDFI has bee notified by corporate receiver that debit entry of originator is not authorized</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R30</p>
   </td>

   <td>
     <p>RDFI not participant in check truncation program</p>
   </td>

   <td>
     <p>Financial institution not participating in automated check safekeeping application</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R31</p>
   </td>

   <td>
     <p>Permissible return entry (CCD and CTX only)</p>
   </td>

   <td>
     <p>RDFI has been notified by the ODFI that it agrees to accept a CCD or CTX return entry</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R32</p>
   </td>

   <td>
     <p>RDFI non-settlement</p>
   </td>

   <td>
     <p>RDFI is not able to settle the entry</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R33</p>
   </td>

   <td>
     <p>Return of XCK entry</p>
   </td>

   <td>
     <p>RDFI determines at its sole discretion to return an XCK entry; an XCK return entry may be initiated by
     midnight of the sixtieth day following the settlement date if the XCK entry</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R34</p>
   </td>

   <td>
     <p>Limited participation RDFI</p>
   </td>

   <td>
     <p>RDFI participation has been limited by a federal or state supervisor</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>R35</p>
   </td>

   <td>
     <p>Return of improper debit entry</p>
   </td>

   <td>
     <p>ACH debit not permitted for use with the CIE standard entry class code (except for reversals)</p>
   </td>
 </tr>

TabaPay Response Codes

TabaPay Response Codes are also found at ACH Return Codes.

TabaPay Response Codes Table
   <th>
     <p><strong>Result</strong></p>
   </th>

   <th>
     <p><strong>File</strong></p>
   </th>

   <th>
     <p><strong>Message</strong></p>
   </th>
 </tr>

 <tr>
   <td>
     <p>Accepted</p>
   </td>

   <td>
     <p>0</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td></td>
 </tr>

 <tr>
   <td>
     <p>Rejected</p>
   </td>

   <td>
     <p>421</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td>
     <p>Invalid Account Number</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>Rejected</p>
   </td>

   <td>
     <p>423</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td>
     <p>Invalid input record length</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>Rejected</p>
   </td>

   <td>
     <p>440</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td>
     <p>Invalid entry class</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>Rejected</p>
   </td>

   <td>
     <p>430</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td>
     <p>Invalid ISO</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>Rejected</p>
   </td>

   <td>
     <p>431</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td>
     <p>Invalid MID</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>Rejected</p>
   </td>

   <td>
     <p>432</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td>
     <p>invalid ISO format</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>Rejected</p>
   </td>

   <td>
     <p>428</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td>
     <p>Duplicate or re-used IIN</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>Rejected</p>
   </td>

   <td>
     <p>409</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td>
     <p>Duplicate or re-used IIN</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>Rejected</p>
   </td>

   <td>
     <p>427</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td>
     <p>Invalid entry type</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>Rejected</p>
   </td>

   <td>
     <p>426</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td>
     <p>Invalid ACH type (S, N, R)</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>Rejected</p>
   </td>

   <td>
     <p>425</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td>
     <p>Invalid account type</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>Rejected</p>
   </td>

   <td>
     <p>452</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td>
     <p>Invalid debit or credit indicator</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>Rejected</p>
   </td>

   <td>
     <p>422</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td>
     <p>Invalid RTN</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>Rejected</p>
   </td>

   <td>
     <p>448</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td>
     <p>Invalid amount formt</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>Rejected</p>
   </td>

   <td>
     <p>449</p>
   </td>

   <td>
     <p>Processed</p>
   </td>

   <td>
     <p>Limit exceeded</p>
   </td>
 </tr>

 <tr>
   <td>
     <p>Complete</p>
   </td>

   <td>
     <p>0</p>
   </td>

   <td>
     <p>Output</p>
   </td>

   <td></td>
 </tr>

 <tr>
   <td>
     <p>Error</p>
   </td>

   <td>
     <p>100</p>
   </td>

   <td>
     <p>Output</p>
   </td>

   <td>
     <p>Rejected by ODFI</p>
   </td>
 </tr>

Notification of Change (NOC)

A Notification of Change (NOC) is just a heads-up that there’s a small update needed for a customer’s bank account info, like the account or routing number. It’s sent by the customer’s bank to notify you to update their records.

When you get an NOC, there's usually no major action needed—your ACH payment should still go through. The key thing is to update the customer’s info to avoid any issues with future payments.

  1. Receiving Depository Financial Institution (RDFI): The recipient's bank detects the issue with the payment details and sends an NOC to the sender's bank.
  2. Originating Depository Financial Institution (ODFI): The sender's bank receives the NOC from the RDFI and passes it along to you, or the payment service provider to update the ledger.
  3. Payment Service Provider, or Sender’s Organization: The initiator of the ACH payment, such as a business or organization that is sending the funds, receives the NOC. They must update their records to correct any mistakes in the customer's bank details to ensure future payments are processed accurately.
📘

Updating Customer Records

In most cases when you receive an NOC, your ACH transaction should still process as expected. It does NOT mean a failed transaction.

After receiving an NOC, you will need to update your customer records to reflect the change to their account and ensure that future ACH transactions can be processed correctly.

Refer to the National Automated Clearing House Association (NACHA) Operating rules and Guidelines for more information.

NOC Correction (COR) Codes

Clients receiving a NOC Class = COR must incorporate the change (e.g. C04 - account name change).

NOC Correction Codes Table and details are also found at ACH Returns.

NOC Correction Codes Table
NOC CodeDescription
C01Incorrect bank account number
C02Incorrect transit/routing number
C03Incorrect transit/routing number and bank account number
C04Bank account name change
C05Incorrect payment code
C06Incorrect bank account number and transit code
C07Incorrect transit/routing number, bank account number and payment code
C08Corrected foreign routing number
C09Incorrect individual ID number
C10Incorrect company name