Skip to main content
Cresora Commerce
Transaction Types

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

StageTimeline
Payment createdImmediate
ACH file submittedNext business day
Funds received1–3 business days after submission
Return window opensAt submission
Return window closesUp to 60 days (R10)

ACH return codes

Returns are initiated by the receiving bank. Common codes:

CodeReasonAction
R01Insufficient fundsMay retry with customer consent
R02Account closedStop — get new bank account
R03No account / unable to locateStop — verify account details
R04Invalid account numberStop — verify routing + account
R10Customer advises not authorizedStop immediately — dispute risk
R29Corporate not authorizedRe-obtain written authorization
🔒R10 — Stop immediately

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.