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

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/categorize
  • Detect subscriptions

    POST /v1/ai/subscriptions
  • Forecast cash flow

    POST /v1/ai/cashflow
  • Merchant intelligence

    POST /v1/ai/merchant
  • Financial health score

    POST /v1/ai/health-score
  • Financial summary

    POST /v1/ai/financial-summary
  • Fraud and anomaly signals

    POST /v1/ai/fraud-risk
  • Purchase analysis

    POST /v1/ai/purchase-analysis
  • Weekly 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.

SurfaceWhere it lives
RESThttps://connect.feels.money/v1/… — POST with a JSON body, bearer secret key, FC-Version on every response.
GraphQLPOST /v1/graphql — a read gateway over accounts, transactions, and the item. Reference.
MCPhttps://connect.feels.money/mcp — a Model Context Protocol server so an agent can call the products as tools. Reference.
OpenAPI 3.1https://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.
WebhooksSigned 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.