Search documentation
Fuzzy search across every docs page and section
Getting startedGoing live
Fuzzy search across every docs page and section
Getting startedGoing live
Getting started
Which connectors you can turn on yourself today, which need a signed agreement, how institution routing picks one, and what to set before real user data flows.
Sandbox works out of the box and needs nothing. Real money data needs credentials, and the honest summary is: some providers you can turn on yourself in ten minutes, and some require a signed business relationship. This page says which is which.
Every connector is already implemented against its real API. Each activates the moment its environment variables are present — no code change, only a restart of the service.
| Provider | What it connects | What you do |
|---|---|---|
| GoCardless Bank Account Data | 2,500+ real banks across the UK and EU | Free self-signup — see below. |
| Coinbase | Coinbase accounts and transactions | Register an OAuth app. |
| Kraken | Kraken balances and ledgers | Users paste their own read-only API key in Link; the KRAKEN_* pair switches the connector on. |
| PayPal | PayPal balances and transactions | Register a REST app. |
| Crypto wallets | Any public EVM address (MetaMask, Ledger, Trezor…) | Set EVM_RPC_URL to any public RPC endpoint. |
| Manual import | Any institution, via CSV / OFX / QFX | Nothing — always on. |
Formerly Nordigen. Free tier, self-service, no sales call, and it covers most of the UK and EU retail banking market under a PSD2 licence they hold — you inherit their regulatory permission rather than needing your own AISP licence. This is the fastest route to real banks.
GOCARDLESS_SECRET_ID=…GOCARDLESS_SECRET_KEY=…
Every UK/EU institution in the catalog routes to GoCardless automatically, because their connectorPreference already lists it ahead of the sandbox fallback.
Create an OAuth application at portal.cdp.coinbase.com with redirect URI https://connect.feels.money/link/callback/coinbase.
COINBASE_CLIENT_ID=…COINBASE_CLIENT_SECRET=…
Each user pastes their own read-only Kraken API key inside Link; it is stored AES-encrypted on the item like every other provider credential, and the Query funds permission is all it needs. The connector itself is gated on an environment pair, so set one to switch it on.
KRAKEN_API_KEY=…KRAKEN_API_SECRET=…
Register a REST app in the PayPal developer dashboard with the reporting scope and redirect URI https://connect.feels.money/link/callback/paypal.
PAYPAL_CLIENT_ID=…PAYPAL_CLIENT_SECRET=…
Any public Ethereum JSON-RPC endpoint works, including free public ones. Balances are read from the chain by public address — read-only by construction, with no private key anywhere in the system.
EVM_RPC_URL=https://eth.llamarpc.com
These cover the US retail banking market — Chase, Bank of America, Wells Fargo, and the thousands of regional banks and credit unions in the catalog. Each is a company-to-company agreement with a compliance review. Budget days to weeks, not minutes. The connectors are written and waiting.
| Provider | Coverage | How to start |
|---|---|---|
| Plaid | Broadest US/CA coverage | dashboard.plaid.com/signup — sandbox is instant; Production access needs a company profile and a use-case review. |
| MX | US banks and credit unions | mx.com — sales-led. |
| Finicity (Mastercard) | US banks, income and asset verification | developer.mastercard.com — sales-led. |
| Akoya | Direct, token-based access to large US banks (no credential sharing) | akoya.com — sales-led; the cleanest model for the big banks. |
| Stripe Financial Connections | US bank accounts, tied to a Stripe account | dashboard.stripe.com — enable Financial Connections; faster if you already use Stripe. |
| Wise | Wise balances | wise.com/settings/public-keys — API access on a business account. |
Variables to set once you have them — each group is independent:
PLAID_CLIENT_ID= PLAID_SECRET= PLAID_ENV=productionMX_CLIENT_ID= MX_API_KEY=FINICITY_PARTNER_ID= FINICITY_APP_KEY= FINICITY_PARTNER_SECRET=AKOYA_CLIENT_ID= AKOYA_SECRET=STRIPE_FC_SECRET_KEY=WISE_CLIENT_ID= WISE_CLIENT_SECRET=
Each institution carries an ordered connectorPreference, for example Chase is ["akoya", "finicity", "plaid", "sandbox"]. At connect time the registry walks that list and uses the first connector whose credentials are present. So:
sandbox and behaves like a demo — simulated data that never touches a real bank.manual and evm-wallet always run for real, in both test and live environments.Test-environment keys (fc_sk_test_…) always resolve to sandbox regardless of credentials, so your customers develop against stable fake data while your live keys hit real banks. That is by design, not a failure.
| Test | Live | |
|---|---|---|
| Key prefix | fc_sk_test_ | fc_sk_live_ |
| Routing | Always sandbox | First configured connector in the preference order |
manual / evm-wallet | Run for real | Run for real |
| Data | Deterministic simulation | Real account data |
manual and evm-wallet.FC_ENCRYPTION_KEY to a real 32-byte value (openssl rand -base64 32). Without it the app derives a development key and says so loudly in the logs. Rotating it later requires re-encrypting stored provider tokens.CRON_SECRET and point a scheduler at GET /api/internal/cron every 5–15 minutes. It drives webhook retries and stale-item refresh. Unset, the route fails closed and background work never runs.https://connect.feels.money/link/callback/<connector>.Real institution logos are fetched once and served from our own origin. That is deliberate: if the Link modal loaded logos from a third-party CDN, that CDN would learn every user's IP address and which bank they were about to connect. Fictional sandbox institutions keep monogram tiles, so demo data never wears a real brand's mark.
Bank consent pages cannot be displayed inside a frame, so the Link modal hands off to a popup window — or, if popups are blocked, asks the embedding page to navigate the whole tab — and resumes automatically when the bank returns the user.