Employee Bank Account Verification With Plaid
This guide describes the API sequence for adding an employee bank account and verifying it through Plaid.
Use this flow when your integration allows an employee to add a bank account for direct deposit and Plaid verification is enabled for that company.
Scope
This is an employee bank account flow in employee context.
- the bank account belongs to the employee
- the verification is done by the employee in self-service
- the API endpoints are employee endpoints under
companies/{companyId}/employees/{employeeId}/...
This is not the company bank account verification flow.
Goal
The goal is:
- create the employee bank account record in Worklio
- open Plaid Link for that bank account
- save the selected Plaid account to Worklio
- reload the bank account and read its final verification status
Required identifiers
You need these values before starting:
companyIdemployeeId
After the first API call you will also have:
- Worklio employee bank account
accountId
Plaid Link documentation
Official Plaid documentation:
- Link overview: https://plaid.com/docs/link/
- Link for web: https://plaid.com/docs/link/web/
- Hosted Link: https://plaid.com/docs/link/hosted-link/
Use Hosted Link when the partner does not fully control the frontend or prefers Plaid to host the Link experience.
Prerequisites
- the integration must be acting in employee context for the target
employeeId - if Plaid verification is required, capability
PLAID_VERIFYmust be enabled
API sequence
1. Create the employee bank account
Call this when the employee submits bank account details.
- Method:
POST - Endpoint:
companies/{companyId}/employees/{employeeId}/bankaccounts
Request body should include:
accountHolderNameaccountNumberroutingNumberaccountTypeverificationType
Set verificationType to:
Plaidwhen Plaid verification should be usedManualwhen Plaid verification is not used
Important:
- if you plan to verify with Plaid, this call must happen first
- the response gives you the Worklio employee bank account
accountIdrequired by the Plaid endpoints
2. Request a Plaid link token
Call this only after step 1 succeeds and you have the Worklio employee bank
account accountId.
- Method:
GET - Endpoint:
companies/{companyId}/employees/{employeeId}/plaid/{accountId}/token
Use the returned linkToken to initialize Plaid Link.
Notes:
- if the bank account was already linked before, this endpoint may return a Plaid update-mode token instead of a fresh-link token
- if no
linkTokenis returned, stop the flow and treat it as a failure
3. Open Plaid Link
This is not a Worklio API call.
Use the linkToken from step 2 to open Plaid Link. When Plaid completes
successfully, collect:
publicToken- selected Plaid account metadata
- selected institution metadata
From the selected Plaid account, you will need:
- Plaid
accountId accountMaskaccountNameaccountTypeaccountSubtypeverificationStatus
From the selected institution, you will need:
institutionIdinstitutionName
4. Save the Plaid connection
Call this only after Plaid Link returns success.
- Method:
POST - Endpoint:
companies/{companyId}/employees/{employeeId}/plaid/{accountId}/link
Request body:
publicTokenaccountIdThis is the Plaid account id selected in Plaid Link, not the Worklio bank account id from step 1.accountMaskaccountNameaccountTypeaccountSubtypeinstitutionIdinstitutionNameverificationStatus
This call links the Worklio employee bank account to the selected Plaid account.
5. Reload the employee bank account
Call this immediately after step 4 succeeds.
- Method:
GET - Endpoint:
companies/{companyId}/employees/{employeeId}/bankaccounts/{accountId}
Use this response as the source of truth for the bank account state.
Read:
isVerifiedverificationType
Important:
- there is no separate employee-side "complete verification" API after the Plaid link call
- the final verification result should be read from the refreshed employee bank account returned by this endpoint
Recommended flow by scenario
Scenario A: New employee bank account with Plaid verification
Call the APIs in this order:
POST /companies/{companyId}/employees/{employeeId}/bankaccountsGET /companies/{companyId}/employees/{employeeId}/plaid/{accountId}/token- Open Plaid Link
POST /companies/{companyId}/employees/{employeeId}/plaid/{accountId}/linkGET /companies/{companyId}/employees/{employeeId}/bankaccounts/{accountId}
Scenario B: Existing unverified employee bank account, retry Plaid verification
Do not create a new bank account. Reuse the existing Worklio employee bank
account accountId.
Call the APIs in this order:
GET /companies/{companyId}/employees/{employeeId}/plaid/{accountId}/token- Open Plaid Link
POST /companies/{companyId}/employees/{employeeId}/plaid/{accountId}/linkGET /companies/{companyId}/employees/{employeeId}/bankaccounts/{accountId}
Scenario C: No Plaid verification
If Plaid is not being used, only create the bank account and then reload it.
POST /companies/{companyId}/employees/{employeeId}/bankaccountsGET /companies/{companyId}/employees/{employeeId}/bankaccounts/{accountId}
Failure handling
Plaid token request fails
- do not open Plaid Link
- show an error
- allow retry
Employee exits Plaid without success
- keep the employee bank account created in step 1
- treat it as not verified yet
- allow the user to retry later using the same Worklio employee bank account
accountId
Plaid link save call fails
- do not assume the account is verified
- reload the employee bank account only if needed for recovery UI
- allow retry using the same Worklio employee bank account
accountId
Verification result
For partner integrations, the important rule is:
- do not assume that successful Plaid Link means the account is already verified
- after saving the Plaid connection, always call
GET /companies/{companyId}/employees/{employeeId}/bankaccounts/{accountId}and useisVerifiedfrom that response
Updated about 2 hours ago