The Automated Clearing House (ACH) is a US payment network that processes electronic fund transfers between bank accounts. Unlike card payments that authorize in real time through card networks, ACH transactions are batched and cleared through the Federal Reserve or The Clearing House.
Paradise Gateway processes ACH payments through the Vericheck processor.
Paradise Gateway supports two ACH Standard Entry Class (SEC) codes that determine how the payment was authorized.
| SEC code | Name | Use case | Authorization method |
|---|---|---|---|
| WEB | Internet-initiated | Person authorizes payment through a website or app | Online consent form, checkbox, or click-through agreement |
| PPD | Prearranged payment and deposit | Recurring payments authorized by written agreement | Signed authorization form (physical or electronic) |
Using the correct SEC code is a NACHA requirement. Using the wrong code can result in fines or ACH processing suspension. Use WEB for internet-originated transactions and PPD for pre-authorized recurring payments with a signed agreement.
Send POST /v1/transactions with type: PAYMENT and the person's bank account details.
| Field | Description | Example |
|---|---|---|
type | Transaction type | PAYMENT |
amount | Amount in cents | 50000 (500.00 USD) |
payment_method.type | Payment method type | ACH |
payment_method.account_number | Bank account number | 9876543210 |
payment_method.routing_number | ABA routing number (9 digits) | 021000021 |
payment_method.account_type | Account type | checking or savings |
payment_method.name | Account holder name | Montgomery Scott |
payment_method.email | Account holder email | scotty@example.com |
- development serverhttps://api.dev.paradisegateway.net/v1/transactions
- sandbox serverhttps://api.sandbox.paradisegateway.net/v1/transactions
- production serverhttps://api.paradisegateway.net/v1/transactions
- Payload
- cURL
- JS
- C#
- Python
- Go
- Ruby
- Java
- Node.js
- PHP
- R
- case 1
- case 2
{ "type": "SALE", "amount": 10000, "tip": 0, "payment_method": { "type": "CARD", "pan": "4012000098765439", "expiry": { … }, "cvv": "999", "first_name": "John", "last_name": "Doe", "contact": { … }, "billing_address": { … } }, "initiator": "CUSTOMER", "entry_method": "ECOMMERCE,", "recurring": { "sequence": "INITIAL", "initial_transaction_id": "string", "initial_network_transaction_id": "MCC1234567890" }, "metadata": { "property1": "string", "property2": "string" } }
{
"id": "TRANSACTION-03LPSC0TTY9ZXQ5MV0H4Y6W8A",
"object": "transaction",
"type": "payment",
"transaction_state": "authorized",
"response_status": "Approved",
"response_code": "00",
"response_message": "The API request is approved.",
"amount_requested": 50000,
"amount_authorized": 50000,
"correlation_id": "d4e5f6a7-b8c9-0123-def0-123456789abc"
}The transaction returns immediately with authorized state. This does not mean the funds have been transferred — the ACH network processes the debit asynchronously.
ACH transactions settle more slowly than card transactions because the ACH network processes in scheduled batches rather than in real time.
| Event | Card (TSYS) | ACH (Vericheck) |
|---|---|---|
| Authorization | Real-time (< 3 seconds) | Immediate API response (validation only) |
| Batch submitted | End of business day | Next business day |
| Funds settled | 1–2 business days | 2–3 business days |
| Returns possible | Not applicable (chargebacks instead) | Up to 60 days |
Unlike card chargebacks, ACH transactions can be returned by the receiving bank after settlement. Returns can happen for several reasons.
| Return code | Reason | Timeline |
|---|---|---|
| R01 | Insufficient funds | 2 business days |
| R02 | Account closed | 2 business days |
| R03 | No account / unable to locate | 2 business days |
| R04 | Invalid account number | 2 business days |
| R08 | Payment stopped | 2 business days |
| R10 | Customer advises not authorized | Up to 60 days |
| R29 | Corporate customer advises not authorized | 2 business days |
Because ACH returns can occur days or weeks after settlement, build your system to handle asynchronous return notifications. Monitor transaction status through GET /v1/transactions/{id} or configure webhooks to receive return notifications.
In addition to collecting payments, Paradise Gateway supports ACH payouts — sending funds to a bank account. Payouts use the same endpoint with a different transaction type.
| Direction | Transaction type | Description |
|---|---|---|
| Inbound (collect) | payment | Debit the person's bank account |
| Outbound (pay) | payout | Credit the person's bank account |
ACH transactions can be canceled before settlement using the cancel endpoint.
| Original type | Cancel type |
|---|---|
payment | cancel |
payout | cancel |
After settlement, ACH reversals go through the ACH return process rather than API-initiated refunds.
To avoid storing sensitive bank account details, tokenize the bank account and use the payment token for subsequent transactions.
{
"type": "payment",
"amount": 50000,
"payment_method": {
"type": "token",
"payment_token": "PAYMENT_TOKEN-03LPSC0TTY0AYRNZ5VQXS2G3AB"
},
"recurring": true,
"purchase_description": "Monthly service fee"
}For more information, see About tokenization.
- Validate routing numbers before submitting. Invalid routing numbers result in R03 or R04 returns.
- Use the correct SEC code (WEB for internet, PPD for recurring with signed authorization).
- Handle returns asynchronously. Do not treat the initial
authorizedresponse as final settlement. - Set
recurring: truefor subsequent charges against a stored bank account to comply with NACHA rules. - Tokenize bank accounts for recurring payments rather than storing raw account numbers.