enrichment

Descriptors in, merchants and categories out.

Enrichment is an endpoint on the same key as everything else, not a separate product with a separate contract. It runs deterministically first, so the answer exists whether or not a model is reachable — and it works on transactions you aggregated somewhere else.

descriptor rules
526
primary categories
14
subcategories
89
AI endpoints
9

requests

Send transactions, get labels back.

This request needs no connected account, no Link flow, and no item — just a key.

# No access_token: enrich transactions from any source.
curl https://connect.feels.money/v1/ai/categorize \
-H "Authorization: Bearer $FEELCONNECT_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"transactions": [
{ "id": "t1", "description": "SQ *BLUE BOTTLE COFFEE OAK", "amount": 6.75 },
{ "id": "t2", "description": "COMCAST CABLE COMM", "amount": 89.99 }
]
}'

rules first

Deterministic by default, model-enhanced when useful.

The ordering matters more than the model: a categorizer that answers differently on Tuesday is not a categorizer.

  • 526 ordered descriptor rules run first and first match wins. Transaction-type descriptors — payroll, interest charges, ATM fees, card payments, transfers — deliberately outrank merchant names, because PAYMENT TO VISA is a transfer no matter whose brand is in the string.
  • Every answer is normalized onto the taxonomy before it leaves, so a model that invents a category cannot leak one into your database.
  • The model is an enhancement, not a dependency. When it is unreachable the endpoints answer from rules alone and say so in engine. Nothing queues, nothing polls, and the request still returns in one round trip.
  • Recurring detection is not an AI call at all. Streams are computed on ingest from the transactions the connector returned, so /v1/recurring/get is a plain read against your normal request quota.
engineWhat produced the response
rulesDeterministic engines only. Always available, always the same answer.
aiSchema-validated model output drove the response.
ai+rulesRules produced the base result and the model enriched it — narratives, edge cases, unfamiliar descriptors.

taxonomy

14 primary categories, 89 subcategories.

One vocabulary across the sandbox engine, the enrichment endpoints, stored transactions, and the dashboards. Fetch it at /v1/categories/get and store it beside your data.

  • Income

    Salary · Freelance · Interest · Dividends · Refund · Bonus · Other Income

  • Transfer

    Internal Transfer · External Transfer · Savings Transfer · Investment Contribution · Credit Card Payment · Loan Payment · Cash Withdrawal · Cash Deposit

  • Food & Drink

    Restaurants · Fast Food · Coffee Shops · Bars & Nightlife · Delivery · Bakeries & Desserts

  • Groceries

    Supermarket · Convenience Store · Specialty Foods · Warehouse Club · Farmers Market

  • Shopping

    Clothing & Apparel · Electronics · Home Goods · Online Marketplace · Beauty & Personal Care · Books & Hobbies · Pets · Gifts

  • Entertainment

    Streaming · Movies & Events · Music · Games · Concerts & Shows · News & Magazines

  • Travel

    Flights · Hotels & Lodging · Car Rental · Vacation Packages · Travel Insurance

  • Transport

    Rideshare · Public Transit · Fuel · Parking · Tolls · Auto Maintenance · Auto Payment

  • Housing

    Rent · Mortgage · Home Insurance · Property Tax · Home Improvement · Furniture · HOA Fees

  • Utilities

    Electricity · Water & Sewer · Gas · Internet · Mobile Phone · Trash & Recycling

  • Subscriptions

    Software & SaaS · Cloud Storage · Memberships · Meal Kits · Box Subscriptions · Education & Courses

  • Health & Fitness

    Gym & Fitness · Pharmacy · Doctor & Dental · Vision · Mental Health · Sports & Outdoors

  • Fees

    Bank Fees · ATM Fees · Late Fees · Interest Charges · Foreign Transaction Fees · Service Charges

  • Other

    Uncategorized · Charity & Donations · Education · Childcare · Taxes · Legal & Professional

recurring

How a stream is decided.

The detector is a pure function over transactions, so you can reason about why something was or was not called recurring.

Groups are formed per merchant and direction, then kept only when their intervals cluster within twenty percent of the median. Anything that does not fall in a band is not a stream.
Median interval between chargesCadence assigned
5 to 9.5 daysweekly
11 to 20 daysbiweekly
24 to 38 daysmonthly
75 to 120 daysquarterly
300 to 430 daysannual

Each stream carries a merchant name, category, cadence, average and last amount, last and next expected date, a direction of outflow or inflow, and a status of active, paused, or ended. Inflow streams are how payroll shows up. The full shape is in the recurring reference.

faq

Questions developers actually ask.