Direct Deposit Switch
Overview
DD Customers & Their Value
Green Dot Direct Deposit (DD) customers have shown greater engagement and provide more lifetime value (LTV) than non-DD customers. On average, Green Dot accounts enrolled with DD have ~11x lifetime value over accounts not enrolled with direct deposit.
While many banks and businesses offer a DD feature for their customers, the user experience for manual setup can often be difficult, time-consuming, and prone to user error.
Green Dot’s DD Switch
Green Dot’s Direct DD Switch feature helps partners simplify the DD enrollment process for account holders by letting them set up DD without leaving their banking app. With this integration, customers can conveniently log in to their employer or payroll provider account using their existing credentials and complete every step of their DD setup within the partner’s app. Those account holders will then enjoy a fast, secure, simplified experience that decreases the friction typically involved with manual DD enrollment, encouraging a more successful and continued engagement with the app.
Customer Experience & Flow
With this streamlined DD Switch process, the customer experience can be distilled to only four simple steps:
- Without leaving their banking app, the customer can search for their employer or payroll provider from a comprehensive list of top employers, payroll companies, gig-worker platforms, federal agencies, and state unemployment agencies.
- The customer will login using their company/agency credentials.
- The customer determines how much of their paycheck to deposit per pay period.
- The customer submits the request.
DD Switch Integration Guide & API Reference
If you are interested in learning more about integrating DD Switch, please continue to the Integration Guide below. For specific API details related to DD Switch, refer directly to the API Endpoints.
Integration Guide
Green Dot has integrated with a third-party DD switch provider using its Software Development Kit (SDK) for both Web and App. For Green Dot partners to offer this DD Switch feature to their customers, partners only need to integrate with the SDK, as Green Dot will provide the access token for SDK integration and handle all the backend calls (webhooks, switch attempts, partner notifications, etc.).
DD Switch Flowchart
Integration Steps
-
Partner requests the SDK key from Green Dot through the Create Switch Attempt API found in the API Reference section.
-
Partner creates their own User Interface (UI) surrounding and leading into the SDK experience.
- To provide an example of what the experience can look like before invoking the SDK, the following are screenshots of Green Dot’s GO2bank Direct deposit UI and user flow. Partners can build their own UI and user flow to provide a similar experience.
Green Dot can also customize in-app messaging shown in the SDK experience.
- Partner directly invokes the SDK. Please refer to the third-party SDK documentation for reference material and code samples.
- Partner’s client app calls the Update Switch Attempt API to upload the status of the SDK response.
- Green Dot listens to SDK Webhooks and sends them to the partner via webhooks or notifications based on the partner’s configuration.
- Green Dot stores all switch attempts and allows partners to view them through the Get all Switch Attempts API endpoint.
- Green Dot will send Direct Deposit Switch status information to the partner.
- Partner receives the webhook and notifies their customers of switch status (through push notification, email, SMS, etc).
- Partner’s customer will receive notification switch status, if configured to receive notification directly from Green Dot.
- Green Dot provides fallback options to help customers complete their DD setup, when a DD Switch fails.
- Customers can download a Direct Deposit form pre-filled with their account information, which can be submitted to their employer as an alternative way to set up DD in the event of a failed switch.
- Green Dot can provide instructions on manual setup by using customer’s account and routing numbers information for those who can't use DD Switch or where DD Switch fails (optional- this service must be opted into).
Direct Deposit Switch API Endpoints
Required Headers
Name | Type | Example | Description |
---|---|---|---|
X-GD-RequestId | Header | 2faf5ec1-b99b-4258-a672-0e441ec75d9b | A unique id for this request. Used for troubleshooting. |
Authentication | Header | Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.ErO0fS1yKjr73zJmeYqazVauy8z4Xwuhebs9fXVr3u4 | Standard BaaS Partner token |
Route Parameters
Name | Type | Example | Example |
---|---|---|---|
programCode | Path | gbr | Program code used by the partner for all calls |
accountIdentifier | Path | qw34rt6y7-b99b-4258-a672-0e441ec75d9b | Id for the account being modified or accessed |
Common Objects
Switch Attempt
Name | Type | Example | Description |
---|---|---|---|
referenceNumber | guid | No example available | BaaS account identifier |
id | guid | No example available | Id for the switch attempt |
vendor | string | Atomic | 3rd party that processed the attempt |
vendorReference | string | No example available | 3rd party id for the switch attempt |
amount | float | 100, 20.5 | Fixed dollar amount or percentage of paycheck to be direct deposited |
amountType | string | All, Percent, Amount | Whether the 'amount' value is percent or fixed dollar amount |
status | string | Completed | Current status of the switch attempt |
lastEventDateUTC | datetime | 2023-06-15T22:19:24.413Z | Date and time of the last update to this switch attempt |
depositor | string | ADP | Name of the payroll provider that will be making deposits |
eventIds | List of guids | No example available | List of internal ids for events related to this switch attempt |
Response Details
Name | Type | Example | Description |
---|---|---|---|
code | int | 0 | Error code 0 if no error |
subCode | int | 0 | Additional error code 0 or not present for no error |
description | string | X-GD-RequestId must be a guid | A description of the error |
url | string | N/A | Not used by DD Switch |
Generate Manual Form
This API is used to generate a direct deposit request form with the user’s name, address, and account number prefilled. The end user will download, print, and submit it to their payroll provider.
API Call Structure
POST /programs/{programCode}/accounts/{accountIdentifier}/directdeposit/manualform
Request Body
{
"fullName": "string",
"accountNumber": "string",
"routingNumber": "string",
"bankName": "string",
"addressLine1": "string",
"addressLine2": "string"
}
Request Parameters
Name | Type | Example | Required | Description |
---|---|---|---|---|
fullName | string | Steve Rogers | Yes | Full name of account owner |
accountNumber | string | 1234567890 | Yes | Id for the account being modified or accessed |
routingNumber | string | 1234567890 | Yes | Routing number for digital deposits |
bankName | string | Go2Bank | Yes | Bank name as it would appear on a check |
addressLine1 | string | 123 Street Ave | Yes | Street address |
addressLine2 | string | Los Angeles CA 90210 | Yes | City, state, and zip code |
Response Body
{
"output": "string",
"responseDetails": [
{
"code": 0,
"subCode": 0,
"description": "string",
"url": "string"
}
]
}
Response Parameters
Name | Type | Example | Description |
---|---|---|---|
output | string | Result will be a very long string | A base64 encoded pdf file |
Create New Switch Attempt
This API generates an access token to load the SDK and starts tracking the user’s progress through the setup flow.
API Call Structure
POST /programs/{programCode}/accounts/{accountIdentifier}/directdeposit/switches
Response Body
{
"vendorToken": "string",
"switchId": "string",
"vendorName": "string",
"responseDetails": [
{
"code": 0,
"subCode": 0,
"description": "string",
"url": "string"
}
]
}
Response Parameters
Name | Type | Example | Description |
---|---|---|---|
vendorToken | string | No example available | A token used to connect to the 3rd party processing the switch |
switchId | guid | No example available | An id for this switch attempt that can be used to query or update the status |
vendorName | string | Atomic | Name of the 3rd party that will process the direct deposit switch |
Get All Switch Attempts
This API returns details about each time a user attempted to set up direct deposit using the automated flow.
API Call Structure
GET /programs/{programCode}/accounts/{accountIdentifier}/directdeposit/switches
Response Body
{
"accountData": {
"id": "string",
"referenceNumber": "string",
"client": "string",
"latestSwitch": {
"referenceNumber": "string",
"id": "string",
"vendor": "string",
"vendorReference": "string",
"amount": "string",
"amountType": "string",
"status": "string",
"statusReason": "string",
"lastEventDateUtc": "2023-06-15T22:19:24.413Z",
"depositor": "string",
"eventIds": [
"string"
]
},
"switchIds": [
"string"
]
},
"switchAttempts": [
{
"referenceNumber": "string",
"id": "string",
"vendor": "string",
"vendorReference": "string",
"amount": "string",
"amountType": "string",
"status": "string",
"statusReason": "string",
"lastEventDateUtc": "2023-06-15T22:19:24.413Z",
"depositor": "string",
"eventIds": [
"string"
]
}
],
"responseDetails": [
{
"code": 0,
"subCode": 0,
"description": "string",
"url": "string"
}
]
}
Response Parameters
Name | Type | Example | Description |
---|---|---|---|
accountData.id | guid | guid | Internal direct deposit account ID |
accountData.referenceNumber | guid | guid | BaaS account identifier |
accountData.client | string | gbr | BaaS program code for this account |
accountData.latestSwitch | object | json object | See 'Switch Attempt' under Common Objects above |
accountData.switchIds | List of guids | list of guids | A list of all direct deposit switch attempts for this BaaS account. |
accountData.switchAttempts | List of objects | list of Switch Attempt objects | See 'Switch Attempt' under Common Objects above |
responseDetails | object | Refer to description | See 'Response Details' under Common Objects |
Update Switch Attempt
This API allows a switch attempt to be updated with a new status or additional details.
API Call Structure
PATCH /programs/{programCode}/accounts/{accountIdentifier}/directdeposit/switches/{switchId}
Request Body
{
"patchObj":
{
"amount": "string",
"amountType": "string",
"status": "string",
"statusReason": "string",
"depositor": "string"
}
}
Request Parameters
Name | Type | Example | Required | Description |
---|---|---|---|---|
patchObj | object | No example available | Yes | Patch object |
patchObj.amount | float | 100 | No | Fixed dollar amount or percentage of paycheck to be direct deposited |
patchObj.amountType | string | All, Percent, Amount | No | Whether the 'amount' value is percent or fixed dollar amount |
patchObj.status | string | Submitted | No | Current status of the switch attempt See note below this table for more info. |
patchObj.statusReason | string | User completed vendor flow | No | What event triggered the status change |
patchObj.depositor | string | Home Depot | No | Name of the payroll provider that will be making deposits |
Note: Valid statuses for partners to send are “Submitted” when the user completes the vendor flow, and “Aborted” when a user abandons the vendor flow. Transitioning to these states is not required and will not affect downstream processing.
Response Body
{
"referenceNumber": "string",
"id": "string",
"vendor": "string",
"vendorReference": "string",
"amount": "string",
"amountType": "string",
"status": "string",
"statusReason": "string",
"lastEventDateUtc": "2023-06-15T22:37:55.510Z",
"depositor": "string",
"responseDetails": [
{
"code": 0,
"subCode": 0,
"description": "string",
"url": "string"
}
]
}
Response Parameters
Name | Type | Example | Description |
---|---|---|---|
{root} | object | Refer to description | The complete, updated switch attempt. See 'Switch Attempt' under Common Objects above |
responseDetails | object | Refer to description | See 'Response Details' under Common Objects above |
Get Latest Switch Attempt
This API returns details for the most recent time a user attempted to set up direct deposit using the automated flow.
API Call Structure
GET /programs/{programCode}/accounts/{accountIdentifier}/directdeposit/switches/latest
Response Body
{
"referenceNumber": "string",
"id": "string",
"vendor": "string",
"vendorReference": "string",
"amount": "string",
"amountType": "string",
"status": "string",
"statusReason": "string",
"lastEventDateUtc": "2023-06-15T22:37:55.510Z",
"depositor": "string",
"responseDetails": [
{
"code": 0,
"subCode": 0,
"description": "string",
"url": "string"
}
]
}
Response Parameters
Name | Type | Example | Description |
---|---|---|---|
latestSwitch | object | Refer to description | The most recent switch attempt. See 'Switch Attempt' under Common Objects above |
responseDetails | object | Refer to description | See 'Response Details' under Common Objects above |
Supported Deposit Amount Types & Statuses
Deposit Amount Types (as supported by the employer or payroll provider)
- All
- Amount
- Percent
Statuses
- Started
- Submitted
- Aborted
- Failed
- Completed
- Manual
Updated 10 months ago