--- title: "Android Component" description: "Add ACH Direct Debit to your Components integration." url: "https://docs.adyen.com/payment-methods/ach-direct-debit/android-component" source_url: "https://docs.adyen.com/payment-methods/ach-direct-debit/android-component.md" canonical: "https://docs.adyen.com/payment-methods/ach-direct-debit/android-component" last_modified: "2026-05-24T12:54:31+02:00" language: "en" --- # Android Component Add ACH Direct Debit to your Components integration. [View source](/payment-methods/ach-direct-debit/android-component.md) You can add ACH Direct Debit to your existing integration. The following instructions show only what you must add to your integration specifically for ACH Direct Debit. If an instruction on this page corresponds with a step in the main integration guide, it includes a link to that corresponding step of the main integration guide. What you must add to your integration depends on the [server-side flow](/online-payments/build-your-integration) that your integration uses: ## Sessions flow Component ### Before-You-Begin ## Requirements | Requirement | Description | | | -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | | **Integration type** | Make sure that you have an existing Sessions flow [Android Components integration](/online-payments/build-your-integration/sessions-flow?platform=Android). | | | **[API credentials](/development-resources/api-credentials/)** | To issue a refund using an API request, make sure you have the **Merchant allow bank-refund** role. | | | **[Customer Area roles](/account/user-roles)** | To issue a refund using the Customer Area, make sure you have the **Merchant allow bank-refund** role. | | | **Checkout API** | Make sure that you use Checkout API v68 or later. | | | **Webhooks** | Subscribe to [DIRECT\_DEBIT\_NOTICE\_OF\_CHANGE\_NOTIFICATION](https://docs.adyen.com/api-explorer/Webhooks/latest/post/DIRECT_DEBIT_NOTICE_OF_CHANGE_NOTIFICATION) webhooks to receive a notification when a shopper has outdated banking details. | | | **Setup steps** | Before you begin, [add ACH Direct Debit in your Customer Area](/payment-methods/add-payment-methods). | | ### Add-Parameters-Sessions-Request ## Add additional parameters to your /sessions request You do not need to add any parameters when you [create a payment session](/online-payments/build-your-integration/sessions-flow?platform=Android\&integration=Components#create-a-payment-session). ### Import-Component ## Import the Component for ACH Direct Debit To [import the library](/online-payments/build-your-integration/sessions-flow?platform=Android\&integration=Components#import) and include the module for ACH Direct Debit. ### Tab: With Jetpack Compose **Import the module with Compose** ```java implementation "com.adyen.checkout:ach:YOUR_VERSION" implementation "com.adyen.checkout:components-compose:YOUR_VERSION" ``` ### Tab: Without Jetpack Compose **Import the module without Compose** ```java implementation "com.adyen.checkout:ach:YOUR_VERSION" ``` ### Add-Configuration ## Add additional configuration for ACH Direct Debit [Add a configuration object](/online-payments/build-your-integration/sessions-flow?platform=Android\&integration=Components#3-optional-add-a-configuration-object) with the following parameters: | Parameter | Required | Description | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | [`setSubmitButtonVisible`](https://adyen.github.io/adyen-android/ach/com.adyen.checkout.ach/-a-c-h-direct-debit-configuration/-builder/set-submit-button-visible.html) | | Set to **false** to hide the submit button. The default is **true**. | | [`setAddressConfiguration`](https://adyen.github.io/adyen-android/ach/com.adyen.checkout.ach/-a-c-h-direct-debit-configuration/-builder/set-address-configuration.html) | | The configuration object for the address form that is shown to the shopper. The default is `ACHDirectDebitAddressConfiguration.FullAddress`. | | [`setShowStorePaymentField`](https://adyen.github.io/adyen-android/ach/com.adyen.checkout.ach/-a-c-h-direct-debit-configuration/-builder/set-show-store-payment-field.html) | | Set to **false** to hide the checkbox for saving the payment details for future payments. The default is **true**. | **Add a configuration object** ```kotlin achDirectDebit { setShowStorePaymentField(false) setAddressConfiguration( ACHDirectDebitAddressConfiguration.FullAddress( supportedCountryCodes = listOf("US", "PR") ) ) } ``` ### Launch-And-Show ## Launch and show the Component for ACH Direct Debit To [create the Component](/online-payments/build-your-integration/sessions-flow?platform=Android\&integration=Components#launch-and-show) for ACH Direct Debit, use the `ACHDirectDebitComponent` class. ### Tab: With Jetpack Compose **Launch and show the Component** ```kotlin import com.adyen.checkout.components.compose.get // Get the payment method. val paymentMethod = checkoutSession.getPaymentMethod(PaymentMethodTypes.ACH) @Composable private fun ComposableACHDirectDebitComponent() { // Keep a reference to this Component in case you need to access it later. val achComponent = ACHDirectDebitComponent.PROVIDER.get( checkoutSession = checkoutSession, paymentMethod = paymentMethod, configuration = checkoutConfiguration, componentCallback = callback, // This key is required to ensure a new Component gets created for each different screen or payment session. // Generate a new value for this key every time you need to reset the Component. key = "YOUR_UNIQUE_KEY_FOR_THIS_COMPONENT", ) // This is your composable, a wrapper around our xml view. AdyenComponent( component = achComponent, modifier = YOUR_MODIFIER, ) } ``` ### Tab: Without Jetpack Compose ```kotlin // Get the payment method. val paymentMethod = checkoutSession.getPaymentMethod(PaymentMethodTypes.ACH) val achComponent = ACHDirectDebitComponent.PROVIDER.get( activity, // Your activity or fragment. checkoutSession, paymentMethod, checkoutConfiguration, componentCallback ) // Attach the Component to your view. binding.achView.attach(achComponent, activity) // Your activity or fragment. ``` ### Payment-Outcome ## Get the payment outcome Your integration [gets the payment outcome](/online-payments/build-your-integration/sessions-flow?platform=Android\&integration=Components#get-the-payment-outcome). Note that after we successfully received your request, it may take up to five business days to know whether the payment was authorised by the bank. If the bank authorised the payment, it will appear in the [Settlement details report](/reporting/settlement-detail-report). If the bank failed to authorise the payment, you will receive a [CHARGEBACK webhook](#chargebacks). ## Test and go live You can test payments as well as chargebacks. ### Test the payment flow Before making live payments, use the following account details to test your integration. | `ownerName` | `bankAccountNumber` | `bankLocationId` (routing number) | | ----------- | --------------------------------------------------------------- | -------------------------------------------------------------------------------- | | Any name | Any correctly formatted account number. Example: **1234567890** | Any correctly formatted routing number. Examples: **011000138** or **121000358** | ### Test the chargeback flow You can test the chargeback flow by making test payments with an `ownerName` value that consists of **chargeback:** followed by an ACH return [reason code](/risk-management/chargeback-guidelines/ach-chargebacks/#ach-retry). For example, **chargeback:R01**. The other account details to use are the same as when testing payments. For instructions, see [Test a chargeback scenario](/risk-management/chargeback-guidelines/ach-chargebacks#test-a-chargeback-scenario). ## Advanced flow Component ## Requirements | Requirement | Description | | | -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | | **Integration type** | Make sure that you have an existing Advanced flow [Android Components integration](/online-payments/build-your-integration/advanced-flow?platform=Android). | | | **[API credentials](/development-resources/api-credentials/)** | To issue a refund using an API request, make sure you have the **Merchant allow bank-refund** role. | | | **[Customer Area roles](/account/user-roles)** | To issue a refund using the Customer Area, make sure you have the **Merchant allow bank-refund** role. | | | **Webhooks** | Subscribe to [DIRECT\_DEBIT\_NOTICE\_OF\_CHANGE\_NOTIFICATION](https://docs.adyen.com/api-explorer/Webhooks/latest/post/DIRECT_DEBIT_NOTICE_OF_CHANGE_NOTIFICATION) webhooks to receive a notification when a shopper has outdated banking details. | | | **Setup steps** | Before you begin, [add ACH Direct Debit in your Customer Area](/payment-methods/add-payment-methods). | | ### Import ## Import the Component for ACH Direct Debit To [import the library](/online-payments/build-your-integration/advanced-flow/?platform=Android\&integration=Components#import) and include the module for ACH Direct Debit. ### Tab: With Jetpack Compose **Import the module with Compose** ```java implementation "com.adyen.checkout:ach:YOUR_VERSION" implementation "com.adyen.checkout:components-compose:YOUR_VERSION" ``` ### Tab: Without Jetpack Compose **Import the module without Compose** ```java implementation "com.adyen.checkout:ach:YOUR_VERSION" ``` ### Add Configuration ## Add additional configuration for ACH Direct Debit [Add a configuration object](/online-payments/build-your-integration/advanced-flow/?platform=Android\&integration=Components#3-optional-add-a-configuration-object) with the following parameters: | Parameter | Required | Description | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | [`setSubmitButtonVisible`](https://adyen.github.io/adyen-android/ach/com.adyen.checkout.ach/-a-c-h-direct-debit-configuration/-builder/set-submit-button-visible.html) | | Set to **false** to hide the submit button. The default is **true**. | | [`setAddressConfiguration`](https://adyen.github.io/adyen-android/ach/com.adyen.checkout.ach/-a-c-h-direct-debit-configuration/-builder/set-address-configuration.html) | | The configuration object for the address form that is shown to the shopper. The default is `ACHDirectDebitAddressConfiguration.FullAddress`. | | [`setShowStorePaymentField`](https://adyen.github.io/adyen-android/ach/com.adyen.checkout.ach/-a-c-h-direct-debit-configuration/-builder/set-show-store-payment-field.html) | | Set to **false** to hide the checkbox for saving the payment details for future payments. The default is **true**. | **Add a configuration object** ```kotlin achDirectDebit { setShowStorePaymentField(false) setAddressConfiguration( ACHDirectDebitAddressConfiguration.FullAddress( supportedCountryCodes = listOf("US", "PR") ) ) } ``` ### Launch And Show ## Launch and show the Component for ACH Direct Debit To [create the Component](/online-payments/build-your-integration/advanced-flow/?platform=Android\&integration=Components#launch-and-show) for ACH Direct Debit, use the `ACHDirectDebitComponent` class. ### Tab: With Jetpack Compose **Launch and show the Component** ```kotlin import com.adyen.checkout.components.compose.get // Create the payment method object from the /paymentMethods response. val paymentMethod = paymentMethodsApiResponse?.paymentMethods.orEmpty().firstOrNull { it.type == PaymentMethodTypes.ACH } @Composable private fun ComposableACHDirectDebitComponent() { // Keep a reference to this Component in case you need to access it later. val achComponent = ACHDirectDebitComponent.PROVIDER.get( paymentMethod = paymentMethod, configuration = checkoutConfiguration, componentCallback = callback, // This key is required to ensure a new Component gets created for each different screen or payment session. // Generate a new value for this key every time you need to reset the Component. key = "UNIQUE_KEY_PER_COMPONENT", ) // This is your composable, a wrapper around our xml view. AdyenComponent( component = achComponent, modifier = YOUR_MODIFIER, ) } ``` ### Tab: Without Jetpack Compose ```kotlin // Create the payment method object from the /paymentMethods response. val paymentMethod = paymentMethodsApiResponse?.paymentMethods.orEmpty().firstOrNull { it.type == PaymentMethodTypes.ACH } val achComponent = ACHDirectDebitComponent.PROVIDER.get( activity, // Your activity or fragment. paymentMethod, checkoutConfiguration, componentCallback, ) //Attach the Component to your view. binding.achView.attach(achComponent, activity) // Your activity or fragment. ``` ### Add Parameters Payments Request ## Add additional parameters to your /payments request You do not need to add any parameters to the [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request when you [make a payment](/online-payments/build-your-integration/advanced-flow/?platform=Android\&integration=Components#make-a-payment). ### Payment-Outcome ## Get the payment outcome Your integration [gets the payment outcome](/online-payments/build-your-integration/advanced-flow/?platform=Android\&integration=Components#get-the-payment-outcome). Note that after we successfully received your request, it may take up to five business days to know whether the payment was authorised by the bank. If the bank authorised the payment, it will appear in the [Settlement details report](/reporting/settlement-detail-report). If the bank failed to authorise the payment, you will receive a [CHARGEBACK webhook](#chargebacks). ## Test and go live You can test payments as well as chargebacks. ### Test the payment flow Before making live payments, use the following account details to test your integration. | `ownerName` | `bankAccountNumber` | `bankLocationId` (routing number) | | ----------- | --------------------------------------------------------------- | -------------------------------------------------------------------------------- | | Any name | Any correctly formatted account number. Example: **1234567890** | Any correctly formatted routing number. Examples: **011000138** or **121000358** | ### Test the chargeback flow You can test the chargeback flow by making test payments with an `ownerName` value that consists of **chargeback:** followed by an ACH return [reason code](/risk-management/chargeback-guidelines/ach-chargebacks/#ach-retry). For example, **chargeback:R01**. The other account details to use are the same as when testing payments. For instructions, see [Test a chargeback scenario](/risk-management/chargeback-guidelines/ach-chargebacks#test-a-chargeback-scenario). ## See also * [Account validation with giact](/payment-methods/ach-direct-debit/verification-with-giact) * [Tokenization](/online-payments/tokenization) * [ACH Direct Debit chargebacks](/risk-management/chargeback-guidelines/ach-chargebacks)