the whole surface
Nine data products and nine AI products, on one contract.
Cash, cards, loans, brokerage positions, crypto, income, and detected recurring streams — read through the same bearer key, the same POST + JSON convention, and the same typed error envelope.
- data products
- 9
- AI products
- 9
- connectors
- 17
- client libraries
- 11
- institutions
- 938
- countries
- 61
beyond the basics
The products people forget an aggregator has to cover.
Accounts and transactions are table stakes. These are the ones that decide whether you can build a net-worth view, a debt payoff plan, or a portfolio screen without a second vendor.
- POST
/v1/investments/holdings/getPositions with their securities: ticker, type, close price, quantity, cost basis, value. - POST
/v1/investments/transactions/getBuys, sells, dividends, deposits, withdrawals, and fees on investment accounts. - POST
/v1/liabilities/getAPR, minimum payment, next due date, and original principal per credit or loan account. - POST
/v1/income/getDetected income streams: employer, cadence, average gross, and a confidence score. - POST
/v1/assets/getTotal assets, total liabilities, net worth, and the breakdown behind them. - POST
/v1/recurring/getSubscriptions, bills, and payroll as streams with cadence and next expected date. - POST
/v1/identity/getAccount-holder names, emails, phones, and addresses on file. - POST
/v1/graphqlOptional read gateway over the same services, for callers that prefer one round trip.
Accounts, balances, and transaction sync live on the bank data page; the Link flow and the institution catalog live on the open banking page; categorization, merchants, and subscription detection live on the enrichment page.
requests
A balance sheet in one call.
assets/get sums depository balances and takes the greater of balance or holdings for investment and crypto accounts, so invested value is never counted twice.
# One call for the whole balance sheet on a connection.curl https://connect.feels.money/v1/assets/get \-H "Authorization: Bearer $FEELCONNECT_SECRET_KEY" \-H "Content-Type: application/json" \-d '{ "access_token": "fc_at_your_item_token" }'
Totals are stated in one currency and accounts held in another are excluded rather than converted — there are no FX rates in this path, and silently inventing one would be worse than omitting the account. breakdown.holdings is informational: it is already reflected in the investment and crypto figures.
ai products
9 enrichment endpoints on the same key.
Each is independently useful, responds in one round trip, and reports whether a model was involved.
Categorize transactions
POST /v1/ai/categorizeDetect subscriptions
POST /v1/ai/subscriptionsForecast cash flow
POST /v1/ai/cashflowMerchant intelligence
POST /v1/ai/merchantFinancial health score
POST /v1/ai/health-scoreFinancial summary
POST /v1/ai/financial-summaryFraud and anomaly signals
POST /v1/ai/fraud-riskPurchase analysis
POST /v1/ai/purchase-analysisWeekly report
POST /v1/ai/weekly-report
Four of them accept a raw transactions payload instead of an access token, so they work on data aggregated anywhere. The mechanics are on the enrichment page and in the AI reference.
access patterns
Five ways to reach the same data.
REST is the contract; the rest are conveniences over it, not parallel products with their own semantics.
| Surface | Where it lives |
|---|---|
| REST | https://connect.feels.money/v1/… — POST with a JSON body, bearer secret key, FC-Version on every response. |
| GraphQL | POST /v1/graphql — a read gateway over accounts, transactions, and the item. Reference. |
| MCP | https://connect.feels.money/mcp — a Model Context Protocol server so an agent can call the products as tools. Reference. |
| OpenAPI 3.1 | https://connect.feels.money/openapi.json — the machine description, with https://connect.feels.money/llms.txt and https://connect.feels.money/llms-full.txt for text-first crawlers. |
| Webhooks | Signed event deliveries with a five-minute timestamp window and retries at 0s, 1m, 5m, 30m, and 2h. Reference. |
clients
11 libraries, one method vocabulary.
Identical group structure, identical error type, identical webhook verification helper — so a polyglot backend reads the same in every service.
- TypeScript / Node
- Link JS (browser)
- Python
- Go
- Rust
- Java
- Swift
- Kotlin
- Dart / Flutter
- PHP
- .NET
The published manifests on npm, PyPI, crates.io, Maven, Packagist, and NuGet declare the MIT licence. Install lines and per-language examples are in the SDK reference; plain HTTPS works just as well, since every endpoint is POST with a JSON body.
What live coverage actually depends on
FeelConnect does not hold bank connections of its own. Every institution in the catalog carries an ordered chain of connectors, and live traffic goes to the first one whose credentials are present in the deployment you are calling.
Some connectors an operator can switch on alone in minutes — GoCardless Bank Account Data (UK and EU banks, free self-signup under their PSD2 licence), Coinbase, Kraken, PayPal, public-address crypto wallets, and CSV / OFX / QFX import. Others need a signed business relationship before they will serve production data, including Plaid, MX, Finicity, Akoya, and Stripe Financial Connections. Where an institution has no enabled connector, a live call returns provider_error rather than pretending.
The sandbox is the exception and it is always on: test keys resolve to the simulated network regardless of credentials, so the full integration is buildable on day one. See going live for the provider-by-provider breakdown.
faq
Questions developers actually ask.
keep reading
Where to go next.
- API referenceEvery endpoint, parameter, and response shape.
- API explorerRun real sandbox calls from the browser.
- Bank data APIAccounts, balances, and cursor-based transaction sync.
- Transaction enrichment APICategories, merchants, subscriptions, and recurring streams.
- PricingRequests, AI requests, connected users, and rate limits.
- Institution directoryEvery institution, its routing chain, and its products.