ACH Direct Debits

Learn how to accept payments from US-based bank accounts.


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).


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:

DetailDescription
Bank CodeThe routing number of the buyer's bank account
Account NumberThe account number of the buyer's bank account
Buyer NameThe buyer's name

You can collect this bank account information using Tokenization Forms or SDKs, as well as our 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

Transfer StateDescription
PENDINGFinix is processing the ACH Direct Debit.
SUCCEEDEDFinix has accepted the ACH Direct Debit. The buyer's bank may or may not have accepted the payment yet.
FAILEDFinix 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.

ACH Timing

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.

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_ATTEMPTEDDefault value for new bank accounts that haven't been validated yet.
VALIDBank account was found and confirmed to accept ACH Direct Debits.
INVALIDBank 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.
INCONCLUSIVEBank 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 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.

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"
        }
    }'
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, as well as our Plaid integration.

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"
    }'
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.

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",
        "tags": {
            "order_number": "21DFASJSAKAS"
        }
    }'
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, 
    "security_code_verification": null,
    "source": "PImmCg3Po7oNi7jaZcXhfkEu",
    "state": "PENDING", 
    "statement_descriptor": "FNX*FINIX FLOWERS",
    "subtype": "API",
    "tags": {},
    "trace_id": "236e1149-9b83-4b79-bfaf-7ff810dcf601",
    "type": "DEBIT", 
    "_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

ACH Return Example
{
    "id": "TR4YKKnhbCk54EXCc7pGxgNx",
    "amount": "8000",
    "tags": {
        "result_message_0": "ReasonCode: R04", 
        "result_message_1": "ReasonDescription: Invalid Account Number"
    },
    "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", 
    "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"
        },
        "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"
}

ACH Return Reason Codes

The ACH Return Reason Code explains why the ACH Direct Debit failed and was ultimately returned.

CodeDescription
R01Insufficient funds in account
R02Account is closed
R03No account on file
R04Invalid account number
R05Unauthorized debit to consumer account
R06Returned at request of ODFI
R07Authorization revoked by customer
R08Payment stopped
R09Insufficient collected funds in account being charged
R10Customer advises not Authorized, notice not provided, improper source document, or amount of entry not accurately obtained from source document
R11Check truncation return
R12Account sold to another financial institution
R13Invalid ACH routing number
R14Representative payee is deceased or cannot continue in that capacity
R15Beneficiary or account holder other than representative payee deceased
R16Account funds have been frozen
R17Item returned because of invalid data; refer to addenda fro information
R18Improper effective date
R19Amount error
R20Account does not allow ACH transactions or limit for transactions has been exceeded
R21Invalid company identification
R22Invalid individual ID
R23Credit entry refused by receiver
R24Duplicate entry
R25Addenda record error
R26Mandatory field error
R27Trace number error
R28Routing/transit number check digit error
R29Corporate customer advised not authorized
R30RDFI not participant in check truncation program
R31Permissible return entry
R32RDFI non-settlement
R33Return of item
R34Limited participation ODFI
R35Return of improper debit entry
R36Return of improper credit entry
R37Source document presented for payment
R38Stop payment on source document
R39Improper source document
R40Return of item by government agency
R41Invalid Transaction Code
R42Routing/transit number check digit error
R43Invalid account number
R44Invalid individual ID
R45Invalid individual name or company name
R46Invalid representative payee indicator
R47Duplicate enrollment
R50State law affecting RCK acceptance
R51Item is ineligible, notice not provided, signature not genuine, or original item altered for adjustment entry
R52Stop payment on item
R53Item and ACH entry presented for payment
R61Misrouted return - RDFI for original entry has placed incorrect routing/transit number in RDFI identification field
R67Duplicate return
R68Untimely return - return was not sent within the established time frame
R69Field errors
R70Permissible return entry not accepted
R71Misrouted dishonored return -incorrect routing/transit number in RDFI identification field
R72Untimely return - dishonored return was not sent within the established time frame
R73Timely original return - RDFI certifies the original return entry was sent within established time frame for original returns
R74Corrected return - RDFI is correcting a previous return entry that was dishonored because it contained incomplete or incorrect information
R75Original return not a duplicate
R76No errors found
R80Cross-border payment coding error
R81Non-participant in cross-border program
R82Invalid foreign RDFI identification
R83Foreign RDFI unable to settle
R84Cross-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.

Reversal Request
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"
        }
    }'
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", 
    "_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"
        },
        "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.
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", 
                "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", 
                "externally_funded": "UNKNOWN",
                "messages": [],
                "currency": "USD",
                "id": "TRzoL5FmpxIP2TRAmHKSlHgz",
                "state": "SUCCEEDED"
            }
        ]
    }
}
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", 
                "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", 
                "externally_funded": "UNKNOWN",
                "messages": [],
                "currency": "USD",
                "id": "TRoom5emPxiP1TRAmHcSjHgz",
                "state": "SUCCEEDED"
            }
        ]
    }
}