# JPMC-PDP Documentation from https://developer.payments.jpmorgan.com # ACH Automated Clearing House (ACH)/eCheck payments enable US consumers to pay for goods and services directly from their US bank and credit union accounts. ACH payments are not as immediate as other payment methods like credit or debit card transactions. However, they are often cheaper options for businesses than other payment methods due to the lower processing fees. ACH payments are commonly used for payroll direct deposits, bill payments, and recurring transactions like subscription fees. ## Availability **ACH availability** | Payment method | Payment type | Countries | Supported presentment currencies | | --- | --- | --- | --- | | ACH | Direct debit | CA, US | CAD, USD | ## How ACH works ACH payments, also known as direct debits, electronic funds transfer (EFT), electronic bank transactions, and eCheck payments, allow customers to use their account number and bank or credit union’s routing number to pay for goods and services. These payments are processed through the ACH network and regulated by the National Automated Clearing House Association (NACHA). ACH supports both one-time and recurring payments made directly from your consumers’ bank accounts. In accordance with NACHA rules and regulations, your consumer must authorize you to debit or credit their bank account prior to submission of the initial ACH transaction. The ACH payment type (paymentMethodType.ach.`paymentType`) is determined by how your consumer initiates their ACH transaction. We support the following payment types: - Online payments page or mobile application (per WEB SEC code guidelines) — paymentType: WEB - Call center (oral authorization and recording required) — paymentType: TEL - Recurring billing program — paymentType: RECURRING ## Supported transaction types ### Verification Use ACH verification to validate that the financial institution, identified by the bank routing number, participates in ACH. The following example shows the required fields for an ACH verification request: **HTTP method**: POST **Endpoint**: `/verifications` ```json { "merchant": { "merchantSoftware": { "companyName": "Payment Company", "productName": "Application Name", "version": "1.235" } }, "currency": "USD", "paymentMethodType": { "ach": { "accountNumber": "1234567891", "financialInstitutionRoutingNumber": "122000247", "achVerificationType": "BASIC" } } } ``` > If you are a Canadian merchant, the only `achVerificationType` supported is `BASIC`. > > The accountHolder.`firstName` and accountHolder.`lastName` fields are required and must be sent separately. Sending an accountHolder.`fullName` field will result in an error. > For an ACH verification request that validates the status of an account (open/closed), accuracy of a consumer’s account number and the account type, and then submits a pre-note credit advice, update and include the following fields in your request: - paymentMethodType.ach.achVerificationType: PRE_NOTE_CREDIT - accountHolder.firstName - accountHolder.lastName > Per NACHA rules, wait 2 business days after you submit a pre-note credit or pre-note debit transaction to send the ACH payment. > For an ACH verification request that validates the status of an account (open/closed), accuracy of a consumer’s account number and the account type, and then submits a pre-note debit advice, update and include the following fields in your request: - paymentMethodType.ach.achVerificationType: "PRE_NOTE_DEBIT" - accountHolder.firstName - accountHolder.lastName ### Capture To create an ACH payment, send a `POST` request to `/payments` with the paymentMethodType.`ACH` object. To reduce the risk of ACH payment rejections, verify the payment instrument before submitting the capture request. Required fields: - accountNumber - financialInstitutionRoutingNumber - accountHolder.firstName - accountHolder.lastName - accountType To leverage statement descriptors, the following fields must be present: - statementDescriptor — Overrides the default merchant name on the cardholder statement. - merchant.softMerchant.merchantPurchaseDescription — This is used to add more details about the payment in the customer’s statement If micro-entries are used for account validation purposes, set the paymentMethodType.ach.`isTransactionMicroEntry` field to `true`. > Micro-entries are defined as ACH credits of less than $1, and the offsetting ACH debits, to verify a receiver’s account. > The following example shows the minimum required fields for an ACH capture request: **HTTP method**: POST **Endpoint**: `/payments` ```json { "captureMethod": "NOW", "amount": 10000, "currency": "USD", "statementDescriptor": "Statement Descriptor", "paymentMethodType": { "ach": { "accountNumber": "1111111111111111", "financialInstitutionRoutingNumber": "123456789", "accountType": "CHECKING" } }, "accountHolder": { "firstName": "John", "lastName": "Doe" }, "merchant": { "merchantSoftware": { "companyName": "Payment Company", "productName": "Application Name" }, "softMerchant": { "merchantPurchaseDescription": "Merchant Purchase Description" } } } ``` Response: ```json { "transactionId": "81449b6b-a964-4089-9b7c-13802ac8e53e", "requestId": "7f0d335d-31aa-48b8-a4fc-a63098690523", "transactionState": "CLOSED", "responseStatus": "SUCCESS", "responseCode": "ACCEPTED", "responseMessage": "Request successfully completed", "paymentMethodType": { "ach": { "financialInstitutionRoutingNumber": "123456789", "accountType": "CHECKING", "maskedAccountNumber": "111111XXXXXX1111" } }, "captureMethod": "NOW", "captureTime": "2024-03-14T18:06:18.796Z", "isVoid": false, "transactionDate": "2024-03-14T18:06:18.796Z", "amount": 10000, "currency": "USD", "remainingRefundableAmount": 10000, "remainingAuthAmount": 0, "hostReferenceId": "J538sH4NuO1HkPLeHtgsr3", "statementDescriptor": "Statement Descriptor", "merchant": { "merchantId": "000017904374", "merchantSoftware": { "companyName": "Payment Company", "productName": "Application Name" }, "merchantCategoryCode": "4899", "softMerchant": { "merchantPurchaseDescription": "Merchant Purchase Description" } }, "paymentRequest": { "paymentRequestId": "81449b6b-a964-4089-9b7c-13802ac8e53e", "paymentRequestStatus": "CLOSED", "authorizations": [ { "authorizationId": "81449b6b-a964-4089-9b7c-13802ac8e53e", "amount": 10000, "transactionStatusCode": "CAPTURED", "authorizationType": "INITIAL" } ], "captures": [ { "captureId": "81449b6b-a964-4089-9b7c-13802ac8e53e", "amount": 10000, "transactionStatusCode": "CLOSED", "captureRemainingRefundableAmount": 10000 } ] } } ``` ### Refund To refund an ACH payment, send a refund and reference the existing payment. To reduce the risk of ACH refund rejections, verify the payment instrument before submitting the refund request. If micro-entries are used for account validation purposes, set the paymentMethodType.ach.`isTransactionMicroEntry` field to `true`. **HTTP method**: POST **Endpoint**: `/refunds` ```json { "paymentMethodType": { "transactionReference": { "transactionReferenceId": "{{transactionId}}" } }, "merchant": { "merchantSoftware": { "companyName": "Payment Company", "productName": "Application Name" } } } ``` Response: ```json { "transactionId": "7c84f070-7bde-46e9-b08c-b7d5ebd7deb9", "requestId": "4a415c0d-d1e8-4e1e-b6f9-73acabd4524b", "transactionState": "CLOSED", "amount": 10000, "currency": "USD", "responseStatus": "SUCCESS", "responseCode": "ACCEPTED", "responseMessage": "Request successfully completed", "remainingRefundableAmount": 0, "transactionDate": "2024-03-14T18:07:53.518Z", "merchant": { "merchantId": "000017904374", "merchantSoftware": { "companyName": "Payment Company", "productName": "Application Name" }, "merchantCategoryCode": "4899", "softMerchant": { "merchantPurchaseDescription": "Merchant Purchase Description" } }, "statementDescriptor": "Statement Descriptor", "accountHolder": { "firstName": "John", "lastName": "Doe" }, "paymentMethodType": { "ach": { "financialInstitutionRoutingNumber": "123456789", "accountType": "CHECKING", "maskedAccountNumber": "111111XXXXXX1111" } }, "hostReferenceId": "6PPj0y3AcEhjK2Vl5i8Mg", "paymentRequest": { "paymentRequestId": "81449b6b-a964-4089-9b7c-13802ac8e53e", "paymentRequestStatus": "CLOSED", "authorizations": [ { "authorizationId": "81449b6b-a964-4089-9b7c-13802ac8e53e", "amount": 10000, "transactionStatusCode": "CAPTURED", "authorizationType": "INITIAL" } ], "captures": [ { "captureId": "81449b6b-a964-4089-9b7c-13802ac8e53e", "amount": 10000, "transactionStatusCode": "CLOSED", "captureRemainingRefundableAmount": 0 } ], "refunds": [ { "refundId": "7c84f070-7bde-46e9-b08c-b7d5ebd7deb9", "amount": 10000, "transactionStatusCode": "CLOSED" } ] } } ``` ## Related [Payment methods overview](/docs/commerce/online-payments/capabilities/online-payments/payment-methods/index) [Authorize and capture a payment](/docs/commerce/online-payments/capabilities/online-payments/how-to/auth-and-capture-payment) [Verify a payment](/docs/commerce/online-payments/capabilities/online-payments/how-to/verify-payment) [Refund a payment](/docs/commerce/online-payments/capabilities/online-payments/how-to/refund-payment)