All pages
Powered by GitBook
1 of 6

ACH Transactions

Accept ACH credit and direct debit payments by:

  • Submitting a payment request

  • Creating an ACH token

  • Getting an ACH transaction

The following integration methods support accepting ACH payments:

  • Quest API – Supports ACH credit and direct debit payments.

  • Hosted Payments – Supports ACH direct debit payments.

  • Paylink – Supports ACH direct debit payments.

  • JavaScript SDK – Supports ACH credit and direct debit payments.

Paya and DCS, third-party service providers, handle ACH transactions and reporting.

The following articles explain how to process ACH transactions:

  • Submitting a payment request

  • Creating an ACH token

  • Getting an ACH transaction

  • ACH transaction statuses

  • ACH transaction return codes

Submitting the payment request

To submit the payment request:

1

Use the POST method with the /rest/v2/ach/transactions endpoint and the following sample request:

{ 
  "check-field": "invoice", 
  "client-ip": "111.22.22.333", 
  "dob-year": "dob-year", 
  "email-receipt": "true", 
  "software-type-version": "1.0", 
  "type": "Debit", 
  "validate-account": "true", 
  "amount": "string", 
  "routing-number": "string", 
  "account-number": "string", 
  "account-type": "Checking", 
  "standard-entry-class-code": "PPD", 
  "check-number": "string", 
  "create-token": "false", 
  "create-description": "false", 
  "individual-name": "string", 
}

The following table describes the request body parameters:

Name
Data type
Required?
Description

check-field

String

Optional

Specifies the field for check identification. For example, invoice.

client-ip

Integer

Optional

The IP address of the client initiating the request. For example, 111.22.22.333

dob-year

Integer

Optional

The customer's year of birth.

email-receipt

Boolean

Optional

Indicates whether to send an email receipt.

software-type-version

Integer

Optional

The version of the specification used to initiate the transaction.

type

String

Optional

The type of ACH transaction.

validate-account

Boolean

Optional

Indicates whether to validate the bank account.

amount

String

Optional

The transaction amount.

routing-number

String

Optional

The bank routing number.

account-number

String

Optional

The bank account number.

account-type

String

Optional

The type of bank account.

standard-entry-class-code

String

Optional

The ACH standard entry class code.

check-number

String

Optional

The check number associated with the transaction.

create-token

Boolean

Optional

Indicates whether to create a reusable token.

create-description

Boolean

Optional

Indicates whether to create a transaction description.

individual-name

String

Optional

The name of the individual associated with the transaction.

The ach-transaction returns the following status and error codes:

Code
Description

401

If the authentication token has expired or the signature does not match the token.

500

If the request is invalid—for example, if the routing number contains letters.

Creating an ACH token

Creating an ACH token validates the account number or routing number for transaction.

To create an ACH token:

1

Use the POST method with the /rest/v2/ach/tokens endpoint and the following sample request:

{ 
    "account-number": "123456789", 
    "account-type": "Checking", 
    "individual-name": "John Doe", 
    "routing-number": "081009813", 
    "software-type": "MySoftware", 
    "software-type-version": "v1.0", 
    "token-description": "Business checking account" 
}

The following table describes the request body parameters:

Name
Data type
Required?
Description

account-number

String

Optional

The bank account number used for the ACH transaction.

account-type

String

Optional

The type of bank account. For example, Checking or Savings.

individual-name

String

Optional

The name of the individual associated with the bank account.

routing-number

String

Optional

The bank routing number used to identify the financial institution.

software-type

String

Optional

The name of the software initiating the request.

software-type-version

String

Optional

The version of the software used to initiate the request.

token-description

String

Optional

A description of the token being created, such as the account purpose.

2

Set create-token to true in the transaction payload to generate and store a token for future use, for example:

{
    type:credit
    amount:2.00
    account-number: 323434333
    routing-number: 333333333
    create-token: true
  }

The ach-token returns the following response:

{ 
  "ach-token": 
              {
              "account-number": "1111", 
              "account-type": "Checking", 
              "created": "1100000000000000", 
              "individual-name": "John Doe", 
              "last-used": "1100000000000000", 
              "merchant-id": "000008888", 
              "routing-number": "081009813", 
              "times-used": 14, 
              "token-description": "Travel checking account", 
              "token-id": "1100000000000000", 
              "updated": "1100000000000000" 
              }, 
              "payloadType": "string" 
}

The following table describes the response body fields:

Name
Data type
Description

account-number

String

The bank account number.

account-type

String

The type of bank account.

created

String

The timestamp when the token was created.

individual-name

String

The name of the individual associated with the token.

last-used

String

The timestamp when the token was last used.

merchant-id

String

The unique identifier of the merchant associated with the token.

routing-number

String

The bank routing number associated with the account.

times-used

String

The number of times the token has been used.

token-description

String

A description of the token, such as the account’s purpose.

token-id

String

The unique identifier of the token.

updated

String

The timestamp when the token was last updated.

payloadType

String

The type of payload returned in the response.

The ach-token returns the following status and error codes:

Code
Description

401

If the ACH token has expired or the signature does not match the token.

500

If the request is invalid—for example, if the routing number contains letters.

200

An ACH token created successfully.

Getting an ACH transaction

To get an ACH transaction:

1

Use the GET method with the /rest/v2/ach/transactions endpoint.

2

Enter the ID returned in the ACH payment response in the search criteria to find the transaction.

The ach-transaction returns the following response:

{ 
 "ach-transaction": 
  [ 
   { 
    "check-field": "invoice", 
    "client-ip": "111.22.22.333", 
    "dob-year": "dob-year", 
    "email-receipt": "true", 
    "software-type-version": "1.0", 
    "type": "Debit", 
    "validate-account": "true", 
    "amount": "string", 
    "routing-number": "string", 
    "account-number": "string", 
    "account-type": "Checking", 
    "standard-entry-class-code": "PPD", 
    "check-number": "string", 
    "create-token": "false", 
    "create-description": "false", 
    "individual-name": "string", 
    "token-id": "1188888888888888", 
    "id": "string", 
    "status": "Pending", 
    "billing": 
     { 
      "city": "City", 
      "company": "Company", 
      "country": "Country", 
      "first-name": "John", 
      "last-name": "Doe", 
      "phone": "Phone", 
      "state": "State", 
      "street": "Street", 
      "street2": "Street2", 
      "zip": "Zip" 
     }, 
      "shipping": 
       { 
        "city": "City", 
        "company": "Company", 
        "country": "Country", 
        "first-name": "John", 
        "last-name": "Doe", 
        "phone": "Phone", 
        "state": "State", 
        "street": "Street", 
        "street2": "Street2", 
        "zip": "Zip" 
       }, 
        "invoice": "string", 
        "purchase-order": "string", 
        "customer-id": "string", 
        "order-id": "string", 
        "email-address": "string", 
        "description": "string", 
        "comments": "string", 
        "billing-is-shipping": "true", 
        "status-change-date": "string", 
        "display-message": "string", 
        "provider-transaction-id": "string", 
        "trace-number": "string", 
        "settled-date": "string", 
        "returned-date": "string", 
        "returned-code": "string", 
        "returned-message": "string", 
        "ach-token": 
         { 
          "account-number": "1111", 
          "account-type": "Checking", 
          "created": "1100000000000000", 
          "customer-key": "customer123", 
          "default": true, 
          "individual-name": "John Doe", 
          "last-used": "1100000000000000", 
          "merchant-id": "000008888", 
          "routing-number": "081009813", 
          "times-used": 14, 
          "token-description": "Travel checking account", 
          "token-id": "1100000000000000", 
          "updated": "1100000000000000" 
         }, 
          "merchant-id": "string", 
          "terminal-id": "string", 
          "software-type": "MySoftware_Version1.3", 
          "paya-authorization": "string" 
   } 
  ] 
}

The following table describes the fields in the response body:

Name
Data type
Description

ach-transaction

Array of strings

Contains the details of the ACH transaction.

check-field

String

Specifies the field used for check identification, such as an invoice number.

client-ip

String

The IP address of the client initiating the request.

dob-year

String

The customers year of birth.

email-receipt

String

Indicates whether to send an email receipt.

software-type-version

String

The version of the software used to initiate the transaction.

type

String

The transaction type. For example, Debit.

validate-account

String

Indicates whether to validate the bank account.

amount

String

The transaction amount.

routing-number

String

The bank routing number.

account-number

String

The bank account number.

account-type

String

The type of bank account. For example, Checking or Savings.

standard-entry-class-code

String

The ACH standard entry class code. For example, PPD.

check-number

String

The check number associated with the transaction.

create-token

String

Indicates whether to create a reusable token.

create-description

String

Indicates whether to create a transaction description.

individual-name

String

The name of the individual associated with the transaction.

token-id

String

The unique identifier of the token.

id

String

The unique identifier of the transaction.

status

String

The current status of the transaction. For example, Pending.

billing

Object

Contains billing address details.

billing.city

String

The billing city.

billing.company

String

The billing company.

billing.country

String

The billing country.

billing.first-name

String

The first name of the billing contact.

billing.last-name

String

The last name of the billing contact.

billing.phone

String

The phone number of the billing contact.

billing.state

String

The billing state.

billing.street

String

The billing street address.

billing.street2

String

The second line of the billing street address.

billing.zip

String

The billing ZIP code.

shipping

Object

Contains shipping address details.

shipping.city

String

The shipping city.

shipping.company

String

The shipping company.

shipping.country

String

The shipping country.

shipping.first-name

String

The first name of the shipping contact.

shipping.last-name

String

The last name of the shipping contact.

shipping.phone

String

The phone number of the shipping contact.

shipping.state

String

The shipping state.

shipping.street

String

The shipping street address.

shipping.street2

String

The second line of the shipping street address.

shipping.zip

String

The shipping ZIP code.

invoice

String

The invoice number associated with the transaction.

purchase-order

String

The purchase order number associated with the transaction.

customer-id

String

The unique identifier of the customer.

order-id

String

The unique identifier of the order.

email-address

String

The email address of the customer.

description

String

A description of the transaction.

comments

String

Additional comments about the transaction.

billing-is-shipping

String

Indicates whether the billing address is the same as the shipping address. Use true or false.

status-change-date

String

The date when the transaction status last changed.

display-message

String

A message to be displayed to the user.

provider-transaction-id

String

The unique identifier of the transaction from the payment provider.

trace-number

String

The trace number associated with the transaction.

settled-date

String

The date when the transaction was settled.

returned-date

String

The date when the transaction was returned.

returned-code

String

The code indicating the reason for the transaction return.

returned-message

String

The message indicating the reason for the transaction return.

ach-token

Object

Contains details of the ACH token.

ach-token.account-number

String

The masked bank account number associated with the token.

ach-token.account-type

String

The type of bank account. For example, Checking or Savings.

ach-token.created

String

The timestamp when the ACH token was created.

ach-token.customer-key

String

The unique key of the customer associated with the ACH token.

ach-token.default

Boolean

Indicates whether the ACH token is the default token.

ach-token.individual-name

String

The name of the individual associated with the ACH token.

ach-token.last-used

String

The timestamp when the ACH token was last used.

ach-token.merchant-id

String

The unique identifier of the merchant associated with the ACH token.

ach-token.routing-number

String

The bank routing number associated with the account.

ach-token.times-used

String

The number of times the ACH token has been used.

ach-token.token-description

String

A description of the ACH token, such as the accounts purpose.

ach-token.token-id

String

The unique identifier of the ACH token.

ach-token.updated

String

The timestamp when the ACH token was last updated.

merchant-id

String

The unique identifier of the merchant.

terminal-id

String

The unique identifier of the terminal.

software-type

String

The name and version of the software initiating the request.

paya-authorization

String

The authorization code from Paya.

The ach-transaction returns the following status and error codes:

Code
Description

401

If the ACH token has expired or the signature does not match the token.

204

Not found.

200

The ACH transaction list was generated successfully.

ACH transaction statuses

The following table describes the ACH transaction statuses:

Status
Description

PENDING

This status indicates that an ACH transaction is pending.

SETTLED

This status indicates that an ACH transaction is settled.

SETTLING

This status indicates that an ACH transaction is settling.

RETURNED

This status indicates that an ACH transaction is returned.

VOID

This status indicates that an ACH transaction is void.

CHARGEBACK

This status indicates that an ACH transaction is chargeback.

MERCHANT_RETURNED

This status indicates that an ACH transaction is returned. This status also indicates you to check Merchant Setup.

NO CREDIT

This status indicates that an ACH transaction does not have credit.

TO RESERVE

This status indicates that an ACH transaction is to reserve.

UNPROCESSED

This status indicates that an ACH transaction is unprocessed.

ERROR

This status indicates that an ACH transaction has an error.

The status of the ACH transaction initially appears as Pending. The status changes from Settling to Settled when the ACH transaction is processed successfully.

ACH transaction return codes

The following table describes the codes returned by the receiving bank for ACH transactions:

Code
Message
Description

R02

Account closed.

A previously open account is now closed.

R03

No account or unable to locate account.

The account number does not correspond to the individual identified in the entry or a valid account.

R04

Invalid account number.

The account number fails the check digit validation or may contain an incorrect number of digits

R05

Unauthorized debit to consumer account.

A business debit entry was transmitted to a members consumer account, and the member had not authorized the entry.

R06

Returned per ODFI’s request.

The ODFI has requested that the RDFI return the entry.

R07

Authorization revoked by customer.

The member who previously authorized an entry has revoked authorization with the Originator.

R08

Payment stopped or stop payment on item.

The member had previously requested a stop payment of a single or recurring entry

R09

Uncollected funds.

Available balance is sufficient, but collected balance is not sufficient to cover the entry.

R10

Customer advises not authorized.

The member advises not authorized, notice not provided, improper source document, or amount of entry not accurately obtained from source document

R11

Check truncation entry return.

To be used when returning a check truncation entry.

R12

Branch sold to another DFI.

RDFI unable to post entry destined for a bank account maintained at a branch sold to another financial institution.

R13

Invalid ACH routing number.

The financial institution does not receive commercial ACH entries.

R14

Representment payee deceased or unable to continue in that capacity.

The representative payee is deceased or unable to continue in that capacity, beneficiary is not deceased.

R15

Beneficiary of account holder deceased.

The beneficiary or account Holder Deceased.

R16

Account frozen.

Access to account is restricted due to specific action taken by the RDFI or by legal action.

R17

File record edit criteria.

Fields rejected by RDFI processing. (identified in return addenda)

R18

Improper effective entry date.

Entries have been presented prior to the first available processing window for the effective date.

R19

Amount field error.

Improper formatting of the amount field.

R20

Non transaction account.

Policies or regulations (such as Regulation D) prohibit or limit activity to the account indicated.

R21

Invalid company identification.

The company ID information not valid. (normally CIE entries)

R22

Invalid individual ID number.

The individual id used by receiver is incorrect. (CIE entries)

R23

Credit entry refused by receiver.

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.

R24

Duplicate entry.

RDFI has received a duplicate entry.

R25

Addenda error.

Improper formatting of the addenda records information.

R26

Mandatory field error.

Improper information in one of the mandatory fields.

R27

Trace number error.

Original entry trace number is not valid for return entry; or addenda trace numbers do not correspond with entry detail record.

R28

Routing number or check digit error.

Check digit for the transit routing number is incorrect.

R29

Corporate customer advises not authorized.

RDFI has been notified by business account holder that a specific transaction is unauthorized.

R30

RDFI not participant in check truncation program.

The financial institution not participating in automated check safekeeping application.

R31

Permissible return entry.

RDFI has been notified by business account holder that a specific transaction is unauthorized.

R32

RDFI non settlement.

RDFI is not able to settle the entry.

R33

Return of XCK entry.

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.

R34

Limited participation DFI.

RDFI participation has been limited by a federal or state supervisor.

R35

Return of improper debit entry.

ACH debit not permitted for use with the CIE standard entry class code. (except for reversals)

R36

Return of improper credit entry.

None

R37

Source Document Presented for Payment Check used for an ARC, BOC or POP entry has also been presented for payment.

None

R38

Stop payment on source document.

Stop payment has been placed on a check used for an ARC entry.

R40

Return of ENR entry by federal government agency. (ENR only)

None

R41

Invalid transaction code. (ENR only)

None

R42

Routing number or check digit error. (ENR only)

None

R43

Invalid DFI account number. (ENR only)

None

R44

Invalid individual ID number. (ENR only)

None

R45

Invalid individual name/company name. (ENR only)

None

R46

Invalid representative payee indicator. (ENR only)

None

R47

Duplicate enrollment.

None

R50

State law affecting RCK acceptance.

None

R51

Item is ineligible, notice not provided, signature not genuine.

None

R52

Stop payment on item.

None

R61

Misrouted return.

Return entry was sent by RDFI to an incorrect ODFI routing/transit number.

R62

Incorrect trace number.

None

R63

Incorrect dollar amount.

None

R64

Incorrect individual identification.

None

R65

Incorrect transaction code.

None

R66

Incorrect company identification.

None

R67

Duplicate return.

ODFI has received more than one return entry for the same original entry.

R68

Untimely return.

Return entry did not meet the return deadline.

R69

Multiple errors.

None

R70

Permissible return entry not accepted.

None

R71

Misrouted dishonored return.

None

R72

Untimely dishonored return.

None

R73

Timely original return.

None

R74

Corrected return.

None

R80

Cross-border payment coding error.

None

R81

Nonparticipant in cross-border program.

None

R82

Invalid foreign receiving DFI identification.

None