# ACH Direct Debits Sellers can accept payments from buyers' US-based bank accounts. Often, these payments are referred to as "ACH payments" or "ACH Direct Debits". ACH Direct Debits are an alternative to credit and debit card payments. ACH Direct Debits are processed through the Automated Clearing House (ACH) payments system, operated by the National Automated Clearinghouse Association (Nacha). In this guide, you can learn how to accept payments from US-based bank accounts. ## Overview ACH Return Risk ACH returns can lead to losses. We recommend taking ACH payments from buyers whom you have a known or prior established relationship with. Unlike card payments, ACH Direct Debits are not real-time. It can take between 4 and 10 business days to fully authorize the transaction with the buyer's bank and learn whether it failed or succeeded. Buyers can dispute the transaction up to 60 days after the initial payment date. Often, businesses mitigate risk or losses from ACH Return risk by: - Ensuring they are dealing with buyers whom they have a prior established relationship. - Implementing a hold time before shipping or providing a good or service. Finix requires the following details from buyers to process ACH Direct Debits: | Detail | Description | | --- | --- | | Bank Code | The routing number of the buyer's bank account | | Account Number | The account number of the buyer's bank account | | Buyer Name | The buyer's name | You can collect this bank account information using [Tokenization Forms or SDKs](/guides/online-payments/payment-tokenization), as well as [our Plaid integration](/guides/online-payments/bank-payments/plaid-integration). ### ACH Direct Debit Flow ACH Direct Debits start as `PENDING`, and move to either `SUCCEEDED` or `FAILED` as the payment processes. ![ACH States](/assets/ach-states.877ba9bbf2f44f05e6843ac5a4edf7576e9da045dabfc1ef06446f7658a1eb7c.28b10c14.svg) | Transfer State | Description | | --- | --- | | `PENDING` | Finix is processing the ACH Direct Debit. | | `SUCCEEDED` | Finix has accepted the ACH Direct Debit. The buyer's bank may or may not have accepted the payment yet. | | `FAILED` | Finix did not accept the ACH Direct Debit. | Successful ACH Direct Debits `SUCCEEDED` means Finix that Finix submitted the ACH direct debit details to the ACH networks. It can take 4-10 business days for the buyer's bank to process and confirm the debit was successful. ### ACH Direct Debit Timing ACH Direct Debits take longer than credit card payments to move and settle funds. To account for this, Finix creates an "ACH Settlement Delay" to accommodate any ACH Returns that may occur. By default, the ACH Settlement Delay holds ACH Direct Debits for 5 days before Finix batches them into [payout Settlements](/guides/after-the-payment/payouts). ![ACH Timing](/assets/ach-timing.cea46f4b828383e37868bdea400cb5b63c631f74d1c3f6e329c3606c131704db.28b10c14.svg) Sellers may want ACH Direct Debits to appear in settlements faster or slower, depending on their business needs. For example, the ACH Settlement Delay can be: - Decreased, so ACH Direct Debits appear in `Settlements` faster. This can result in ACH Returns appearing after paying out an ACH Direct Debit. - Increased, so sellers have more certainty before paying out ACH Direct Debits. This helps make sure payouts to sellers always include ACH Returns. To customize this delay, reach out to your Finix point of contact or email the [Finix Support team](mailto:support@finix.com). ### Bank Account Validation In compliance with Nacha's bank account validation rule, Finix validates bank accounts before processing ACH payments. Finix validates the bank account the first time it's used, as well as after any changes are made. The Transfer's `bank_account_validation_check` field explains the results of this check. | Bank Account Validation Check | Description | | --- | --- | | `NOT_ATTEMPTED` | Default value for new bank accounts that haven't been validated yet. | | `VALID` | Bank account was found and confirmed to accept ACH Direct Debits. | | `INVALID` | Bank account couldn't be found or validated. A `Transfer` created with a bank account marked `INVALID` will fail. Please contact the account holder to confirm details or request a different payment method. | | `INCONCLUSIVE` | Bank account couldn't be found and validation was `INCONCLUSIVE`. Bank accounts marked as inconclusive can still be used to create an ACH `Transfer`. | ### Payment Authorization Language Before processing any ACH Direct Debit payments, the buyer must agree to the following statement: > *By clicking submit, you authorize us to initiate an automated clearing house (ACH) one-time debit in your name to your bank account indicated above. The amount of this transaction as noted above will be presented to your financial institution by the next business day. You further agree that once you click submit you may not revoke this authorization or cancel this payment.* We recommend presenting this language in your checkout flow right before the buyer clicks the **Submit** button and triggers the creation of the payment. ### Payment Confirmation Language After the payment is submitted, present a confirmation screen and/or email a confirmation to the buyer with the following language: > *Thank you for your payment in the amount of $xx.xx. Please print this authorization for your records.* *You have authorized us to initiate an automated clearing house (ACH) one-time debit in your name to your bank account. This transaction will be presented to your financial institution by the next business day. You further agree that you may not revoke this authorization or cancel this payment.* ## Creating ACH Direct Debits To create an ACH Direct Debit, simply create an Identity, Payment Instrument, and Transfer. ### Step 1: Create a Buyer First, create an Identity to represent your buyer. The Identity resource represents both buyers and sellers. If you're a platform managing multiple sellers, see our [Platform Payments guide](/guides/platform-payments) to learn how to onboard sellers. Your buyer's Identity stores their personal data (such as name and email), and helps manage their payments, payment methods, identity verification, and more. Buyer Identity Data All buyer Identity fields are optional. However, Finix recommends including basic information (name, email, address, and phone) to make payment operations easier. ```shell Buyer Identity Request curl https://finix.sandbox-payments-api.com/identities \ -H 'Content-Type: application/json' \ -H 'Finix-Version: 2022-02-01' \ -u USsRhsHYZGBPnQw8CByJyEQW:8a14c2f9-d94b-4c72-8f5c-a62908e5b30e \ -X POST \ -d '{ "entity": { "email": "user@example.org", "first_name": "John", "last_name": "Smith", "personal_address": { "city": "San Mateo", "country": "USA", "line1": "741 Douglass St", "line2": "Apartment 7", "postal_code": "94114", "region": "CA" }, "phone": "7145677613" } }' ``` ```json Buyer Identity { "id": "IDnytkgHCbgJkvtbpqrZtbnk", "created_at": "2025-01-05T15:29:14.19Z", "updated_at": "2025-01-05T15:29:14.19Z", "application": "APgPDQrLD52TYvqazjHJJchM", "entity": { "ach_max_transaction_amount": 0, "amex_mid": null, "annual_card_volume": 0, "business_address": null, "business_name": null, "business_phone": null, "business_tax_id_provided": false, "business_type": null, "default_statement_descriptor": null, "discover_mid": null, "dob": null, "doing_business_as": null, "email": "user@example.org", "first_name": "John", "has_accepted_credit_cards_previously": false, "incorporation_date": null, "last_name": "Smith", "max_transaction_amount": 0, "mcc": null, "ownership_type": null, "personal_address": { "line1": "741 Douglass St", "line2": "Apartment 7", "city": "San Mateo", "region": "CA", "postal_code": "94114", "country": "USA" }, "phone": "7145677613", "principal_percentage_ownership": null, "short_business_name": null, "tax_authority": null, "tax_id_provided": false, "title": null, "url": null }, "identity_roles": [], "tags": {}, "type": "PERSONAL", "_links": { "self": { "href": "https://finix.sandbox-payments-api.com/identities/IDnytkgHCbgJkvtbpqrZtbnk" }, "verifications": { "href": "https://finix.sandbox-payments-api.com/identities/IDnytkgHCbgJkvtbpqrZtbnk/verifications" }, "merchants": { "href": "https://finix.sandbox-payments-api.com/identities/IDnytkgHCbgJkvtbpqrZtbnk/merchants" }, "settlements": { "href": "https://finix.sandbox-payments-api.com/identities/IDnytkgHCbgJkvtbpqrZtbnk/settlements" }, "authorizations": { "href": "https://finix.sandbox-payments-api.com/identities/IDnytkgHCbgJkvtbpqrZtbnk/authorizations" }, "transfers": { "href": "https://finix.sandbox-payments-api.com/identities/IDnytkgHCbgJkvtbpqrZtbnk/transfers" }, "payment_instruments": { "href": "https://finix.sandbox-payments-api.com/identities/IDnytkgHCbgJkvtbpqrZtbnk/payment_instruments" }, "associated_identities": { "href": "https://finix.sandbox-payments-api.com/identities/IDnytkgHCbgJkvtbpqrZtbnk/associated_identities" }, "disputes": { "href": "https://finix.sandbox-payments-api.com/identities/IDnytkgHCbgJkvtbpqrZtbnk/disputes" }, "application": { "href": "https://finix.sandbox-payments-api.com/applications/APgPDQrLD52TYvqazjHJJchM" } } } ``` ### Step 2: Create a Payment Instrument Next, create a Payment Instrument to save your buyer's bank account details. You can collect this data using our [Tokenization Forms or SDKs](/guides/online-payments/payment-tokenization), as well as [our Plaid integration](/guides/online-payments/bank-payments/plaid-integration). ```shell Payment Instruent Request curl https://finix.sandbox-payments-api.com/payment_instruments \ -H 'Content-Type: application/json' \ -H 'Finix-Version: 2022-02-01' \ -u USsRhsHYZGBPnQw8CByJyEQW:8a14c2f9-d94b-4c72-8f5c-a62908e5b30e \ -X POST \ -d '{ "token": "TKiMxe323RE5Dq3wLVtG8kSW", "type": "TOKEN", "identity": "IDpYDM7J9n57q849o9E9yNrG" }' ``` ```json Payment Instruent { "id": "PIwWisLuZNwPBoLbCgQVTCoY", "application": "APgPDQrLD52TYvqazjHJJchM", "fingerprint": "FPRmYp7ejhA3yDjSor4A5Ji2D", "tags": { "card_name": "Business Card" }, "expiration_month": 12, "expiration_year": 2029, "bin": "400000", "last_four": "9979", "brand": "VISA", "card_type": "UNKNOWN", "name": "Amy White", "address": { "line1": "900 Metro Center Blv", "line2": null, "city": "San Francisco", "region": "CA", "postal_code": "94404", "country": "USA" }, "address_verification": "NO_MATCH", "security_code_verification": "UNMATCHED", "created_at": "2022-08-15T23:13:06.13Z", "updated_at": "2022-08-15T23:13:06.88Z", "instrument_type": "PAYMENT_CARD", "type": "PAYMENT_CARD", "currency": "USD", "identity": "IDgWxBhfGYLLdkhxx2ddYf9K", "_links": { "self": { "href": "https://finix.sandbox-payments-api.com/payment_instruments/PIwWisLuZNwPBoLbCgQVTCoY" }, "authorizations": { "href": "https://finix.sandbox-payments-api.com/payment_instruments/PIwWisLuZNwPBoLbCgQVTCoY/authorizations" }, "transfers": { "href": "https://finix.sandbox-payments-api.com/payment_instruments/PIwWisLuZNwPBoLbCgQVTCoY/transfers" }, "verifications": { "href": "https://finix.sandbox-payments-api.com/payment_instruments/PIwWisLuZNwPBoLbCgQVTCoY/verifications" }, "application": { "href": "https://finix.sandbox-payments-api.com/applications/APgPDQrLD52TYvqazjHJJchM" }, "identity": { "href": "https://finix.sandbox-payments-api.com/identities/IDgWxBhfGYLLdkhxx2ddYf9K" }, "updates": { "href": "https://finix.sandbox-payments-api.com/payment_instruments/PIwWisLuZNwPBoLbCgQVTCoY/updates" } } } ``` ### Step 3: Create a Trasnfer Finally, create a Transfer using the buyer's Payment Instruent as the `source`. This will debit funds directly from the buyer's bank account. ACH Direct Debits have `type: DEBIT`, and start with `state: PENDING`. The `ready_to_settle_at` field indicates when the `Transfer` will get batched into the next settlement. This field is updated asynchronously. ```shell ACH Transfer Request curl https://finix.sandbox-payments-api.com/transfers \ -H "Content-Type: application/json" \ -H 'Finix-Version: 2022-02-01' \ -USsRhsHYZGBPnQw8CByJyEQW:8a14c2f9-d94b-4c72-8f5c-a62908e5b30e \ -d '{ "amount": 6031, "currency": "USD", "fee": 603, "merchant": "MUeDVrf2ahuKc9Eg5TeZugvs", "source": "PIr1Ru7ewBkEYVVn7SP1u5FW", // [!code highlight] "tags": { "order_number": "21DFASJSAKAS" } }' ``` ```json ACH Transfer { "id": "TR6Gnj38UyPW3CoukdL9WaR1", "created_at": "2022-10-10T05:34:16.13Z", "updated_at": "2022-10-10T05:34:16.68Z", "additional_buyer_charges": null, "additional_healthcare_data": null, "address_verification": null, "amount": 662154, "amount_requested": 662154, "application": "APgPDQrLD52TYvqazjHJJchM", "currency": "USD", "destination": null, "externally_funded": "UNKNOWN", "failure_code": null, "failure_message": null, "fee": 0, "idempotency_id": null, "merchant": "MUeDVrf2ahuKc9Eg5TeZugvs", "merchant_identity": "IDuqZpDw28f2KK6YuDk4jNLg", "messages": [], "raw": null, "ready_to_settle_at": null, // [!code highlight] "security_code_verification": null, "source": "PImmCg3Po7oNi7jaZcXhfkEu", "state": "PENDING", // [!code highlight] "statement_descriptor": "FNX*FINIX FLOWERS", "subtype": "API", "tags": {}, "trace_id": "236e1149-9b83-4b79-bfaf-7ff810dcf601", "type": "DEBIT", // [!code highlight] "_links": { "application": { "href": "https://finix.sandbox-payments-api.com/applications/APgPDQrLD52TYvqazjHJJchM" }, "self": { "href": "https://finix.sandbox-payments-api.com/transfers/TR6Gnj38UyPW3CoukdL9WaR1" }, "merchant_identity": { "href": "https://finix.sandbox-payments-api.com/identities/IDuqZpDw28f2KK6YuDk4jNLg" }, "payment_instruments": { "href": "https://finix.sandbox-payments-api.com/transfers/TR6Gnj38UyPW3CoukdL9WaR1/payment_instruments" }, "reversals": { "href": "https://finix.sandbox-payments-api.com/transfers/TR6Gnj38UyPW3CoukdL9WaR1/reversals" }, "fees": { "href": "https://finix.sandbox-payments-api.com/transfers/TR6Gnj38UyPW3CoukdL9WaR1/fees" }, "disputes": { "href": "https://finix.sandbox-payments-api.com/transfers/TR6Gnj38UyPW3CoukdL9WaR1/disputes" }, "source": { "href": "https://finix.sandbox-payments-api.com/payment_instruments/PImmCg3Po7oNi7jaZcXhfkEu" }, "fee_profile": { "href": "https://finix.sandbox-payments-api.com/fee_profiles/FPvCQUcnsueN3Bc3zR1qCBG8" } } } ``` ## ACH Returns ACH Direct Debits can fail for multiple reasons, including: - Invalid bank account or routing number. - Buyer's bank account blocks ACH Direct Debits. - Insufficient funds from a buyer's bank account. - Buyer disputes an ACH Direct Debit. Most disputes arise within 3-5 business days of the transaction. However, buyers can dispute ACH Direct Debits for any reason up to 60 days after the payment got processed. ACH Direct Debits older than 60 days are guaranteed not to be disputed or get returned. When a ACH Direct Debit fails, Finix automatically creates an ACH Return to recover the original payment amount. ACH Returns are represented by Transfers with `type: REVERSAL` and `subtype: SYSTEM`. You can view ACH Returns in the Finix Dashboard. ![ACH Return](/assets/ach-return.693a05c12553f39008c719be213f4c19bc443b33216df5fd1cca1c44dd289e62.08ff7529.png) ```json ACH Return Example { "id": "TR4YKKnhbCk54EXCc7pGxgNx", "amount": "8000", "tags": { "result_message_0": "ReasonCode: R04", // [!code highlight] "result_message_1": "ReasonDescription: Invalid Account Number" // [!code highlight] }, "state": "SUCCEEDED", "trace_id": "8e608a61-eeac-477e-93bf-a3032bfc1352", "currency": "USD", "application": "APg5RS31BShqrRvwheH63A6F", "source": null, "destination": "PIp6s3WFMBbiugrUo5QveQ8u", "ready_to_settle_at": "2025-01-03T20:01:02.34Z", "externally_funded": "FALSE", "fee": "0", "statement_descriptor": null, "type": "REVERSAL", // [!code highlight] "fee_type": null, "messages": [], "raw": null, "created_at": "2025-01-02T20:10:01.56Z", "updated_at": "2025-01-02T20:10:01.56Z", "idempotency_id": null, "merchant_identity": "ID76b9UfSem4ekbCDpRCZjwu", "operation_key": null, "failure_code": null, "failure_message": null, "additional_buyer_charges": null, "additional_purchase_data": null, "additional_healthcare_data": null, "address_verification": null, "security_code_verification": null, "links": { "application": { "href": "https://finix.sandbox-payments-api.com/applications/APg5RS31BShqrRvwheH63A6N" }, "self": { "href": "https://finix.sandbox-payments-api.com/transfers/TR4YKKnhbCk54EXCc7pGxgNy" }, "merchant_identity": { "href": "https://finix.sandbox-payments-api.com/identities/ID76b9UfSem4ekbCDpRBZjwu" }, "payment_instruments": { "href": "https://finix.sandbox-payments-api.com/transfers/TR4YKKnhbCk54EXCc7pGxgNy/payment_instruments" }, "parent": { "href": "https://finix.sandbox-payments-api.com/transfers/TR6uHGCfpwNYwm2XXt5x32Y4" // [!code highlight] }, "destination": { "href": "https://finix.sandbox-payments-api.com/payment_instruments/PIp6s3WFMBbiugrUo5QveQ8u" }, "fee_profile": { "href": "https://finix.sandbox-payments-api.com/fee_profiles/FPmtT4MYmiAs1qjLjneQmk4d" } }, "device": null, "card_present_details": null, "amount_requested": 8000, "merchant": "MUwcLg8R5SsHeY7bg7rsjV2R", "receipt_last_printed_at": null, "split_transfers": [], "parent_transfer": "TR6uHGCfpwNYwm2XXt5x32Y4", "parent_transfer_trace_id": "8e608a61-eeac-477e-93bf-a3032bfc1352", "tip_amount": null, "related": { // Omitted for brevity }, "subtype": "SYSTEM" // [!code highlight] } ``` ### ACH Return Reason Codes The ACH Return Reason Code explains why the ACH Direct Debit failed and was ultimately returned. | Code | Description | | --- | --- | | `R01` | Insufficient funds in account | | `R02` | Account is closed | | `R03` | No account on file | | `R04` | Invalid account number | | `R05` | Unauthorized debit to consumer account | | `R06` | Returned at request of ODFI | | `R07` | Authorization revoked by customer | | `R08` | Payment stopped | | `R09` | Insufficient collected funds in account being charged | | `R10` | Customer advises not Authorized, notice not provided, improper source document, or amount of entry not accurately obtained from source document | | `R11` | Check truncation return | | `R12` | Account sold to another financial institution | | `R13` | Invalid ACH routing number | | `R14` | Representative payee is deceased or cannot continue in that capacity | | `R15` | Beneficiary or account holder other than representative payee deceased | | `R16` | Account funds have been frozen | | `R17` | Item returned because of invalid data; refer to addenda fro information | | `R18` | Improper effective date | | `R19` | Amount error | | `R20` | Account does not allow ACH transactions or limit for transactions has been exceeded | | `R21` | Invalid company identification | | `R22` | Invalid individual ID | | `R23` | Credit entry refused by receiver | | `R24` | Duplicate entry | | `R25` | Addenda record error | | `R26` | Mandatory field error | | `R27` | Trace number error | | `R28` | Routing/transit number check digit error | | `R29` | Corporate customer advised not authorized | | `R30` | RDFI not participant in check truncation program | | `R31` | Permissible return entry | | `R32` | RDFI non-settlement | | `R33` | Return of item | | `R34` | Limited participation ODFI | | `R35` | Return of improper debit entry | | `R36` | Return of improper credit entry | | `R37` | Source document presented for payment | | `R38` | Stop payment on source document | | `R39` | Improper source document | | `R40` | Return of item by government agency | | `R41` | Invalid Transaction Code | | `R42` | Routing/transit number check digit error | | `R43` | Invalid account number | | `R44` | Invalid individual ID | | `R45` | Invalid individual name or company name | | `R46` | Invalid representative payee indicator | | `R47` | Duplicate enrollment | | `R50` | State law affecting RCK acceptance | | `R51` | Item is ineligible, notice not provided, signature not genuine, or original item altered for adjustment entry | | `R52` | Stop payment on item | | `R53` | Item and ACH entry presented for payment | | `R61` | Misrouted return - RDFI for original entry has placed incorrect routing/transit number in RDFI identification field | | `R67` | Duplicate return | | `R68` | Untimely return - return was not sent within the established time frame | | `R69` | Field errors | | `R70` | Permissible return entry not accepted | | `R71` | Misrouted dishonored return -incorrect routing/transit number in RDFI identification field | | `R72` | Untimely return - dishonored return was not sent within the established time frame | | `R73` | Timely original return - RDFI certifies the original return entry was sent within established time frame for original returns | | `R74` | Corrected return - RDFI is correcting a previous return entry that was dishonored because it contained incomplete or incorrect information | | `R75` | Original return not a duplicate | | `R76` | No errors found | | `R80` | Cross-border payment coding error | | `R81` | Non-participant in cross-border program | | `R82` | Invalid foreign RDFI identification | | `R83` | Foreign RDFI unable to settle | | `R84` | Cross-border entry not processed by originating gateway operator | ## ACH Refunds You can refund ACH Direct Debits, similar to how you can refund card payments. To initiate an ACH Refund, create a Reveral Transfer with the `/reversals` endpoint. You'll pass in the `id` of the original Transfer you'd like to reverse. This creates a Transfer with `type: REVERSAL`, with the original transfer linked in `_links.parent`. ```shell Reversal Request # [!code word:TR6Gnj38UyPW3CoukdL9WaR1] curl https://finix.sandbox-payments-api.com/transfers/TR6Gnj38UyPW3CoukdL9WaR1/reversals \ -H "Content-Type: application/json" \ -u USsRhsHYZGBPnQw8CByJyEQW:8a14c2f9-d94b-4c72-8f5c-a62908e5b30e \ -d '{ "refund_amount": 6031, "tags": { "test": "refund" } }' ``` ```json Reversal { "id": "TRnqh2Mt6pnnPumxvenDmVjX", "created_at": "2022-10-10T05:36:19.18Z", "updated_at": "2022-10-10T05:36:19.27Z", "additional_buyer_charges": null, "additional_healthcare_data": null, "address_verification": null, "amount": 6031, "amount_requested": 6031, "application": "APgPDQrLD52TYvqazjHJJchM", "currency": "USD", "destination": "PImmCg3Po7oNi7jaZcXhfkEu", "externally_funded": "UNKNOWN", "failure_code": null, "failure_message": null, "fee": 0, "idempotency_id": null, "merchant": "MUeDVrf2ahuKc9Eg5TeZugvs", "merchant_identity": "IDuqZpDw28f2KK6YuDk4jNLg", "messages": [], "raw": null, "ready_to_settle_at": null, "security_code_verification": null, "source": null, "state": "PENDING", "statement_descriptor": "FNX*FINIX FLOWERS", "subtype": "API", "tags": { "test": "refund" }, "trace_id": "5cc0ab4e-3609-4a13-a9c3-b435328360c1", "type": "REVERSAL", // [!code highlight] "_links": { "application": { "href": "https://finix.sandbox-payments-api.com/applications/APgPDQrLD52TYvqazjHJJchM" }, "self": { "href": "https://finix.sandbox-payments-api.com/transfers/TRnqh2Mt6pnnPumxvenDmVjX" }, "parent": { "href": "https://finix.sandbox-payments-api.com/transfers/TR6Gnj38UyPW3CoukdL9WaR1" // [!code highlight] }, "destination": { "href": "https://finix.sandbox-payments-api.com/payment_instruments/PImmCg3Po7oNi7jaZcXhfkEu" }, "merchant_identity": { "href": "https://finix.sandbox-payments-api.com/identities/IDuqZpDw28f2KK6YuDk4jNLg" }, "payment_instruments": { "href": "https://finix.sandbox-payments-api.com/transfers/TRnqh2Mt6pnnPumxvenDmVjX/payment_instruments" }, "fee_profile": { "href": "https://finix.sandbox-payments-api.com/fee_profiles/FPvCQUcnsueN3Bc3zR1qCBG8" } } } ``` After the refund is processed, the Transfer's `state` will change to `SUCCEEDED`. Buyers will see the refund returned as a credit within 5 to 10 business days, depending on their bank. ACH Direct Debit refunds can’t get canceled once processed. ## Refunded ACH Returns Banks manage the ACH networks and often pre-fund transactions before debiting funds. In rare cases, ACH Refunds may be returned: - The bank account is closed or frozen. - The buyer made a mistake while entering their bank information. - The buyer requested to reverse a pre-funded transaction. When an ACH Refund is returned, Finix creates two Tranfers to credit the funds back to the original bank account. You'll receive `transfer` `created` webhooks. - Merchant credit: one `Transfer` to return the funds back to the original bank account. - Platform debit: one `Transfer` to debit funds that got credited proactively. ```json Transfer Created Webhook for ACH Merchant Credit { "type": "created", "entity": "transfer", "occurred_at": "2022-09-01T20:49:23.437609", "_embedded": { "transfers": [ { "idempotency_id": null, "amount": 6031, "trace_id": "FNX3Rs9AKNwUVoVu112D40ec5", "failure_code": null, "fee": 603, "destination": null, "raw": null, "created_at": "2022-09-01T20:36:08.13Z", "source": "PIr1Ru7ewBkEYVVn7SP1u5FW", "merchant": "MUeDVrf2ahuKc9Eg5TeZugvs", "merchant_identity": "IDuqZpDw28f2KK6YuDk4jNLg", "failure_message": null, "type": "REVERSAL", // [!code highlight] "tags": { "result_message_0": "ReasonCode: R03", "result_message_1": "ReasonDescription: No Account Unable to Locate Account" }, "statement_descriptor": "FNX*FINIX FLOWERS", "additional_buyer_charges": null, "ready_to_settle_at": null, "application": "APgPDQrLD52TYvqazjHJJchM", "updated_at": "2022-09-01T20:49:23.43", "subtype": "MERCHANT_CREDIT_ADJUSTMENT", // [!code highlight] "externally_funded": "UNKNOWN", "messages": [], "currency": "USD", "id": "TRzoL5FmpxIP2TRAmHKSlHgz", "state": "SUCCEEDED" } ] } } ``` ```json Transfer Created Webhook for ACH Platform Debit { "type": "created", "entity": "transfer", "occurred_at": "2022-09-01T20:49:23.437609", "_embedded": { "transfers": [ { "idempotency_id": null, "amount": 6031, "trace_id": "FNXff8f88c140908eb69f3321", "failure_code": null, "fee": 603, "destination": null, "raw": null, "created_at": "2022-09-01T20:36:08.13Z", "source": "PIr1Ru7ewBkEYVVn7SP1u5FW", "merchant": "MUeDVrf2ahuKc9Eg5TeZugvs", "merchant_identity": "IDuqZpDw28f2KK6YuDk4jNLg", "failure_message": null, "type": "REVERSAL", // [!code highlight] "statement_descriptor": "FNX*FINIX FLOWERS", "additional_buyer_charges": null, "ready_to_settle_at": null, "application": "APgPDQrLD52TYvqazjHJJchM", "updated_at": "2022-09-01T20:49:23.43", "subtype": "PLATFORM_DEBIT_ADJUSTMENT", // [!code highlight] "externally_funded": "UNKNOWN", "messages": [], "currency": "USD", "id": "TRoom5emPxiP1TRAmHcSjHgz", "state": "SUCCEEDED" } ] } } ```