> ## Documentation Index
> Fetch the complete documentation index at: https://docs.argyle.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Direct deposit switching

> Let users securely switch their direct deposit to your bank, or add a debit card you have issued them to their gig platform for instant payouts.

After a user connects a payroll account through Argyle Link, you can ask them to:

* Redirect their pay, in whole or in part, to a new or existing bank account
* Add a debit card for instant payouts on their gig platform

![Gif of the direct deposit switching process in Argyle Link.](https://res.cloudinary.com/argyle-media/image/upload/f_auto/v1673306460/docs-2022/Guides/Argyle%20Link/Advanced%20Link%20Flows/Direct%20deposit%20switching/DDS_2)

## Set up

Our direct deposit switching (DDS) solution for website and application integrations is outlined below. For a **no-code solution**, visit our [DDS through Console guide](/legacy/guides/argyle-link/flows/direct-deposit-switching#dds-through-console).

### Initialize Argyle Link for DDS

Argyle Link is the front-end application through which users can connect their payroll accounts. Our [embedding Link](/legacy/guides/argyle-link/embed/web) guides cover how to initialize this payroll connection process in your application.

Add the following lines to your Argyle Link initialization to include an additional step for DDS after a user connects a payroll account:

```json theme={}
payDistributionUpdateFlow: true,
payDistributionConfig: "<Your encrypted payDistributionConfig>"
```

* Set `payDistributionUpdateFlow` to `true` to enable the DDS flow after a user connects a payroll account.
* Set `payDistributionConfig` to an encrypted string representing your [DDS configuration](/legacy/api-reference/dds-configurations). This configuration determines the user's DDS experience, and contains any relevant bank account or debit card information.
* The DDS configuration must be [encrypted using the API](/legacy/api-reference/dds-configurations#encrypt) to ensure sensitive banking and card information is never exposed.

<Note>
  Argyle is PCI DSS Level 2 compliant. Learn more about security and compliance at Argyle [here](https://argyle.com/legal/security/).
</Note>

#### Example code:

<Accordion title="Unencrypted DDS configuration example object">
  ```json theme={}
  {
      "bank_account": {
          "bank_name": "YellowHorizon",
          "account_type": "checking",
          "routing_number": "123456789",
          "account_number": "1234567890"
      },
      "entire_allocation": true,
      "allow_editing": false
  }
  ```
</Accordion>

<Accordion title="Example payDistributionConfig after encryption">
  ```json theme={}
  "CiQAB/5lefxxuvf+DXqPvpHAaEb41ZPpLfmpyjHT8ZlWxuvw9W4ShAIA8Gmka+gDv12aUmQgX7bZVRxOLK1isfYWHRHXRUTB9uYAXT9MHGOenaKf5IiqnXeTqMrKS5/PVcpZ3o6iLkcbYKED3IFp0uwFsD9yhRPGQhrC19ihCynKeSLC7mtp18DvM3vDulpo8mbakKrTNstlWHqPNNnx1zhPr8thSOqLamEo5s0QDGV6XidYikQQaD43zjqQQbWypVedUknbB6t3jilazsn629BBM9+XyVqjI7MEpg+dImbgD7t6I+AR5YuJjXXWoxxeTepRqGCnXePR9Z+J+BagPHBD7ov7jpqBWB9GxO+BiojcaZtAw0aLe5RLr+iysrmE8p1E1iRjXoESGDjowQ=="
  ```
</Accordion>

<Accordion title="Examples of full Argyle Link initializations for DDS">
  <Tabs>
    <Tab title="Web">
      ```html theme={}
      <!DOCTYPE html>
      <html>

      <head>
          <meta charset="utf-8" />
      </head>

      <body>
          <script src="https://plugin.argyle.com/argyle.web.v3.js"></script>
          <script type="text/javascript">
            const argyle = Argyle.create({
                linkKey: 'YOUR_LINK_KEY',
                apiHost: 'https://api-sandbox.argyle.com/v1',
                payDistributionUpdateFlow: true,
                payDistributionConfig: "CiQAB/5leUoeFUzgHsoDLSjZqnh4pk+S4dMkrXIi/MORRH2nLRYS8wEAfV+QlRZrPnvXdWJOQ4pKzBoJzJicJUIa4y7q3RSUVi2s8pRiG15i1SwdTeJ++imc+tInpDk5G69EZj4HCef2BBhctysILGdi3nYMRoNv8dVSS5wUJUbod7oG1PMBi7CeObu73A91nmxL6edSumWQMMqmd/4nWHOHHNtb4fttgnKwCf1E7ZBLKRCYnIe/+EopIF3D470qi20fCDL9zvY0a1N9uKg9nnFueIzo04haEY9ujh9ErL+HLdve1ExV5VvTkZkH4mAulqKcTpS8VHCAM3sqFTLExSJhbqRUzeS5DLnsVReFfUaKHR/7I/7sloyy+cU="
            })
            argyle.open()
          </script>
      </body>

      </html>
      ```
    </Tab>

    <Tab title="iOS">
      ```swift theme={}
      let PD_CONFIG = "CiQAB/5leUoeFUzgHsoDLSjZqnh4pk+S4dMkrXIi/MORRH2nLRYS8wEAfV+QlRZrPnvXdWJOQ4pKzBoJzJicJUIa4y7q3RSUVi2s8pRiG15i1SwdTeJ++imc+tInpDk5G69EZj4HCef2BBhctysILGdi3nYMRoNv8dVSS5wUJUbod7oG1PMBi7CeObu73A91nmxL6edSumWQMMqmd/4nWHOHHNtb4fttgnKwCf1E7ZBLKRCYnIe/+EopIF3D470qi20fCDL9zvY0a1N9uKg9nnFueIzo04haEY9ujh9ErL+HLdve1ExV5VvTkZkH4mAulqKcTpS8VHCAM3sqFTLExSJhbqRUzeS5DLnsVReFfUaKHR/7I/7sloyy+cU=" // your encrypted pay distribution config

      _ = Argyle.shared
          .loginWith(linkKey: "YOUR_LINK_KEY", apiHost: "https://api-sandbox.argyle.com/v1")
          .payDistributionUpdateFlow(true) 
          .payDistributionConfig(PD_CONFIG) 
          .resultListener(self)

      let argyle = Argyle.shared.controller
      argyle.modalPresentationStyle = .fullScreen
      self.present(argyle, animated: true, completion: nil)
      ```
    </Tab>

    <Tab title="Android">
      ```kotlin theme={}
      val PD_CONFIG = "CiQAB/5leUoeFUzgHsoDLSjZqnh4pk+S4dMkrXIi/MORRH2nLRYS8wEAfV+QlRZrPnvXdWJOQ4pKzBoJzJicJUIa4y7q3RSUVi2s8pRiG15i1SwdTeJ++imc+tInpDk5G69EZj4HCef2BBhctysILGdi3nYMRoNv8dVSS5wUJUbod7oG1PMBi7CeObu73A91nmxL6edSumWQMMqmd/4nWHOHHNtb4fttgnKwCf1E7ZBLKRCYnIe/+EopIF3D470qi20fCDL9zvY0a1N9uKg9nnFueIzo04haEY9ujh9ErL+HLdve1ExV5VvTkZkH4mAulqKcTpS8VHCAM3sqFTLExSJhbqRUzeS5DLnsVReFfUaKHR/7I/7sloyy+cU=" // your encrypted pay distribution config

      val config = ArgyleConfig.Builder()
          .loginWith("YOUR_LINK_KEY", "https://api-sandbox.argyle.com/v1", "")
          .payDistributionConfig(PD_CONFIG)
          .payDistributionUpdateFlow(true) 
          .setCallbackListener(object : Argyle.ArgyleResultListener {
              // callbacks 
          })
          .build()

      Argyle.instance.init(config)
      Argyle.instance.startSDK(this)
      ```
    </Tab>

    <Tab title="React Native">
      ```js theme={}
      import ArgyleSdk from '@argyleio/argyle-plugin-react-native'

      const PD_CONFIG = 'CiQAB/5leUoeFUzgHsoDLSjZqnh4pk+S4dMkrXIi/MORRH2nLRYS8wEAfV+QlRZrPnvXdWJOQ4pKzBoJzJicJUIa4y7q3RSUVi2s8pRiG15i1SwdTeJ++imc+tInpDk5G69EZj4HCef2BBhctysILGdi3nYMRoNv8dVSS5wUJUbod7oG1PMBi7CeObu73A91nmxL6edSumWQMMqmd/4nWHOHHNtb4fttgnKwCf1E7ZBLKRCYnIe/+EopIF3D470qi20fCDL9zvY0a1N9uKg9nnFueIzo04haEY9ujh9ErL+HLdve1ExV5VvTkZkH4mAulqKcTpS8VHCAM3sqFTLExSJhbqRUzeS5DLnsVReFfUaKHR/7I/7sloyy+cU=' // your encrypted pay distribution config

      // Configure the SDK before hand, once. only call ArgyleSdk.start() when the UI is needed
      ArgyleSdk.loginWith("YOUR_LINK_KEY", "https://api-sandbox.argyle.com/v1", "")
      ArgyleSdk.payDistributionConfig(PD_CONFIG)
      ArgyleSdk.payDistributionUpdateFlow(true)

      // Launch the SDK
      ArgyleSdk.start()
      ```
    </Tab>
  </Tabs>
</Accordion>

### Structure DDS configuration

1. Decide which [DDS flow](/legacy/guides/argyle-link/flows/direct-deposit-switching#dds-flows) to perform. This determines what to include in your DDS configuration, which in turn determines which screens and settings are shown to the user after they connect a payroll account.
2. Structure your DDS configuration as an object. Depending on your use case, this object can include:

* `bank_account` - an object containing bank account and routing information.
* `<allocation settings>` - listed key:value pairs or objects that determine what pay allocations are suggested to the user when redirecting payments to the provided bank\_account.
* `card` or `card_source` - objects included when adding debit cards to gig platforms. See our add a debit card section below for more information.

3. [Encrypt](/legacy/api-reference/dds-configurations#encrypt) this DDS configuration object using the API.
4. Use the encrypted string returned by the API in step 3 as your `payDistributionConfig` when [initializing Argyle Link for DDS](/legacy/guides/argyle-link/flows/direct-deposit-switching#initialize-argyle-link-for-dds).

### Customizations

The user's DDS experience takes place within Argyle Link, the same front-end application they used to connect their payroll accounts.

You can [tailor Argyle Link's appearance](/legacy/guides/argyle-link/customize) to your brand, or restrict which payroll accounts a user can connect to [only those that support DDS](/legacy/guides/argyle-link/customize#display-only-link-items-that-allow-direct-deposit-switching).

In Argyle Console:

1. Create a new customization using [Flows](https://console.argyle.com/flows).
2. Enable the setting **"Only show Link items that support direct deposit switching"**.

<Note>
  Once this setting is enabled, only payroll systems supporting the DDS configuration you provide will be shown to the user.
</Note>

3. Tailor Argyle Link's appearance to your brand if needed.
4. Save and apply your customization by including the following line in your Argyle Link initialization:

   ```json theme={}
   customizationId: "<Your customization ID (e.g. P2R93PEL) found in Link Customizer>"
   ```

### Sandbox testing

You can test your DDS configuration and customizations with [Flows](https://console.argyle.com/flows) in Argyle Console. This allows you to simulate a user's DDS experience and make any adjustments necessary.

1. Enable **Sandbox mode** using the toggle in the upper-left.
2. Select your customization from the **“Select Link customization”** dropdown.
3. Enable **“Simulate a direct deposit switch”** using the toggle in the lower-right.
4. Select “Custom” from the **“Direct deposit scenario”** dropdown.
5. Copy and paste the encrypted `payDistributionConfig` you would like to test.

![Add a customization from the dropdown in Link Emulator that appears when deposit switching is selected.](https://res.cloudinary.com/argyle-media/image/upload/f_auto/v1669074998/docs-2022/Guides/Argyle%20Link/Advanced%20Link%20Flows/Direct%20deposit%20switching/DDS_sandbox_testing)

## DDS flows

Which of the below DDS flows you would like the user to perform determines what to include in your DDS configuration. The DDS configuration is then encrypted via the API and used as the `payDistributionConfig` when initializing Argyle Link for DDS.

### Add a bank account

Include a `bank_account` object and `<allocation settings>` in your DDS configuration.

#### Full paycheck

**User cannot restore previous bank accounts or adjust their pay allocations:**

<Accordion title="Unencrypted DDS configuration example object">
  ```json theme={}
  {
      "bank_account": {
          "bank_name": "YellowHorizon",
          "routing_number": "084101234",
          "account_number": "9483746361234",
          "account_type": "checking"
      },
      "entire_allocation": true,
      "allow_editing": false
  }
  ```
</Accordion>

<Accordion title="Encrypted payDistributionConfig (for Sandbox testing)">
  ```json theme={}
  "CiQAB/5lecrbJVrkdodwk4sgqacFNCiaH638IgDAHa8/peRjEEoShwIA8Gmka0Ea+JAa75M5HxfTckMklvPVvRxPYV3ND+YisxMhcHk6Fig0bwUUJiotuw/L5YkbHysTMPU6PSvXnHs19lNDZfVO6qpo44U6eMRdqO65HC864QEEi5n/u7QQT3DcG43RiVoRCnDiBlcdGIOPxth+gX6JgygigFHLEFhfOKWaQdyOmHDuf9cZNxp3M26IBEEtgmznl4oSm1qFt6ZzMcvdvKd2nOMS5co3Nc4f6F67GlnCRHEjzszBUnkgpsj60KFKggQ0e/CRQWi5pM/wa7UCb80LAKKm8Tl07kDJVFZcb9rsGwcfPY8ZCxcD0MtV/Q+yflCbaLL4RYcKXCBZXv0yOJEhxw=="
  ```
</Accordion>

![Gif showing the full paycheck direct deposit switch process in Argyle Link.](https://res.cloudinary.com/argyle-media/image/upload/f_auto/v1673306307/docs-2022/Guides/Argyle%20Link/Advanced%20Link%20Flows/Direct%20deposit%20switching/DDS_1)

**User is allowed to restore previous bank accounts and adjust their pay allocations:**

<Accordion title="Unencrypted DDS configuration example object">
  ```json theme={}
  {
      "bank_account": {
          "bank_name": "YellowHorizon",
          "routing_number": "084101234",
          "account_number": "9483746361234",
          "account_type": "checking"
      },
      "entire_allocation": true,
      "allow_editing": true
  }
  ```
</Accordion>

<Accordion title="Encrypted payDistributionConfig (for Sandbox testing)">
  ```json theme={}
  "CiQAB/5leYyoOyN3G5bVYap9kIGN3sExAqnDC0ZSZobxb9Zrew8ShgIA8Gmka+Kg8+ZmA9C1gqXEO9dW2n1SzPiMnfeOl4Az1dFFddnGOrPj9QNcNkG6g+Qummr2ebAaI27epVn0N2opzFU+EpL1XrYwMOmAEb1/iODTDZh52P7gxnzNu0mw9/3Q0rV+9aAiQfSqppn+XWIN3M3TdLr0A2c3LbZ3foEAOhNSVnvTcnDV8ZXuUjxPx6SL2DWpsZY8DrhA0xlfEisyVo9UVgqMRBAnYCLidVmj0iHqCQil/oGdwaW2NbfVuf3gFQN9g97wCBfD0kQV78J4KvxV99cMmJEVHjzATXwUKPqW+dNK0vKlPvDQ91WOvyXQaZ471s8iIjXlooBz8oySSObfYBJ2"
  ```
</Accordion>

![Image showing the adjustable full paycheck direct deposit switch process in Argyle Link.](https://res.cloudinary.com/argyle-media/image/upload/f_auto/v1669075872/docs-2022/Guides/Argyle%20Link/Advanced%20Link%20Flows/Direct%20deposit%20switching/DDS_entire_paycheck_adjustments)

#### Partial paycheck

We recommend including both `percent_allocation` and `amount_allocation` with whole number values in your DDS configuration for partial paychecks. Because some payroll systems only support one format, either amount values or percent values, this maximizes the number of payroll systems that will support your DDS configuration.

If both `percent_allocation` and `amount_allocation` are included in your DDS configuration and the user's payroll system supports both formats, the user will be shown an initial screen allowing them to select which format they prefer:

![Users can adjust between a specific amount or a percentage when allocating their paychecks.](https://res.cloudinary.com/argyle-media/image/upload/f_auto/v1669154555/docs-2022/Guides/Argyle%20Link/Advanced%20Link%20Flows/Direct%20deposit%20switching/DDS_partial_paycheck_still_image)

An exception to including both `percent_allocation` and `amount_allocation` would be if you are only interested in receiving a specific dollar amount, usually in connection with a loan repayment. In this case you would only include `amount_allocation`.

**You would like to receive an *exact amount* of the user's paycheck:**

<Accordion title="Unencrypted DDS configuration example object">
  ```json theme={}
  {
      "bank_account": {
          "bank_name": "YellowHorizon",
          "routing_number": "084101234",
          "account_number": "9483746361234",
          "account_type": "checking"
      },
      "amount_allocation": {
          "value": "177",
          "min_value": "177",
          "max_value": "177"
      }
  }
  ```
</Accordion>

<Accordion title="Encrypted payDistributionConfig (for Sandbox testing)">
  ```json theme={}
  "CiQAB/5leftv/h7DdBqhJxkWPVkEv4xQw0eCqjEb184UeSlWCrESowIA8Gmka4AB+A07Ny5WYldfxP+rY00lThGucMZqOUDM5b1j7tte0aM8Fn6usa/Xwy6FMsT9dV+htKU04K1Z+r3uLBkWVgOw2G0K7SN+2wKz//NUOudTjzBYq80MsePDDLrDr2uYCGiUWHlciYkhEUB6jwQ7KN1/KpIQd5PfvjDk+Gbds3JTq1q2PbQIH87l46YZgdrdZkqPmaIbVYLdZLa1NHgK4joRvqKvYgaJ66i+m7C2v2W8St/K/6A3skq2yCPSMSawNXOVzGZQdp2EvWd61wvaMcZ/CHxnh6OhN+iwkGxO/PHxd63yD1z0+ic/N9ljsx0xZGpoIihFm5AQhcY7A6o5glVhT3/aP5uqvs+DvDduWTjprGLHqql2HvUd1lp+AZU="
  ```
</Accordion>

![Image showing an exact partial amount being suggested in Argyle Link for a direct deposit switch.](https://res.cloudinary.com/argyle-media/image/upload/f_auto/v1669076916/docs-2022/Guides/Argyle%20Link/Advanced%20Link%20Flows/Direct%20deposit%20switching/DDS_partial_paycheck_exact)

**You would like to receive an amount or percentage of the user's paycheck within a certain *range*:**

<Accordion title="Unencrypted DDS configuration example object">
  ```json theme={}
  {
      "bank_account": {
          "bank_name": "YellowHorizon",
          "routing_number": "084101234",
          "account_number": "9483746361234",
          "account_type": "checking"
      },
      "percent_allocation": {
          "value": "21",
          "min_value": "10",
          "max_value": "30"
      },
      "amount_allocation": {
          "value": "177",
          "min_value": "50",
          "max_value": "250"
      }
  }
  ```
</Accordion>

<Accordion title="Encrypted payDistributionConfig (for Sandbox testing)">
  ```json theme={}
  "CiQAB/5leYjHBRtCDh3aadVwSYxQA6GlbzMgOtifkK/PxvWUoxgS7wIA8Gmka9zAluMIDbNzeLkw788DAn5JHBd+Y1upW7HnlmwMwU6XUa/NwRh1B0aUJoRletrmvR/hNcCqw93rQuvlu/JZ8JEP8rCNKAUMYU0OrYbP7+3JP0x5hhJD6HwQruN0edhOixMq/mzsJYiBllJcPBb214PkqTJ7wNczJpPY8H1P8pJOVAuYHTUqhj2WGI/2mg8ZxyOhllX00QTCSWWXmy9OtIvl0dEtPAqpcTk22AXhWPFWcS9t35tLH/xH5Y8T7BC48s/bkpWmQWjUS1rxnJVdTMuqyxwcnuzhw4MF3K1GMAqE3AycT30t0TZ7EV1r3I/4IPmg5zorppbsRClCqMSdVsIMIqIhginZxjFhClsDA0UZHg/VSX6LEFwU1ZzF6PK7TyoinO3iE6zx5oFKZ/GBLAbeoNarwlGl/bCt8GsUtIDcfj6htvfuL7helfwNN3X8xcoiZ0PVMu8WJRr1ITX+dMnOKkYPEiyIEwNA"
  ```
</Accordion>

![Image showing an allowed range being accepted for a partial paycheck deposit switch in Argyle Link.](https://res.cloudinary.com/argyle-media/image/upload/f_auto/v1669077212/docs-2022/Guides/Argyle%20Link/Advanced%20Link%20Flows/Direct%20deposit%20switching/DDS_partial_paycheck_range)

**You would like to receive a *minimum* amount or percentage of the user's paycheck, but do not have a maximum limit:**

<Accordion title="Unencrypted DDS configuration example object">
  ```json theme={}
  {
      "bank_account": {
          "bank_name": "YellowHorizon",
          "routing_number": "084101234",
          "account_number": "9483746361234",
          "account_type": "checking"
      },
      "percent_allocation": {
          "value": "21",
          "min_value": "10"
      },
      "amount_allocation": {
          "value": "177",
          "min_value": "50"
      }
  }
  ```
</Accordion>

<Accordion title="Encrypted payDistributionConfig (for Sandbox testing)">
  ```json theme={}
  "CiQAB/5lebHgXF4fFRTlsfzX431xvwAaNShjFmrpH0EcPhOYdgUSyAIA8Gmka4fEfFZMVmujjTv/38EGkU2bIqlhqOxB1wQpd49m/orKuzG+hDVnBxsP5f4LIkmahwWa/2ODm9KUCQw/DtFMuY2zRK1cSy2CqyzpWa1Gh8ecaOlqaatt2dcGnq8hmzM6uyrJfPTqt3J6VcLyEZ2jhz8nyDwHJAYnR+Xb6hGzJlWSCNJLc46cp0x4158U4tMWnBj3IiUhHs9/1x0IjLxcyLoNpRctHsdC7XGULDFstuv2axxNL6YLiN8R+0XCN75zEnaTIPBKrd7bkzCYuD+HX5JzzThWdPWAxwmqT2cdubIG2JbKcYKu8lYOSe+SHMYud2NZEt97i6qbkRqPGRWTz46+OLzoaUj8WKOn1QDnaaXpMoYUndy8of1QXiRlpXA8S7Djuge5o/SVCicn4puqlZiGMDGmgkVlHAC6I0kAAqsUsOgg"
  ```
</Accordion>

### Add a debit card

![The process of adding a debit payout card to a gig platform in Argyle Link.](https://res.cloudinary.com/argyle-media/image/upload/f_auto/v1669077525/docs-2022/Guides/Argyle%20Link/Advanced%20Link%20Flows/Direct%20deposit%20switching/Add_debit_card_only)

Many gig economy platforms support instant payouts to debit cards for earned wages. You can check which employers support this feature using the [`/link-items`](/legacy/api-reference/link-items) API endpoint.

Your DDS configuration for adding debit cards will depend on whether you have PCI DSS compliance, which is required for managing sensitive data like card numbers and CVV2 security codes.

<Note>
  Argyle is PCI DSS Level 2 compliant. Learn more about security and compliance at Argyle [here](https://argyle.com/legal/security/).
</Note>

#### You are PCI DSS compliant

If you have PCI DSS compliance and are certified to handle sensitive card data, include the `card` object in your DDS configuration.

We recommend populating every field in the [`card`](/legacy/api-reference/dds-configurations#object-card) object to maximize compatibility with gig economy platforms that support this feature.

<Accordion title="Unencrypted DDS configuration example object">
  ```json theme={}
  {
      "card": {
          "card_number": "4253177385403456",
          "cardholder_title": "Mr",
          "cardholder_first_name": "John",
          "cardholder_last_name": "Doe",
          "card_name": "Master Visa",
          "expiration_year": 2030,
          "expiration_month": 10,
          "card_cvc_cvv": "900",
          "address_line1": "759 Victoria Plaza",
          "address_line2": "Unit 12",
          "city": "Los Angeles",
          "state": "CA",
          "postal_code": "90210",
          "country": "US"
      }
  }
  ```
</Accordion>

<Accordion title="Encrypted payDistributionConfig (for Sandbox testing)">
  ```json theme={}
  "CiQAB/5leV7MffL4GqGFq40LfKq6ob9lP5OzPzN9789O/KCiOUcSwwMA8Gmka3lF/mm6j9k3i+PyTKVeE4UJiIXe/YbEw5FTvfflEqXBj/R70xDqjv93jvms9VzRSy8/8zbcjMKhVLptH5NCbvHHeYKt7HzJhg2aeUWY9Y2pUT9SGrr/qWbkXbPtMawrajITfXvIfQEoHXZselpnwbwT0yqiP0j8I6k+1YXSl2x1aEzlUiDbY0kH5Phn2sAxyOxn6vs51ofy2wV/mTX60U9ZMIaOmHUzzImvpDqy1dTc9qxVc0SIoIEuD3l8dOWSjQGIMqXJvM0Zy1R7rDYmZzIKRrWH2uFUlybOIDSsu9AA7VuwyDbKUhGVZb8ekjiPMRUucoQ+ERhYtrJPBYojKx0TQsBhcm3/XzRdAujxwYpxK3EW+WesSt6ZG330wMNGkv6Q2NrxZT8olEfPDTC1lT3/08cLwDJSv2EQKOO1lpZ65c/7lrebAOdlgqI/sK0XiOV+jbjs14CH6lgRSnqGShkyreiGmhyfjM2ccA6K11h8ZZie0BNaKI27EzWJRn94RByzMZPPZejmH5YpYD06ujwTfn5wsUqDWC8HmiuTQivPHsNXIWFK6hSeDpK0Vy6Piv4fiCtDfvyQMUV8Tp06"
  ```
</Accordion>

#### You are not PCI DSS compliant

[Argyle has partnered with Unit](https://argyle.com/blog/servicing-your-customers-card-payouts-just-got-easier/) to support adding debit cards to gig economy platforms for instant payouts if you are not PCI DSS compliant. Unit is PCI DSS compliant and can serve as a third party for handling sensitive card data.

<Note>
  Reach out to your Customer Success Manager if you are implementing this functionality with Unit, or are interested in using another preferred third party.
</Note>

Include the [`card_source`](/legacy/api-reference/dds-configurations#object-card_source) object in your DDS configuration.

<Accordion title="Unencrypted DDS configuration example object">
  ```json theme={}
  {
      "card_source": {
          "partner": "unit",
          "card_name": "My Unit payout card",
          "details": {
              "id": "ymp000f9",
              "org_id": "lj93cqt2"
          }
      }
  }
  ```
</Accordion>

![Argyle sends the encrypted card details to Unit, who then handles adding the payout card to the gig platform.](https://res.cloudinary.com/argyle-media/image/upload/f_auto/v1669077963/docs-2022/Guides/Argyle%20Link/Advanced%20Link%20Flows/Direct%20deposit%20switching/Add_debit_card_unit)

### Add a bank account and card

Adding a bank account and debit card at the same time to a user's payroll system is **only supported if you are PCI DSS compliant**.

Include a `bank_account` object, `<allocation settings>` for the bank account, and `card` object in your DDS configuration.

**You would like to receive the user's entire paycheck, and add a debit card:**

<Accordion title="Unencrypted DDS configuration example object">
  ```json theme={}
  {
      "bank_account": {
          "bank_name": "YellowHorizon",
          "routing_number": "084101234",
          "account_number": "9483746361234",
          "account_type": "checking"
      },
      "entire_allocation": true,
      "allow_editing": false,
      "card": {
          "card_number": "4253177385403456",
          "cardholder_title": "Mr",
          "cardholder_first_name": "John",
          "cardholder_last_name": "Doe",
          "card_name": "Master Visa",
          "expiration_year": 2030,
          "expiration_month": 10,
          "card_cvc_cvv": "900",
          "address_line1": "759 Victoria Plaza",
          "address_line2": "Unit 12",
          "city": "Los Angeles",
          "state": "CA",
          "postal_code": "90210",
          "country": "US"
      }
  }
  ```
</Accordion>

![How performing both a direct deposit switch and adding a payout card at the same time appears in Argyle Link.](https://res.cloudinary.com/argyle-media/image/upload/f_auto/v1669078189/docs-2022/Guides/Argyle%20Link/Advanced%20Link%20Flows/Direct%20deposit%20switching/Add_bank_and_debit_account)

**You would like to receive an exact amount or percentage of the user's paycheck, and add a debit card:**

<Accordion title="Unencrypted DDS configuration example object">
  ```json theme={}
  {
      "bank_account": {
          "bank_name": "YellowHorizon",
          "routing_number": "084101234",
          "account_number": "9483746361234",
          "account_type": "checking"
      },
      "percent_allocation": {
          "value": "21",
          "min_value": "21",
          "max_value": "21"
      },
      "amount_allocation": {
          "value": "177",
          "min_value": "177",
          "max_value": "177"
      },
      "card": {
          "card_number": "4253177385403456",
          "cardholder_title": "Mr",
          "cardholder_first_name": "John",
          "cardholder_last_name": "Doe",
          "card_name": "Master Visa",
          "expiration_year": 2030,
          "expiration_month": 10,
          "card_cvc_cvv": "900",
          "address_line1": "759 Victoria Plaza",
          "address_line2": "Unit 12",
          "city": "Los Angeles",
          "state": "CA",
          "postal_code": "90210",
          "country": "US"
      }
  }
  ```
</Accordion>

**You would like to receive an amount or percentage of the user's paycheck within a certain range, and add a debit card:**

<Accordion title="Unencrypted DDS configuration example object">
  ```json theme={}
  {
      "bank_account": {
          "bank_name": "YellowHorizon",
          "routing_number": "084101234",
          "account_number": "9483746361234",
          "account_type": "checking"
      },
      "percent_allocation": {
          "value": "21",
          "min_value": "10",
          "max_value": "30"
      },
      "amount_allocation": {
          "value": "177",
          "min_value": "50",
          "max_value": "250"
      },
      "card": {
          "card_number": "4253177385403456",
          "cardholder_title": "Mr",
          "cardholder_first_name": "John",
          "cardholder_last_name": "Doe",
          "card_name": "Master Visa",
          "expiration_year": 2030,
          "expiration_month": 10,
          "card_cvc_cvv": "900",
          "address_line1": "759 Victoria Plaza",
          "address_line2": "Unit 12",
          "city": "Los Angeles",
          "state": "CA",
          "postal_code": "90210",
          "country": "US"
      }
  }
  ```
</Accordion>

![Adding both a payout card and making a direct deposit switch for an amount within a certain range in Argyle Link.](https://res.cloudinary.com/argyle-media/image/upload/f_auto/v1669078407/docs-2022/Guides/Argyle%20Link/Advanced%20Link%20Flows/Direct%20deposit%20switching/Add_bank_and_debit_account_range)

### Adjust existing pay allocations

![Adjust how the user is allocating their paycheck and have the user confirm in Argyle Link the new allocation settings.](https://res.cloudinary.com/argyle-media/image/upload/f_auto/v1669078477/docs-2022/Guides/Argyle%20Link/Advanced%20Link%20Flows/Direct%20deposit%20switching/DDS_adjust_existing_pay_allocations)

In some situations, such as when a user's final loan payment is lower than the previous payments, you may want to adjust the pay allocations for the bank accounts that have already been added to the user's payroll system.

Include a `bank_account` object in your DDS configuration in the same way as if you were adding a new bank account, with the new `<allocation settings>` you would like the user to accept.

### Remove a bank account

![After a bank account is removed, it is indicated to the user in Argyle Link.](https://res.cloudinary.com/argyle-media/image/upload/f_auto/v1669078540/docs-2022/Guides/Argyle%20Link/Advanced%20Link%20Flows/Direct%20deposit%20switching/DDS_remove_bank_account)

Users can confirm through Argyle Link that they would like to remove a bank account from one of their connected payroll accounts.

This allows the user to adjust the payout settings of their remaining bank accounts, as well as handle any multi-factor authentication (MFA) requests their payroll system requires.

Allow users to remove a bank account with these steps:

1. We recommend [deep linking](/legacy/guides/argyle-link/flows/deep-linking) the user directly to the payroll account containing the bank account to be removed.
2. Encrypt only the following JSON and set it as your `payDistributionConfig` when initializing Argyle Link for DDS:

   ```json theme={}
   {
       "action": "remove-allocation",
       "allocation_id": "0181d8c4-31ed-3338-1859-05fc7f1ca501"
   }
   ```

You can find the `allocation_id` by using the `/pay-allocations` endpoint. [List pay allocations](/legacy/api-reference/pay-allocations#list) by `account` and use the `id` representing the bank account you would like to remove as the `allocation_id`.

You can also save the `allocation_id` returned in the payload of the [`accounts.pay_distribution_updated`](/legacy/api-reference/accounts-webhooks#pay-distribution-updated) webhook after adding a bank account if you plan on removing the bank account later.

## Status updates

<div className="argyle-divider" />

### Webhooks

[Webhooks](/legacy/api-reference/webhooks-overview) are automatic notifications that let you know in real-time when changes occur.

If you are asking the user to add or remove a bank account, add a debit card, or adjust their existing pay allocations, you can monitor the status of these changes using [accounts webhooks](/legacy/api-reference/accounts-webhooks):

* Subscribe to the [`accounts.pay_distribution_updated`](/legacy/api-reference/accounts-webhooks#pay-distribution-updated) webhook to be notified if the DDS flow you requested is successful.
* Subscribe to the [`accounts.pay_distribution_failed`](/legacy/api-reference/accounts-webhooks#pay-distribution-failed) webhook to be notified if the DDS flow you requested could not be completed.

If a user independently adds, updates, or removes a bank account or debit card, you can monitor these changes as well by subscribing to [pay allocations webhooks](/legacy/api-reference/pay-allocations-webhooks).

You can subscribe to webhooks [using Argyle Console](/legacy/guides/argyle-console/faq#where-to-manage-webhooks) or [via the API](/legacy/api-reference/webhooks#create).

### Manual monitoring

You can view the status of any bank account or debit card updates to payroll accounts manually:

* via the API — use the [`/accounts`](/legacy/api-reference/accounts) API endpoint and check the attributes within the [`pay_distribution`](/legacy/api-reference/accounts#object-pay_distribution) object.
* in Argyle Console — navigate to [Connections](https://console.argyle.com/connections), select a user, click the **JSON** toggle button, and check the `pay_distribution` object within the **Account object** that is listed at the top of the JSON view:

  ```json theme={}
  {
      "pay_distribution": {
          "status": "...",
          "error_code": "...",
          "error_message": "...",
          "updated_at": "..."
      }
  }
  ```

The `status` will progress from `scanning -> updating -> success/error`.

## DDS through Console

![You can invite users to Link with a deposit switch included using Console.](https://res.cloudinary.com/argyle-media/image/upload/f_auto/v1669078805/docs-2022/Guides/Argyle%20Link/Advanced%20Link%20Flows/Direct%20deposit%20switching/DDS_through_Console)

You can invite new users to switch their direct deposit using Argyle Console. The invites can be sent via email, SMS, or both and will include a link the user can click to enter the DDS flow in their browser. From there the user can review and confirm they would like to add the bank account whose details you provided in Argyle Console to their payroll system.

From the *Your users* tab, select **Invite new users** and then enable **direct deposit switch**.

If you [customized Argyle Link](/legacy/guides/argyle-link/customize) by tailoring its appearance to your brand, or restricted payroll connections to only those that support DDS, you can select your Link customization from the dropdown menu in the **Argyle Link** tab within the same **Invite users** page.

## FAQ

<Accordion title="How long does the DDS process take?">
  After a user confirms DDS changes in Argyle Link, the update process typically takes fifteen to thirty seconds on most payroll systems, and up to two minutes on the slowest payroll systems.
</Accordion>

<Accordion title="What happens if I want a user to add a new bank account to their payroll system to receive partial paychecks, but this would exceed the [max_allocations](/legacy/api-reference/link-items#object-max_allocations) listed in the /link-items endpoint for that payroll system?">
  Argyle automatically removes one of the previous bank accounts connected to the user's payroll system.

  If the user's payroll system only allows for one bank account, the new bank account you provide will be added, the previously connected bank account will be removed, and the user will not be able to restore the previous bank account.

  If the user's payroll system allows two or more bank accounts, the new bank account you provide will be added and one of the previously connected bank accounts will be removed. If the user wants to restore the removed bank account, they are allowed to swap it for a previously connected bank account that was not removed.
</Accordion>

<Accordion title="What happens if the user's paycheck is less than the amount they chose to allocate during the DDS process?">
  If the user's income is not enough to satisfy all pay allocations, how the available income is distributed varies from platform to platform. Whenever possible, Argyles prioritize your allocation in the platform's payout queue.
</Accordion>

<Accordion title="What happens if you do not receive an expected payment from an account the user added to their payroll system?">
  Argyle only passes bank account, payment settings, and/or card information to the user's payroll platform. If there is an issue with future payments, the user must contact their payroll provider directly.
</Accordion>

<Accordion title="If a user revokes access to their payroll account, or the payroll account becomes disconnected, does this remove the pay allocations that were added to the payroll account?">
  No, the pay allocations will not automatically be removed from the payroll system because of account disconnection or revoked access. Argyle cannot update pay allocations on payroll systems that have become disconnected or where the user revoked access, and Argyle does not communicate with banks regarding these pay allocations. Please contact the user directly to update the pay allocations or re-connect the disconnected account.
</Accordion>

<Accordion title="Do the allocation settings in my DDS configuration limit which payroll accounts are shown to the user when I have initialized Argyle Link for DDS?">
  This is only the case if your initialization includes a customization where the setting **“Only show Link items that support direct deposit switching”** has been enabled.

  Because every payroll system has different payment setting limitations, the user will only be shown payroll accounts whose payroll system supports the `allocation settings` used in your DDS configuration. This minimizes DDS configuration errors to ensure an optimal user experience.
</Accordion>
