Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.encoreos.io/llms.txt

Use this file to discover all available pages before exploring further.

Last Updated: 2026-01-29
Related Spec: FA-20

Quick Start

Choose Your Environment

EnvironmentDataCostLimitUse Case
SandboxSimulatedFreeUnlimitedUI testing, development
DevelopmentReal banksFree100 ItemsIntegration testing
ProductionReal banksPaidUnlimitedLive users
Recommendation: Start with sandbox to test the flow, then move to development for real bank testing.

Step 1: Get Plaid Credentials

  1. Sign up at Plaid Dashboard
  2. Go to Team SettingsKeys in Dashboard
  3. Note your:
    • Client ID (e.g., 5f8c1b2a3d4e5f6a7b8c9d0e)
    • Secret (per environment - sandbox, development, production)
  4. Go to DevelopersWebhooks
  5. Add a webhook endpoint: https://your-project.supabase.co/functions/v1/plaid-webhook

Step 2: Configure Supabase Secrets

  1. Go to your Lovable project → SettingsCloudSecrets
  2. Add the following secrets:
Secret NameValue
PLAID_CLIENT_IDYour client ID from Plaid Dashboard
PLAID_SECRETYour secret (use sandbox secret for testing)
PLAID_ENVIRONMENTsandbox (or development / production)

Option B: Using CLI

# Set secrets individually
supabase secrets set PLAID_CLIENT_ID=your_client_id
supabase secrets set PLAID_SECRET=your_secret
supabase secrets set PLAID_ENVIRONMENT=sandbox

Verify Secrets

supabase secrets list
You should see:
NAME                 | DIGEST
---------------------|--------
PLAID_CLIENT_ID      | abc123...
PLAID_SECRET         | def456...
PLAID_ENVIRONMENT    | ghi789...

Step 3: Enable Feature Flag

  1. Navigate to Finance & AccountingSettings
  2. Go to the Integrations tab
  3. Toggle Enable Plaid Integration to ON
  4. Click Save Changes
The Plaid option will now appear in the bank connection flow.

Step 4: Test the Connection

  1. Navigate to FinanceBank Accounts
  2. Click Connect Bank Account
  3. If both Teller and Plaid are enabled, select Plaid from the provider dialog
  4. Plaid Link modal opens
  5. In Sandbox mode:
    • Select any institution (e.g., “First Platypus Bank”)
    • Use test credentials (see below)
    • Select accounts to connect
  6. Verify the account appears with a “Plaid” provider badge

Sandbox Test Credentials

Use these credentials when connecting banks in sandbox mode:
UsernamePasswordBehavior
user_goodpass_goodStandard successful login
user_transactions_dynamicpass_goodGenerates new transactions daily
user_badpass_badInvalid credentials error
Test Institution ID: ins_109508 (First Platypus Bank) For MFA testing:
  • Username: user_good
  • Password: mfa_device (triggers device-based MFA)
  • Code: 1234 (any 4-digit code works in sandbox)

Step 5: Sync Transactions

  1. After connecting, click the Sync button on the account card
  2. Transactions will be imported into Bank Statement Lines
  3. A toast notification shows the sync results:
    • Transactions added
    • Transactions modified
    • Transactions removed
For Plaid sandbox accounts, use user_transactions_dynamic credentials to generate new transactions daily.

Troubleshooting

🚨 “Invalid client_id” Error

Cause: PLAID_CLIENT_ID secret not configured or incorrect. Fix:
  1. Verify the secret exists: supabase secrets list
  2. Check the value matches your Plaid Dashboard
  3. Secrets are case-sensitive

🚨 “Plaid integration is not enabled”

Cause: Feature flag not enabled in FA Module Settings. Fix:
  1. Navigate to Finance → Settings → Integrations
  2. Enable “Plaid Integration”
  3. Save changes
Cause: Link token creation failed. Check:
  1. Browser console for errors
  2. Edge function logs in Supabase Dashboard
  3. Verify all three secrets are set (CLIENT_ID, SECRET, ENVIRONMENT)

🚨 “Institution not supported”

Cause: The selected institution isn’t available in sandbox mode. Fix:
  • Use sandbox-supported institutions (any from the Plaid Link flow)
  • Switch to development environment for real institutions

🚨 Webhook Events Not Processing

Cause: Webhook endpoint not configured or signature verification failing. Check:
  1. Webhook URL is correct in Plaid Dashboard
  2. Edge function logs for signature errors
  3. Function is deployed: supabase functions list

🚨 Rate Limiting (429 Error)

Cause: Too many API requests in a short period. Fix:
  • Wait 60 seconds and retry
  • Plaid has rate limits per client ID
  • The edge functions have built-in exponential backoff

Environment-Specific Setup

# Supabase secrets
PLAID_ENVIRONMENT=sandbox
  • Uses simulated bank data
  • No real bank connections
  • Test credentials work (see above)
  • Transactions are generated synthetically

Development Mode (Real Banks, Limited)

# Supabase secrets
PLAID_ENVIRONMENT=development
  • Connects to real bank OAuth flows
  • Limited to 100 Items (bank connections)
  • Free tier
  • Real transaction data

Production Mode

# Supabase secrets
PLAID_ENVIRONMENT=production
  • Full production access
  • Requires Production access approval from Plaid
  • Paid based on usage
  • Contact Plaid for pricing

Webhook Events Handled

The plaid-webhook edge function processes these events:
Event TypeDescriptionAction
SYNC_UPDATES_AVAILABLENew transactions readyTriggers sync
TRANSACTIONS_REMOVEDTransactions were removedUpdates affected records
ERRORItem has an errorSets status to error
PENDING_EXPIRATIONCredentials expiringSets status to reauth_required
LOGIN_REPAIREDUser fixed login issueSets status to connected

Required Secrets Summary

SecretRequiredDescription
PLAID_CLIENT_IDYour Plaid client ID
PLAID_SECRETEnvironment-specific secret
PLAID_ENVIRONMENTsandbox, development, or production

Provider Comparison

FeaturePlaidTeller
Institution Coverage11,000+ globallyUS only
Auth MethodOAuth (browser-based)OAuth + mTLS
Transaction SyncSync API (cursor-based)Polling
WebhooksJWT-verifiedHMAC-SHA256
International Support✅ (CA, UK, EU)
Setup ComplexityLowMedium (mTLS for dev/prod)

See Also