FeelConnect/v1 financial data API

Every account your users have, behind one API.

Banks, credit unions, brokerages, crypto exchanges and wallets, payment apps and business platforms — one integration, one normalised schema, and nine AI enrichment endpoints included rather than sold as a second product.

Sign up, verify your email, issue your own sandbox key — no approval queue, no sales call, no card.Run a call in the explorer

POST/v1/transactions/sync

Request

Authorization: Bearer fc_sk_live_…

{  "access_token": "fc_at_live_8Qw3yv…",  "cursor": "c2VxOjE0ODI=",  "count": 100}

Response200 OK

{  "added": [    {      "transaction_id": "txn_8kb2mq4tfxcw3nre1v7d",      "account_id": "acct_5jn8rw2yqd0hbxk4mc93",      "date": "2026-07-27",      "authorized_datetime": "2026-07-27T15:41:08.000Z",      "name": "DAILY GRIND COFFEE 072",      "merchant_name": "Daily Grind Coffee",      "amount": 6.75,      "iso_currency_code": "USD",      "pending": false,      "category": "Food & Drink",      "category_detailed": "Coffee Shops",      "payment_channel": "in_store"    }  ],  "modified": [],  "removed": [],  "next_cursor": "c2VxOjE0ODM=",  "has_more": false}

Cursor sync returns what changed since your last call — added, modified and removed — so you store a cursor, not a diffing strategy. A test key returns the same shape from the simulated network, with 24 months of history behind it.

938institutions in the catalogue
61countries represented
903with a real logo, served first-party
29routed to a live provider here today
  • Banks
  • Credit unions
  • Brokerages
  • Crypto exchanges and wallets
  • Payment apps
  • Business platforms

Live coverage follows credentials, not marketing. Every institution in the catalogue is connectable in the sandbox from your first key; in live mode this deployment currently routes through Manual import, Crypto wallets, PayPal. Add a provider — or bring your own account — and its institutions start resolving on the next request, with no reseed and no code change. What each provider requires · Institution totals are read from the platform as this page is built; the country and logo counts were taken from the same catalogue on 2026-07-29

Products

One contract, from connection to enrichment.

31 documented endpoints in an OpenAPI 3.1 contract — 9 of them AI enrichment. Plaid-shaped POST + JSON, zod-validated, cursor pagination on the sync endpoints, and a typed error envelope with a request id on every failure.

AI enrichment

Nine enrichment endpoints, included.

Send an access token or raw transactions. Deterministic rules answer first — merchant table, cadence detection, scoring formulas — and the model is used to improve on them, not to invent them. Every response carries an engine field, so you always know what answered.

  • /v1/ai/categorizeCategorizeTransactions into a 14-category taxonomy with detailed subcategories and a confidence per row.
  • /v1/ai/subscriptionsSubscriptionsRecurring charges detected from cadence and amount stability, with monthly and annual totals.
  • /v1/ai/cashflowCash flowA forward forecast over a horizon you choose, built from observed inflows and outflows.
  • /v1/ai/merchantMerchantA statement descriptor resolved to a merchant name, category, and website where one is known.
  • /v1/ai/health-scoreHealth scoreA 0–100 score with explainable subscores — savings rate, cash-flow stability, debt ratio, and more.
  • /v1/ai/financial-summaryFinancial summaryA plain-language summary of a connected item plus the highlights behind it.
  • /v1/ai/fraud-riskFraud riskAnomaly signals over recent activity with an overall low, medium, or high assessment.
  • /v1/ai/purchase-analysisPurchase analysisA buy/wait/skip verdict for a named item and price, with opportunity cost over time.
  • /v1/ai/weekly-reportWeekly reportIncome, expenses, net, largest purchases and subscription changes for a given week.
POST/v1/ai/categorize

Request

Authorization: Bearer fc_sk_test_…

{  "transactions": [    {      "id": "txn_8kb2mq4tfxcw3nre1v7d",      "description": "SQ *BLUE FERN ESPRESSO",      "amount": 5.4    }  ]}

Response200 OK

{  "categorized": [    {      "id": "txn_8kb2mq4tfxcw3nre1v7d",      "category": "Food & Drink",      "category_detailed": "Coffee Shops",      "confidence": 0.97    }  ],  "engine": "rules"}

engine is one of rules, ai, or ai+rules. When the model is unreachable the endpoint still answers from rules rather than failing the request.

AI requests are metered separately from data requests, with their own monthly quota per plan. Read the enrichment docs

Connector mesh

One integration. Every provider behind it.

Aggregators go down, price differently, and cover different markets. Rather than making that your problem, the platform routes each institution to the best connector available to it — and gives you three paths that need no provider relationship at all.

  1. Every institution carries a chainEach row in the catalogue lists its preferred connectors in order — the direct provider first, the broad aggregator behind it, the simulator last.
  2. The registry picks the first one that is liveResolution happens per request against the credentials present in the environment. Turn a provider on and its institutions start resolving immediately; turn it off and traffic falls back down the chain.
  3. Your integration never changesWhichever provider answers, you receive the same accounts, transactions, holdings and liabilities shapes, with the same ids and the same cursor semantics.

Providers the registry can route to

  • PlaidUS and Canada banks
  • TellerUS banks, developer-first
  • MXUS banks and credit unions
  • FinicityUS banks, income and assets
  • AkoyaToken-based access to large US banks
  • GoCardlessUK and EU banks under PSD2
  • Enable BankingUK, EU and Nordic banks under PSD2
  • Stripe Financial ConnectionsUS bank accounts, tied to Stripe
  • SimpleFINUS banks through the user's own Bridge
  • AkahuNew Zealand banks and KiwiSaver
  • CoinbaseExchange accounts and transactions
  • KrakenExchange balances and ledgers
  • PayPalPayPal balances and activity
  • WiseWise multi-currency balances

No provider required

  • SandboxEvery institution in the catalogue, simulated, always on
  • Manual importAny institution, via CSV, OFX or QFX upload — real in both environments
  • Public-address cryptoAny public EVM address, read straight from the chain, no keys held

Each connector is implemented against its provider's real API and activates the moment its credentials are present — no code change, no redeploy of logic. Which ones you can switch on yourself and which need a signed agreement is written down connector by connector in the going-live guide. Provider names are the trademarks of their respective owners; FeelConnect is not affiliated with, endorsed by, or sponsored by any of them, and enabling a connector makes you that provider's customer under your own agreement with them.

Solutions

What teams build on it.

The same account graph serves very different products. Each page below names the endpoints that shape it, so you can judge the fit before writing a line of integration code.

SDKs

Eleven clients, one contract.

Every server SDK exposes the same groups — link, institutions, items, accounts, transactions, identity, income, assets, investments, liabilities, recurring, categories, ai, sandbox — plus a webhook verification helper. The browser package handles nothing but a link token.

  • TypeScript / Node@feelconnect/node
  • Link JS (browser)@feelconnect/link
  • Pythonfeelconnect
  • Gofeelconnect-go
  • Rustfeelconnect
  • Javacom.feelconnect:feelconnect
  • Kotlincom.feelconnect:feelconnect-kotlin
  • SwiftFeelConnect
  • Dart / Flutterfeelconnect
  • PHPfeelconnect/feelconnect
  • .NETFeelConnect

Server SDKs hold secret keys and belong in a backend. The one browser-safe package is @feelconnect/link, which touches nothing but a link token. SDK reference

server.ts
import { FeelConnect } from "@feelconnect/node"; const fc = new FeelConnect({ apiKey: process.env.FEELCONNECT_SECRET_KEY! }); const { link_token } = await fc.link.createToken({  user: { client_user_id: "user-123" },  products: ["transactions", "balances"]}); const page = await fc.transactions.sync({ access_token });const health = await fc.ai.healthScore({ access_token });

The same six lines in Python, Go, Rust, Java, Kotlin, Swift, Dart, PHP or .NET — the method names differ only where the language demands it. Quickstart

Security architecture

What protects the data, described exactly.

Financial data deserves specifics rather than adjectives, so here is what the code does.

AES-256-GCM at rest

Provider tokens, connection access tokens, webhook secrets and TOTP secrets are encrypted with a deployment key before they touch the database.

Keys stored as hashes

Secret keys and access tokens are kept as SHA-256 lookup hashes with a prefix and last four for display. A database dump does not yield a usable key.

Signed, retried webhooks

Every delivery carries an HMAC-SHA256 signature over timestamp and raw body, with a five-minute tolerance window and retries backing off across two hours.

Separate test and live planes

A key's environment decides which data plane it reaches. Test keys resolve to the simulator and can never touch a live connection.

Roles and 2FA in the console

Owner, admin, developer and viewer roles gate every console action, with TOTP two-factor and passkeys available and enforceable per organisation.

Audit log and per-request metering

Console actions are written to an audit log, and every API request is logged with a request id you can quote in a support thread.

This is a description of our architecture, not a certification claim: we do not assert SOC 2, PCI or ISO status anywhere on this site. If your procurement process needs documentation, ask us and we will answer about what exists today. Authentication and key handling · Webhook signatures

Case study

We built feels.money on it — and it is the same API you get.

The fastest way to judge a data platform is to look at something demanding built on top of it. feels.money is our consumer AI finance app and FeelConnect's first customer: connected accounts, categorized spending, subscription detection, net worth, goals and a coach that answers with real numbers — all of it on the public /v1 contract.

It authenticates like any customer

feels.money holds a secret key issued in the FeelConnect console and calls the public API through the published Node SDK. There is no private endpoint, no internal database read, and no shortcut around the contract.

  • @feelconnect/node

Connections run through hosted Link

The app creates a link token server-side, opens the Link modal in the browser package, exchanges the public token, and stores the access token encrypted. The consent screen a feels.money user sees is the one your users would see.

  • /v1/link/token/create
  • /v1/link/token/exchange

Data arrives by cursor sync and webhooks

The first sync walks the cursor to completion; after that FeelConnect posts signed events and the app syncs the delta. Balances, holdings, liabilities and recurring streams come from the same endpoints, in the same shapes.

  • /v1/transactions/sync
  • /v1/accounts/get
  • /v1/investments/holdings/get
  • /v1/recurring/get

Disconnecting is a call, not a support ticket

When someone removes a bank — or deletes their account — the app calls items/remove, so the connection stops at the platform rather than merely disappearing from a screen.

  • /v1/items/remove

What feels.money adds on top is its own product — the coaching voice, the health score, the journal. What it does not do is reach past the API for anything: if an endpoint could not serve it, the feature would not exist. That is the honest form of dogfooding, and it is why every rough edge in the contract got filed down before you saw it.

Pricing

Published prices, published limits.

Four plans, all of them printed here rather than hidden behind a form. The quotas are the ones the API enforces: connected users, monthly API and AI requests, and requests per second.

Free

$0/ month

Sandbox only. No card, no approval queue, no call.

  • 100 connected users
  • 10,000 API requests a month
  • 1,000 AI requests a month
  • 10 requests a second
Start in the sandbox

Startup

Most common

$99/ month

Live keys, for the first real users.

  • 5,000 connected users
  • 500,000 API requests a month
  • 50,000 AI requests a month
  • 50 requests a second
See plan details

Growth

$499/ month

For products with traffic behind them.

  • 50,000 connected users
  • 5,000,000 API requests a month
  • 500,000 AI requests a month
  • 200 requests a second
See plan details

Enterprise

Custom

Your provider accounts, your compliance agreements.

  • Unlimited connected users and requests
  • 1,000 requests a second
  • Bring your own provider accounts
  • 250 team seats, SSO-ready RBAC
Talk to us

The free plan is sandbox-only; live keys start on Startup. Rate limits are token-bucket per key with a 3× burst, and every response carries its remaining budget in the X-RateLimit-* headers. Full pricing and quotas · Rate limits

Enterprise

Bring your own provider accounts.

Larger teams usually already hold an aggregator contract, or need the data relationship to sit on their own paper for regulatory reasons. FeelConnect supports that: your credentials, your agreement, our routing, normalisation and enrichment on top.

Or write to animicaorg@gmail.com.

Your provider relationship

Add your own Plaid, Teller or Enable Banking credentials and your users' connections run on your agreement, your billing and your compliance posture — with FeelConnect as the orchestration and enrichment layer rather than the licence holder.

Existing connections stay put

Every connected item records which credential set created it, so an item keeps talking to the provider account it was made with instead of silently re-routing later.

Same API, same SDKs

Nothing about your integration changes. The routing decision moves under the hood; the endpoints, ids and cursors you already call stay exactly as they are.

Straight answer on status: the storage model for per-organisation provider credentials has shipped, and the per-organisation resolution layer is in progress. Bringing your own provider account is done with us during enterprise onboarding today — it is not yet a self-serve switch in the console, and we would rather tell you that now.

Get a key and make a real call in the next ten minutes.

Sign up, create an application, issue a test key, run the quickstart. Nobody has to approve you first, and the simulated network answers with 24 months of history from the first request.

Looking for the personal finance app instead? feels.money for individuals