/v1 · sandbox always on
The developer-first financial data platform.
One API for banks, cards, investments, payment apps, and crypto — with AI enrichment built in.
pnpm add @feelconnect/node
76 institutions in the network
- 31banks
- 7credit unions
- 5payment apps
- 14brokerages
- 10crypto
how it works
Three calls to production data.
Link handles the messy part — bank auth. After that it is one POST per product, the same shapes in every environment.
Embed Link
Drop the modal into your app. Your user picks an institution and authenticates — OAuth, credentials, MFA, wallet address, or file upload.
import { FeelConnect } from "@feelconnect/link";FeelConnect.open({linkToken,onSuccess: (publicToken) => {void exchange(publicToken);},});
Exchange the token
Trade the short-lived public token for a permanent access token on your server. That token is the item — one connection, all its products.
import { FeelConnect } from "@feelconnect/node";const fc = new FeelConnect({apiKey: process.env.FC_SECRET_KEY!,});const { access_token, item_id } =await fc.link.exchangeToken({ public_token });
Pull the data
Sync transactions with a cursor, or call any other product on the item. Webhooks tell you when there is something new.
const { added, modified, removed, next_cursor } =await fc.transactions.sync({access_token,cursor,});// next run: pass next_cursor back in
products
Sixteen products. One access token.
Your user consents once through Link; after that every product is a POST on the same item. Plaid-shaped requests, zod-validated, cursor pagination where it matters.
linkEmbeddable connect flow with OAuth, credentials, and MFA.itemsConnections as objects — get, refresh, remove.institutionsSearch the network by name, type, or country.accountsEvery account on an item, typed and masked.balancesCurrent, available, and limit on demand.transactionsCursor-based sync with added, modified, removed.identityNames, emails, phones, and addresses on file.incomeIncome streams with frequency and confidence.assetsPoint-in-time asset reports across accounts.investmentsHoldings, securities, and investment transactions.liabilitiesCards, mortgages, and student loans with APRs.recurringDetected subscriptions and recurring bills.cryptoExchange accounts and self-custody wallets.categoriesThe full transaction taxonomy, versioned.webhooksSigned events with retries and delivery logs.graphqlOne query across items, accounts, transactions.
ai enrichment
Nine AI products, sold by the call.
Every endpoint accepts an access_token or a raw payload, so you can enrich data you did not source through us. Deterministic rules run first; the model sharpens the result.
- POST
/v1/ai/categorizeMerchant-aware categories with confidence scores. - POST
/v1/ai/subscriptionsRecurring charges, price creep, and cadence. - POST
/v1/ai/cashflowBalance forecast over a configurable horizon. - POST
/v1/ai/merchantResolve a raw descriptor to a real merchant. - POST
/v1/ai/health-scoreExplainable 0–100 financial health with subscores. - POST
/v1/ai/financial-summaryPlain-language summary with highlights. - POST
/v1/ai/fraud-riskRisk signals with an overall grade. - POST
/v1/ai/purchase-analysisBuy, wait, or skip — with opportunity cost. - POST
/v1/ai/weekly-reportA narrative week in review, ready to render.
{"categorized": [{"id": "txn_8kb2mq4tfxcw","category": "Food & Drink","category_detailed": "Coffee shops","confidence": 0.98},{"id": "txn_2fw9pl6hzrde","category": "Transport","category_detailed": "Rideshare","confidence": 0.94}],"engine": "ai+rules","model": "kimi-k3"}
Powered by Animica AI — model kimi-k3.
When the model is unreachable, responses degrade to the deterministic rules engine and say so: "engine": "rules". Your integration never blocks on inference.
connector mesh
One integration. Every provider.
Each institution carries an ordered connector preference; the registry routes to the best enabled provider at link time. You never write provider-specific code.
- Open Banking
- Plaid
- MX
- Finicity
- Akoya
- GoCardless
- Stripe FC
- Coinbase
- Kraken
- PayPal
- Wise
- CSV / OFX
resolveConnector(institution, env) picks the first enabled provider for each institution. Sandbox routes are always on; manual import and wallet tracking run for real in live mode.
developer experience
Built like the tools you already trust.
Typed SDKs for eleven stacks, webhooks you can verify in four lines, and a sandbox that behaves like a real bank — deterministically.
- TypeScript
@feelconnect/node - JavaScript
@feelconnect/link - Python
pip install feelconnect - Go
go get feelconnect-go - Rust
cargo add feelconnect - Java
com.feelconnect:sdk - Swift
FeelConnect (SwiftPM) - Kotlin
com.feelconnect:sdk-kotlin - Dart
feelconnect (pub.dev) - PHP
feelconnect/feelconnect - C#
FeelConnect (NuGet) - All SDK docs
Webhooks you can prove
Every delivery is signed with HMAC-SHA256 over a timestamped payload and rejected outside a five-minute window. Failed deliveries retry with backoff — 0s, 1m, 5m, 30m, 2h — and every attempt is recorded in the dashboard.
import { verifyWebhook } from "@feelconnect/node";const event = verifyWebhook({rawBody,signatureHeader: req.headers["fc-signature"],timestampHeader: req.headers["fc-timestamp"],secret: process.env.FC_WEBHOOK_SECRET!,});if (event.type === "transactions.sync_updates_available") {await enqueueSync(event.data.item_id);}
A sandbox that keeps its books
Every sandbox item is seeded deterministically: 24 months of payroll, rent, subscriptions, and travel that add up to the balances you read. New transactions arrive as real time passes, so cursors and webhooks behave exactly as they will in live.
user_good / pass_good→ connectsuser_mfa / pass_good→ MFA, code 1234user_locked→ ITEM.ERROR
security
A compliance-friendly architecture.
Encryption, key hygiene, and audit trails are defaults, not add-ons. What we store, we can account for; what we do not need, we do not keep.
Encrypted at rest
Provider tokens and webhook secrets sealed with AES-256-GCM.
Hashed keys
Secret keys stored as SHA-256 hashes — shown once, never again.
Signed webhooks
HMAC-SHA256 signatures with a five-minute timestamp window.
Scoped roles
Owner, admin, developer, viewer — enforced on every console action.
Audit trail
Sensitive actions land in an append-only audit log.
case study
We build feels.money on FeelConnect — same API you get.
Our consumer finance app is customer number one. It ships on the public /v1 surface with an ordinary secret key: no private endpoints, no special-cased rate limits. When the platform breaks, we feel it first.
- @feelconnect/link React embed
- webhook-driven delta syncs
- /v1/ai/* under the coach
pricing
Metered like infrastructure.
Requests, AI requests, and connected users — the same three meters on every plan. Start free; upgrade when you go live.
Prototype in the sandbox
- 10k requests/mo
- 100 connected users
- 10 rps
First production users
- 500k requests/mo
- 5k connected users
- 50 rps
Scale-up volume
- 5M requests/mo
- 50k connected users
- 200 rps
Custom limits and support
- Unlimited requests/mo
- Unlimited connected users
- 1000 rps
get started
Ship your first integration today.
The sandbox is always on: deterministic data, every product, and 10,000 free requests a month. No card required.