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

direct deposit switching flowsdirect deposit switching flows

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.

Initialize Argyle Link for DDS

Argyle Link is the front-end application through which users can connect their payroll accounts. Our embedding Link 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:

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. 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 to ensure sensitive banking and card information is never exposed.

👍

Argyle is PCI DSS Level 2 compliant. Learn more about security and compliance at Argyle here.

Unencrypted DDS configuration example object
{
    "bank_account": {
        "bank_name": "YellowHorizon",
        "account_type": "checking",
        "routing_number": "123456789",
        "account_number": "1234567890"
    },
    "entire_allocation": true,
    "allow_editing": false
}
Example payDistributionConfig after encryption
"CiQAB/5lefxxuvf+DXqPvpHAaEb41ZPpLfmpyjHT8ZlWxuvw9W4ShAIA8Gmka+gDv12aUmQgX7bZVRxOLK1isfYWHRHXRUTB9uYAXT9MHGOenaKf5IiqnXeTqMrKS5/PVcpZ3o6iLkcbYKED3IFp0uwFsD9yhRPGQhrC19ihCynKeSLC7mtp18DvM3vDulpo8mbakKrTNstlWHqPNNnx1zhPr8thSOqLamEo5s0QDGV6XidYikQQaD43zjqQQbWypVedUknbB6t3jilazsn629BBM9+XyVqjI7MEpg+dImbgD7t6I+AR5YuJjXXWoxxeTepRqGCnXePR9Z+J+BagPHBD7ov7jpqBWB9GxO+BiojcaZtAw0aLe5RLr+iysrmE8p1E1iRjXoESGDjowQ=="
Examples of full Argyle Link initializations for DDS
<!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>
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)
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)
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()

Structure DDS configuration

  1. Decide which DDS flow 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 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.

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 to your brand, or restrict which payroll accounts a user can connect to only those that support DDS.

In Argyle Console:

  1. Create a new customization using Link Customizer.
  2. Enable the setting "Only show Link items that support direct deposit switching".

📘

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

  1. Tailor Argyle Link’s appearance to your brand if needed.
  2. Save and apply your customization by including the following line in your Argyle Link initialization:
customizationId: "<Your customization ID (e.g. P2R93PEL) found in Link Customizer>"

Sandbox testing

You can test your DDS configuration and customizations with Link Emulator 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.

sandbox testing in Link Emulatorsandbox testing in Link Emulator

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:

Unencrypted DDS configuration example object
{
    "bank_account": {
        "bank_name": "YellowHorizon",
        "routing_number": "084101234",
        "account_number": "9483746361234",
        "account_type": "checking"
    },
    "entire_allocation": true,
    "allow_editing": false
}
Encrypted payDistributionConfig (for Sandbox testing)
"CiQAB/5lecrbJVrkdodwk4sgqacFNCiaH638IgDAHa8/peRjEEoShwIA8Gmka0Ea+JAa75M5HxfTckMklvPVvRxPYV3ND+YisxMhcHk6Fig0bwUUJiotuw/L5YkbHysTMPU6PSvXnHs19lNDZfVO6qpo44U6eMRdqO65HC864QEEi5n/u7QQT3DcG43RiVoRCnDiBlcdGIOPxth+gX6JgygigFHLEFhfOKWaQdyOmHDuf9cZNxp3M26IBEEtgmznl4oSm1qFt6ZzMcvdvKd2nOMS5co3Nc4f6F67GlnCRHEjzszBUnkgpsj60KFKggQ0e/CRQWi5pM/wa7UCb80LAKKm8Tl07kDJVFZcb9rsGwcfPY8ZCxcD0MtV/Q+yflCbaLL4RYcKXCBZXv0yOJEhxw=="

direct deposit switch for entire paycheckdirect deposit switch for entire paycheck

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

Unencrypted DDS configuration example object
{
    "bank_account": {
        "bank_name": "YellowHorizon",
        "routing_number": "084101234",
        "account_number": "9483746361234",
        "account_type": "checking"
    },
    "entire_allocation": true,
    "allow_editing": true
}
Encrypted payDistributionConfig (for Sandbox testing)
"CiQAB/5leYyoOyN3G5bVYap9kIGN3sExAqnDC0ZSZobxb9Zrew8ShgIA8Gmka+Kg8+ZmA9C1gqXEO9dW2n1SzPiMnfeOl4Az1dFFddnGOrPj9QNcNkG6g+Qummr2ebAaI27epVn0N2opzFU+EpL1XrYwMOmAEb1/iODTDZh52P7gxnzNu0mw9/3Q0rV+9aAiQfSqppn+XWIN3M3TdLr0A2c3LbZ3foEAOhNSVnvTcnDV8ZXuUjxPx6SL2DWpsZY8DrhA0xlfEisyVo9UVgqMRBAnYCLidVmj0iHqCQil/oGdwaW2NbfVuf3gFQN9g97wCBfD0kQV78J4KvxV99cMmJEVHjzATXwUKPqW+dNK0vKlPvDQ91WOvyXQaZ471s8iIjXlooBz8oySSObfYBJ2"

switching direct deposit for entire paycheck with user adjustmentswitching direct deposit for entire paycheck with user adjustment

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:

switching direct deposit for partial paycheck flowswitching direct deposit for partial paycheck flow

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:

Unencrypted DDS configuration example object
{
    "bank_account": {
        "bank_name": "YellowHorizon",
        "routing_number": "084101234",
        "account_number": "9483746361234",
        "account_type": "checking"
    },
    "amount_allocation": {
        "value": "177",
        "min_value": "177",
        "max_value": "177"
    }
}
Encrypted payDistributionConfig (for Sandbox testing)
"CiQAB/5leftv/h7DdBqhJxkWPVkEv4xQw0eCqjEb184UeSlWCrESowIA8Gmka4AB+A07Ny5WYldfxP+rY00lThGucMZqOUDM5b1j7tte0aM8Fn6usa/Xwy6FMsT9dV+htKU04K1Z+r3uLBkWVgOw2G0K7SN+2wKz//NUOudTjzBYq80MsePDDLrDr2uYCGiUWHlciYkhEUB6jwQ7KN1/KpIQd5PfvjDk+Gbds3JTq1q2PbQIH87l46YZgdrdZkqPmaIbVYLdZLa1NHgK4joRvqKvYgaJ66i+m7C2v2W8St/K/6A3skq2yCPSMSawNXOVzGZQdp2EvWd61wvaMcZ/CHxnh6OhN+iwkGxO/PHxd63yD1z0+ic/N9ljsx0xZGpoIihFm5AQhcY7A6o5glVhT3/aP5uqvs+DvDduWTjprGLHqql2HvUd1lp+AZU="

direct deposit switch for partial paychecks for an exact amountdirect deposit switch for partial paychecks for an exact amount

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

Unencrypted DDS configuration example object
{
    "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"
    }
}
Encrypted payDistributionConfig (for Sandbox testing)
"CiQAB/5leYjHBRtCDh3aadVwSYxQA6GlbzMgOtifkK/PxvWUoxgS7wIA8Gmka9zAluMIDbNzeLkw788DAn5JHBd+Y1upW7HnlmwMwU6XUa/NwRh1B0aUJoRletrmvR/hNcCqw93rQuvlu/JZ8JEP8rCNKAUMYU0OrYbP7+3JP0x5hhJD6HwQruN0edhOixMq/mzsJYiBllJcPBb214PkqTJ7wNczJpPY8H1P8pJOVAuYHTUqhj2WGI/2mg8ZxyOhllX00QTCSWWXmy9OtIvl0dEtPAqpcTk22AXhWPFWcS9t35tLH/xH5Y8T7BC48s/bkpWmQWjUS1rxnJVdTMuqyxwcnuzhw4MF3K1GMAqE3AycT30t0TZ7EV1r3I/4IPmg5zorppbsRClCqMSdVsIMIqIhginZxjFhClsDA0UZHg/VSX6LEFwU1ZzF6PK7TyoinO3iE6zx5oFKZ/GBLAbeoNarwlGl/bCt8GsUtIDcfj6htvfuL7helfwNN3X8xcoiZ0PVMu8WJRr1ITX+dMnOKkYPEiyIEwNA"

direct deposit switch for partial paycheck within a certain rangedirect deposit switch for partial paycheck within a certain range

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

Unencrypted DDS configuration example object
{
    "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"
    }
}
Encrypted payDistributionConfig (for Sandbox testing)
"CiQAB/5lebHgXF4fFRTlsfzX431xvwAaNShjFmrpH0EcPhOYdgUSyAIA8Gmka4fEfFZMVmujjTv/38EGkU2bIqlhqOxB1wQpd49m/orKuzG+hDVnBxsP5f4LIkmahwWa/2ODm9KUCQw/DtFMuY2zRK1cSy2CqyzpWa1Gh8ecaOlqaatt2dcGnq8hmzM6uyrJfPTqt3J6VcLyEZ2jhz8nyDwHJAYnR+Xb6hGzJlWSCNJLc46cp0x4158U4tMWnBj3IiUhHs9/1x0IjLxcyLoNpRctHsdC7XGULDFstuv2axxNL6YLiN8R+0XCN75zEnaTIPBKrd7bkzCYuD+HX5JzzThWdPWAxwmqT2cdubIG2JbKcYKu8lYOSe+SHMYud2NZEt97i6qbkRqPGRWTz46+OLzoaUj8WKOn1QDnaaXpMoYUndy8of1QXiRlpXA8S7Djuge5o/SVCicn4puqlZiGMDGmgkVlHAC6I0kAAqsUsOgg"

Add a debit card

Add a debit card onlyAdd a 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 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.

👍

Argyle is PCI DSS Level 2 compliant. Learn more about security and compliance at Argyle here.

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 object to maximize compatibility with gig economy platforms that support this feature.

Unencrypted DDS configuration example object
{
    "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"
    }
}
Encrypted payDistributionConfig (for Sandbox testing)
"CiQAB/5leV7MffL4GqGFq40LfKq6ob9lP5OzPzN9789O/KCiOUcSwwMA8Gmka3lF/mm6j9k3i+PyTKVeE4UJiIXe/YbEw5FTvfflEqXBj/R70xDqjv93jvms9VzRSy8/8zbcjMKhVLptH5NCbvHHeYKt7HzJhg2aeUWY9Y2pUT9SGrr/qWbkXbPtMawrajITfXvIfQEoHXZselpnwbwT0yqiP0j8I6k+1YXSl2x1aEzlUiDbY0kH5Phn2sAxyOxn6vs51ofy2wV/mTX60U9ZMIaOmHUzzImvpDqy1dTc9qxVc0SIoIEuD3l8dOWSjQGIMqXJvM0Zy1R7rDYmZzIKRrWH2uFUlybOIDSsu9AA7VuwyDbKUhGVZb8ekjiPMRUucoQ+ERhYtrJPBYojKx0TQsBhcm3/XzRdAujxwYpxK3EW+WesSt6ZG330wMNGkv6Q2NrxZT8olEfPDTC1lT3/08cLwDJSv2EQKOO1lpZ65c/7lrebAOdlgqI/sK0XiOV+jbjs14CH6lgRSnqGShkyreiGmhyfjM2ccA6K11h8ZZie0BNaKI27EzWJRn94RByzMZPPZejmH5YpYD06ujwTfn5wsUqDWC8HmiuTQivPHsNXIWFK6hSeDpK0Vy6Piv4fiCtDfvyQMUV8Tp06"

You are not PCI DSS compliant

Argyle has partnered with Unit 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.

📘

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

Include the card_source object in your DDS configuration.

Unencrypted DDS configuration example object
{
    "card_source": {
        "partner": "unit",
        "card_name": "My Unit payout card",
        "details": {
            "id": "ymp000f9",
            "org_id": "lj93cqt2"
        }
    }
}

add a debit card with Unit as a third partyadd a debit card with Unit as a third party

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:

Unencrypted DDS configuration example object
{
    "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"
    }
}

add a bank and debit accountadd a bank and debit account

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

Unencrypted DDS configuration example object
{
    "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"
    }
}

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

Unencrypted DDS configuration example object
{
    "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"
    }
}

add bank and debit account for a certain rangeadd bank and debit account for a certain range

Adjust existing pay allocations

adjust existing pay allocationsadjust 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

remove a bank accountremove a 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 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.
{
    "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 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 webhook after adding a bank account if you plan on removing the bank account later.

Status updates

Webhooks

Webhooks 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:

  • Subscribe to the accounts.pay_distribution_updated webhook to be notified if the DDS flow you requested is successful.
  • Subscribe to the accounts.pay_distribution_update_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 webhooks for pay allocations.

You can subscribe to webhooks using Argyle Console or the API.

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 API endpoint and check the attributes within the pay_distribution object.
  • in Argyle Console - navigate to the Your users tab, select a user, click the JSON toggle button, and check the pay_distribution object with the Account object that is listed at the top of the JSON view:
{
    "pay_distribution": {
        "status": "...",
        "error_code": "...",
        "error_message": "...",
        "updated_at": "..."
    }
}

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

DDS through Console

direct deposit switching with Argyle Consoledirect deposit switching with Argyle 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 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

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.

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

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.

What happens if you do not receive an expected payment from an account the user added to their payroll system?

Unfortunately, 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.

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.