How to Use This Guide
For each issue:
-
Match the Symptoms to what the user or record shows.
-
Confirm the Root Cause using the listed fields, logs, or settings.
-
Apply the Resolution steps.
-
Use Prevention to avoid recurrence.
Primary diagnostic fields on Bank_Verification__c:
|
Field |
What it tells you |
|---|---|
|
|
Overall verification lifecycle |
|
|
Transaction import health |
|
|
Balance refresh health |
|
|
Asset report health |
|
|
Income API health |
|
|
Auth / micro-deposit state |
|
|
Whether a stored access token exists |
|
|
Plaid item used for webhook matching |
Issue 1: Transactions Not Refreshing Automatically
|
Severity |
Critical |
|
Symptoms |
No new transactions after Plaid updates; |
|
Root Cause |
|
|
Affected Code |
|
Resolution:
-
Check Plaid Common Setting:
DisableAutomaticRefreshTransactions→ must befalse. -
Confirm webhook URL in Plaid Credentials points to:
https://{org-domain}/services/apexrest/bankconnect/Plaid_Callback -
Verify
Item_ID__con the Bank Verification matches the webhookitem_id. -
Check
Transaction_Api_Status__candTransaction_Description__cfor Plaid error codes. -
Manually trigger refresh via InvocableRefreshPlaidProducts or Admin refresh if needed.
Prevention: Document webhook URL during go-live; monitor DisableAutomaticRefreshTransactions in change control.
Issue 2: Asset Report Stuck in "In Progress"
|
Severity |
Critical |
|
Symptoms |
|
|
Root Cause |
Plaid asset webhook not received, batch processing not scheduled, or |
|
Affected Code |
|
Resolution:
-
Confirm asset webhook URL in Plaid Dashboard:
https://{org-domain}/services/apexrest/bankconnect/Asset_Callback -
Check
Asset_Report_Id__candEncrypted_Asset_Report_Token__care populated. -
If
EnableAssetWebhookBatchProcessing = true:-
Verify
Delay_Asset_Processing__c = trueafter webhook -
Confirm
ScheduableBatchAssetWebhookProcessingis scheduled -
Check
NextAssetBatchRunTimesetting
-
-
If batch is disabled, webhook should call
WSProductsService.getAssetDetail()directly — review Apex debug logs. -
Retry via manual asset refresh or
PlaidRetryAuthServiceif status isFailed.
Prevention: Schedule asset webhook batch during implementation; validate webhook delivery in Plaid Dashboard.
Issue 3: Bank Item Disconnected (ITEM_LOGIN_REQUIRED)
|
Severity |
Critical |
|
Symptoms |
All product API statuses fail; error contains |
|
Root Cause |
Plaid access token is invalid — user changed password, MFA expired, or institution requires re-link |
|
Affected Fields |
|
Resolution:
-
Read
Transaction_Description__c,Balance_Description__c, or other product description fields forITEM_LOGIN_REQUIRED. -
Instruct end user to re-authenticate via Plaid Link (update mode).
-
After re-link, confirm new
Encrypted_Plaid_token__candItem_ID__care stored. -
Re-run product imports via
BatchCallPlaidProductsServiceor manual refresh. -
Optionally use
WSRemoveAccessToken/BatchRemoveAccessTokento clean up stale tokens.
Prevention: Monitor failed API statuses; set up reporting on ITEM_LOGIN_REQUIRED occurrences.
Issue 4: Transactions Status "In Progress" — PRODUCT_NOT_READY
|
Severity |
High |
|
Symptoms |
|
|
Root Cause |
Plaid has not finished initial transaction sync — normal for newly linked items |
|
Affected Code |
|
Resolution:
-
Confirm this is a newly linked item (within first few minutes/hours).
-
Wait for Plaid
TRANSACTIONSwebhook (HISTORICAL_UPDATEorDEFAULT_UPDATE). -
Do not mark as failed — status should auto-update when webhook fires.
-
If stuck >24 hours: verify Transactions product is enabled in Plaid Link config and institution supports it.
Prevention: Set client expectations on initial sync delay; rely on webhooks rather than immediate polling.
Issue 5: Income API Failed — "User Token does not exists"
|
Severity |
Critical |
|
Symptoms |
|
|
Root Cause |
|
|
Affected Code |
|
Resolution:
-
Confirm Income is included in
Plaid_Products__con the Bank Verification. -
Verify
User_Token__candUser_Id__care populated after Link completion. -
Re-run Link flow with Income product enabled if tokens are missing.
-
Check
Income_Source_Type__cmatches the intended flow (Bank Income vs Payroll). -
Use Plaid Retry Auth Service after token is restored.
Prevention: Validate Income product configuration in Plaid Credentials and Link token creation (WSProductsService link token method).
Issue 6: Income API Failed — Warning / ITEM_UNAPPROVED
|
Severity |
High |
|
Symptoms |
HTTP 200 from Plaid but |
|
Root Cause |
User did not grant consent for Bank Income during Link; Plaid returns warnings in response |
|
Affected Code |
|
Resolution:
-
Review
Income_Description__c— error code is prefixed (e.g.,ITEM_UNAPPROVED::...). -
Confirm end user completed Income consent screens in Plaid Link.
-
Re-initiate Link with Income product and ensure user approves data sharing.
-
Check stored JSON response in ContentVersion (
Title like '%Income Response%') for full warning details.
Prevention: Include Income consent messaging in client-facing instructions before Link launch.
Issue 7: Trigger Error — System.MathException: Divide by 0
|
Severity |
High |
|
Symptoms |
Bank Verification update fails; Apex error on |
|
Root Cause |
|
|
Affected Code |
|
Resolution:
-
Check
Income_Start_Date__c,Income_End_Date__c,Payroll_Start_Date__c,Payroll_End_Date__c. -
Ensure end date is after start date with a valid range.
-
If dates are equal, income calculation should return 0 (fix should guard against division by zero).
-
Correct dates on the record and retry the update.
Prevention: Add validation rules on date fields; validate payroll date mapping before bulk updates.
Issue 8: Plaid API Callouts Failing — Credentials / Connection
|
Severity |
Critical |
|
Symptoms |
All API statuses fail simultaneously; callout exceptions; blank responses; 401/403 errors |
|
Root Cause |
Missing or incorrect Plaid Credentials custom setting, wrong environment (Sandbox vs Production), or Remote Site not configured |
|
Affected Code |
|
Resolution:
-
Verify Plaid Credentials record exists for the correct environment (
Sandbox/Production). -
Confirm
Plaid_Client_Id__c,Plaid_Client_Secret__c, and endpoint URIs are correct. -
Check Plaid Common Setting
ApiConnectionmatches intended environment. -
Confirm Remote Site Settings / Named Credentials allow callouts to Plaid endpoints.
-
Verify
ApplicationName__con Bank Verification maps to the correct credential record.
Prevention: Include credential validation in Maker-Checker checklist; test callouts in sandbox before production cutover.
Issue 9: API Callout Timeouts
|
Severity |
High |
|
Symptoms |
Intermittent failures on large transaction pulls or asset report retrieval; |
|
Root Cause |
Default callout timeout exceeded; large data sets (500+ transactions with pagination) |
|
Affected Settings |
|
Resolution:
-
Review Apex debug logs for timeout exceptions during
WSProductsServicecallouts. -
Adjust
APICalloutTimeoutif supported (within Salesforce limits). -
For transactions: system uses pagination via
InvocablePlaidTransactionsServicequeueable — confirm subsequent batches are running. -
Retry failed product individually rather than all products at once.
Prevention: Schedule heavy refreshes during off-peak hours; monitor queueable job failures.
Issue 10: Experience Cloud — IDV Icons / Images Not Displaying
|
Severity |
High |
|
Symptoms |
Pass/fail/status icons missing in View IDV Result component on Experience Cloud site; broken image placeholders |
|
Root Cause |
LWC not exposed to Experience Cloud, static resource path mismatch, or ContentDocument URLs inaccessible to guest users |
|
Affected Code |
|
Resolution:
-
Add Experience Cloud targets to
viewIDVResult.js-meta.xml:-
lightningCommunity__Page -
lightningCommunity__Default
-
-
Confirm static resources have
cacheControl = Public. -
Check browser Network tab for 404s on static resource URLs.
-
Verify
serviceIconMapfilenames match actual files insideIdentityVerification_Resourcezip. -
Replace
/sfc/servlet.shepherd/version/download/URLs with Experience Cloud-compatible file delivery for guest users.
Prevention: Test all LWC components on Experience Cloud before go-live; include static resource verification in UAT.
Issue 11: No Transactions Stored Despite Successful API
|
Severity |
High |
|
Symptoms |
|
|
Root Cause |
|
|
Affected Settings |
|
Resolution:
-
Check
Selected_Account_Ids__cincludes the Plaid account IDs returned by API. -
Verify
Bank_Account__crecords exist for those account IDs. -
If client needs pending/zero transactions, set
storeEmptyTransactions = true. -
Review
EnableStoringPendingTransactionsfor pending transaction handling. -
Confirm composite unique keys are not blocking upserts silently.
Prevention: Document transaction filtering behavior for clients; validate account selection during Link.
Issue 12: Micro-Deposit Verification Expired
|
Severity |
High |
|
Symptoms |
|
|
Root Cause |
User did not complete micro-deposit verification within Plaid's allowed window |
|
Affected Code |
|
Resolution:
-
Confirm
Micro_Deposit_Status__cvalue on Bank Verification. -
Instruct user to re-link the account through Plaid Link.
-
Monitor for
AUTOMATICALLY_VERIFIEDwebhook after successful verification. -
Re-trigger Auth via
WSProductsService.getAuthDetail()once verified.
Prevention: Communicate micro-deposit timelines to end users at Link initiation.
Issue 13: Scheduled Batch Jobs Not Running
|
Severity |
Critical |
|
Symptoms |
Daily refreshes never occur; asset webhook backlog; statement downloads stop |
|
Root Cause |
Batch/schedulable jobs not scheduled or aborted |
|
Affected Jobs |
|
Resolution:
-
Go to Setup → Apex Jobs → Scheduled Jobs and verify schedules exist.
-
Check Setup → Apex Jobs for failed/aborted batch runs.
-
Confirm related settings:
-
NextAssetBatchRunTime -
NextStatementsBatchRunTime/PlaidStatementsBatch_LastNMinutes -
NextRunTime_OcrolusFraudDetect
-
-
Re-schedule missing jobs per implementation runbook.
-
Review batch scope queries for records stuck in processing states.
Prevention: Include batch job verification in post-deployment checklist; monitor Scheduled Jobs weekly.
Issue 14: Permission / FLS Errors Blocking Data Operations
|
Severity |
High |
|
Symptoms |
Webhook received but no update; guest user sees empty data; |
|
Root Cause |
FLS enforcement enabled ( |
|
Affected Code |
All classes using |
Resolution:
-
Assign Bank Connect permission set(s) to integration user, community users, and guest profile as applicable.
-
Verify CRUD/FLS on:
Bank_Verification__c,Bank_Account__c,Transactions__c,Holdings__c,Income__c. -
For Experience Cloud: check guest user profile and sharing rules.
-
Review
GuestUsersandEnableCommunity_NetworkIDUpdatesettings for community-specific config. -
Review whether the FLS enforcement setting is appropriate for the deployment model.
Prevention: Permission set assignment is a mandatory Maker-Checker checklist item.
Issue 15: Document Insight / PDF Parsing Failures
|
Severity |
High |
|
Symptoms |
Document Insight status = |
|
Root Cause |
Invalid document category, file size exceeds limit, duplicate keys in parsed data, or third-party API auth failure |
|
Affected Settings |
|
Resolution:
-
Check Document Insight record
Status__cand error description fields. -
Verify document category is in
PDFInsight_ValidCategories. -
Confirm file size is under
MT_ContentSizeLimit(default: 3,000,000 bytes). -
If
Duplicate_Keys__cis populated and parsing halted, review source document or setHalt_Parsing_When_Duplicate_Keys_Found = false. -
For Ocrolus failures: verify auth token creation and reprocess via
Batch_OcrolusReprocessingJob.
Prevention: Validate document types and sizes at upload; monitor Ocrolus/MoneyThumb credential expiry.