{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-docs/sidebars.yaml","api-docs-apis/openapi.yaml":"api-docs-apis/openapi.yaml"},"props":{"metadata":{"markdoc":{"tagList":["replay-openapi"]},"type":"markdown"},"seo":{"title":"ParadisePay Docs","description":"ParadisePay is the groundbreaking payment gateway that lets you integrate with the future of payments."},"dynamicMarkdocComponents":["openapi"],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"accept-an-ach-payment","__idx":0},"children":["Accept an ACH payment"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["An ACH debit pulls funds from a customer's checking or savings account. It costs less than a card payment and suits large or recurring amounts, but it settles more slowly and it can come back days later as a return."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["ACH runs through VeriCheck. Card transactions run through TSYS. A merchant account is configured for one or the other, so the payment method and the credentials have to agree."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"before-you-start","__idx":1},"children":["Before you start"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Your ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Api-Key"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Client-Id"]}," — see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/get-started/authentication"},"children":["Authentication"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A processor integration configured for ACH"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The customer's authorization to debit the account, in a form the SEC code below describes"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"send-the-debit","__idx":2},"children":["Send the debit"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/transactions"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}," set to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SALE"]}," and a bank account as the payment method."]},{"$$mdtype":"Tag","name":"ReplayOpenApi","attributes":{"descriptionFile":"api-docs-apis/openapi.yaml","operationId":"createTransaction","exampleKey":"saleWithBankAccount","parameters":{},"options":{},"environments":{}},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["ACH asks for more required fields than a card does. All seven of these must be present:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Notes"},"children":["Notes"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment_method.type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ACH"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment_method.routing_number"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Exactly 9 digits"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment_method.account_number"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["4 to 20 digits"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment_method.account_type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CHECKING"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SAVINGS"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment_method.standard_entry_class"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["How the customer authorized the debit. See the table below"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment_method.first_name"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Required, unlike on a card"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment_method.last_name"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Required, unlike on a card"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["standard_entry_class"]}," has no default."]}," Leave it out and the request returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["REQUIRED_DATA_MISSING"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["details"]}," names ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment_method.standard_entry_class"]},". The right value is a compliance question, not a preference."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["One optional field matters more than it looks:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["description"]}]}," is at most 30 characters. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Only the first 10 reach the customer's bank statement."]}," Left out or blank, it falls back to the merchant's DBA, cut to 30 characters. Put something recognizable in the first 10 characters or expect disputes."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"choosing-a-sec-code","__idx":3},"children":["Choosing a SEC code"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Standard Entry Class code records how you obtained authorization. Send the one that matches what actually happened. The gateway never picks one for you."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Code"},"children":["Code"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Use it for"},"children":["Use it for"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WEB"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Consumer authorized over the internet"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PPD"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Consumer authorized in writing"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TEL"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Consumer authorized by telephone"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CCD"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Business-to-business"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POP"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Check converted at the point of sale"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BOC"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Check converted after the sale"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A payment made with a saved bank account token needs its code sent the same way, because the token does not keep one. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/payments/save-and-reuse-a-payment-method#send-a-sec-code-with-a-bank-account-token"},"children":["Save and reuse a payment method"]}," shows where it goes."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"ach-takes-only-sale-and-payout","__idx":4},"children":["ACH takes only SALE and PAYOUT"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A bank account accepts ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}," of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SALE"]}," to pull funds in, and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PAYOUT"]}," to send them out. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["There is no ACH authorization"]},", so ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type: AUTH"]}," with a bank account returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INVALID_ACTION"]}," and the message \"Payment method not supported for this transaction type\"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["That also means the capture flow does not apply to ACH. An ACH sale is a single step."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"approved-is-not-final","__idx":5},"children":["Approved is not final"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This is the part that catches card-shaped integrations."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A card decline arrives in the response. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["An ACH return arrives days later"]},", long after you saw ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["APPROVED"]},", and often after the transaction has already settled. Insufficient funds, a closed account, or a customer revoking authorization all surface this way."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["So an approved ACH transaction is provisional. Do not treat it as final for anything expensive to reverse — shipping goods, crediting an account balance — until you have given returns time to arrive."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Four fields on the transaction carry it:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Behavior"},"children":["Behavior"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["is_returned"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," once returned. Always present. Always ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]}," on a card"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["returned_at"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When the processor sent the return. Always present, null if none"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["return_code"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The three-character NACHA code. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Omitted entirely"]},", not null, when there is no return"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["return_reason"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The same in words. Also omitted rather than null"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Two consequences for your code:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Read ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["is_returned"]}," alongside ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["is_settled"]},", not instead of it."]}," A returned transaction may well have settled first."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["return_code"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["return_reason"]}," are absent, not null."]}," Code that reads ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["body[\"return_code\"]"]}," without checking for the key will throw on every transaction that was never returned — which is nearly all of them."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["There are no webhooks, so poll ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /v1/transactions"]}," to find returns."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"next-steps","__idx":6},"children":["Next steps"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/payments/send-a-payout"},"children":["Send a payout"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/concepts/ach-and-nacha"},"children":["ACH and NACHA basics"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/after-the-payment/find-and-report-on-transactions"},"children":["Find and report on transactions"]}]}]}]},"headings":[{"value":"Accept an ACH payment","id":"accept-an-ach-payment","depth":1},{"value":"Before you start","id":"before-you-start","depth":2},{"value":"Send the debit","id":"send-the-debit","depth":2},{"value":"Choosing a SEC code","id":"choosing-a-sec-code","depth":2},{"value":"ACH takes only SALE and PAYOUT","id":"ach-takes-only-sale-and-payout","depth":2},{"value":"Approved is not final","id":"approved-is-not-final","depth":2},{"value":"Next steps","id":"next-steps","depth":2}],"frontmatter":{"title":"Accept an ACH payment","shortTitle":"ACH payment","intro":"Debit a US bank account. ACH is cheaper than cards and slower to settle, and it can be returned days after it was approved.","type":"how-to","seo":{"title":""}},"lastModified":"2026-10-23T00:08:41.656Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/payments/accept-an-ach-payment","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}