ACH Transactions
ACH debit payment types, settlement timing, and return handling.
ACH (Automated Clearing House) transactions debit a customer's US bank account. Unlike card payments, ACH has a multi-day settlement cycle and a return window.
ACH debit
Create an ACH debit payment. The only ACH instrument is a saved account — pass its
vault_token (cvt_…) and the use_type declaring your reuse intent. Raw routing and
account numbers are rejected as unknown fields; a first-time payer saves the account
through a hosted payment page or the stored-credentials API. See the
ACH Guide → for the NACHA consent fields and the SEC-code rules.
POST https://api.cresoracommerce.ai/api/v1/transactions{
"type": "ACH_DEBIT",
"merchant_id": "0190a1b2-c3d4-7e5f-8901-23456789abcd",
"amount": "500.00",
"currency": "USD",
"vault_token": "cvt_0190d8a1-2b3c-7d4e-9f12-7a8b9c0d1e2f",
"use_type": "ONE_TIME_FUTURE",
"ach_sec_code": "WEB",
"consent_text_version": "v1.0",
"consent_ip": "203.0.113.42",
"consent_at": "2026-08-11T10:30:00Z"
}consent_at above is illustrative — send the instant the payer actually
authorized. For use_type: ONE_TIME_FUTURE it must fall within a 7-day
recency window, so a date copied from this page will be rejected. The
ACH Guide → has runnable snippets that stamp it correctly,
and explains why the window does not apply to merchant-initiated debits.
Settlement timing
| Stage | Timeline |
|---|---|
| Payment created | Immediate |
| ACH file submitted | Next business day |
| Funds received | 1–3 business days after submission |
| Return window opens | At submission |
| Return window closes | Up to 60 days (R10) |
ACH return codes
Returns are initiated by the receiving bank. Common codes:
| Code | Reason | Action |
|---|---|---|
R01 | Insufficient funds | May retry with customer consent |
R02 | Account closed | Stop — get new bank account |
R03 | No account / unable to locate | Stop — verify account details |
R04 | Invalid account number | Stop — verify routing + account |
R10 | Customer advises not authorized | Stop immediately — dispute risk |
R29 | Corporate not authorized | Re-obtain written authorization |
An R10 return means the customer claims they did not authorize the debit. Stop all retries immediately. Continued debiting after an R10 violates NACHA rules and can result in fines.
ACH reversal (erroneous entry)
ACH_REVERSAL is NACHA's correction instrument for an erroneous entry (wrong amount,
wrong account, duplicate). It is valid within 5 banking days of the debit settling,
and requires a structured reversal_reason — one of INCORRECT_AMOUNT,
INCORRECT_ACCOUNT, DUPLICATE_ENTRY, INCORRECT_EAN:
POST https://api.cresoracommerce.ai/api/v1/transactions{ "type": "ACH_REVERSAL", "parent_transaction_id": "{transactionId}", "reversal_reason": "INCORRECT_AMOUNT" }Past the window it is rejected with 422 nacha_reversal_window_expired — issue a refund
(credit entry, below) instead. A reversal corrects an error; it is not the customer-refund
instrument, and there is no intraday "file cutoff" on this API.
ACH refund (post-settlement)
After the ACH has settled, issue a credit:
POST https://api.cresoracommerce.ai/api/v1/transactions
{ "type": "ACH_REFUND", "parent_transaction_id": "{transactionId}", "refund_reason": "customer_requested" }This creates a new credit ACH entry. The credit typically arrives in the customer's account 1–3 business days after submission.