Lending
The applicant's file, from the source.
Identity, income streams, assets, liabilities and two years of transactions behind one access token — four parallel calls instead of a document upload, an OCR pipeline and a manual review queue. Forward-looking cash flow and anomaly signals sit on the same key.
who this is for
Statements are a terrible input.
Lenders and credit teams replacing PDF statements with an API call
what you'd call
The endpoints this actually uses.
Underwriting reads wide rather than deep: several endpoints once per applicant, rather than one endpoint continuously.
| POST | /v1/identity/get | Names, emails, phones and addresses on the account |
| POST | /v1/income/get | Income streams with cadence and confidence |
| POST | /v1/assets/get | Assets, liabilities and net worth in one response |
| POST | /v1/liabilities/get | Cards, student loans and mortgages with APR and terms |
| POST | /v1/accounts/balance/get | Balances refreshed at decision time |
| POST | /v1/transactions/get | Date-range history for affordability arithmetic |
| POST | /v1/ai/cashflow | Forward projection over a 7–120 day horizon |
| POST | /v1/ai/fraud-risk | Anomaly signals with a low/medium/high verdict |
| POST | /v1/items/refresh | Pull fresh data before a decision is finalised |
in code
What the integration looks like.
The file first, assembled in parallel because the calls are independent. Then the forward-looking signals you would run over it.
import { FeelConnect } from "@feelconnect/node"; const fc = new FeelConnect({ apiKey: process.env.FEELCONNECT_SECRET_KEY!, baseUrl: "https://connect.feels.money/v1",}); // One applicant file, assembled from the account rather than uploaded.export async function buildApplicationFile(accessToken: string) { const [identity, income, assets, liabilities] = await Promise.all([ fc.identity.get({ access_token: accessToken }), fc.income.get({ access_token: accessToken }), fc.assets.get({ access_token: accessToken }), fc.liabilities.get({ access_token: accessToken }), ]); return { // Names, emails, phones and addresses as the institution holds them — // the check that a stated identity matches the funding account. holder: identity.identity, // Detected streams with cadence and confidence, not a single number. income: income.income_streams, // total_assets, total_liabilities and net_worth are computed for you. position: { assets: assets.total_assets, liabilities: assets.total_liabilities, netWorth: assets.net_worth, }, // Cards, student loans and mortgages with their APR and term detail. obligations: liabilities.liabilities, };}// Forward-looking signals on the same connection.const { forecast } = await fc.ai.cashflow({ access_token: accessToken, horizon_days: 90,}); // Anomaly detection also runs in payload mode, so it can score a file// you assembled from an aggregator you already pay for.const { signals, overall_risk } = await fc.ai.fraudRisk({ access_token: accessToken,}); if (overall_risk === "high") { await routeToManualReview(signals);} // A 24-month transaction history behind the same token, for the// affordability arithmetic your credit policy actually specifies.const history = await fc.transactions.get({ access_token: accessToken, start_date: "2024-07-01", end_date: "2026-07-01", options: { count: 500, offset: 0 },});what you get
Mechanisms, in the order you would meet them.
Identity as the institution holds it
The names, emails, phones and addresses on the account — the check that the person applying is the person the funding account belongs to.Income as streams, not a number
Detected from cadence and stability, with confidence attached, so your policy can distinguish a steady salary from a volatile one rather than averaging them together.Assets and liabilities in one call
/v1/assets/getreturns totals and net worth computed across every connected account;/v1/liabilities/getadds APR and term detail per obligation.Forward-looking, not just historical
Cash-flow forecasting over a 7 to 120 day horizon, and anomaly signals that also run in payload mode against data you already hold.Your provider relationship
On Enterprise, connections run under your own aggregator agreement, which is usually the only arrangement a regulated lender's compliance team will sign.An auditable trail
Every request is logged with its path, status, latency and request id, and console actions are recorded in an org-scoped audit log with actor, target and source IP.
questions
Straight answers.
Other use cases
- AI agents and assistantsAn MCP server with 15 tools, an OpenAPI 3.1 document and an llms.txt — so an agent can discover the platform, connect an account and read real balances without you writing a tool wrapper.
- Budgeting and personal finance appsCursor-based transaction sync, categorization and subscription detection included — the exact stack feels.money runs on.
- Accounting and bookkeepingA reconciliation-shaped sync loop with added, modified and removed sets, plus merchant cleanup and categorization on the same key.
- Crypto and wealthBrokerage holdings, exchange balances and self-custody wallets in one holdings shape, with net worth computed across all of it.
- Platform pricingPublished tiers with the real quotas: Free for the sandbox, Startup at $99 for live access, Growth at $499, Enterprise quoted.
Underwrite from the account, not the attachment.
Assemble a full applicant file against the sandbox today — identity, income, assets, liabilities and 24 months of history — and see whether the shapes fit your credit policy before anyone signs anything.
The sandbox needs no approval and no card. You can have the shapes in front of you in a few minutes and decide from there.