Turn a bank descriptor into a category you can defend.
Enrich reads raw Australian transaction text and returns a category, a classification and the reason it chose them. Every answer is cited, and every result can be reproduced.
One categorisation engine for every product that reads a transaction.
Most transaction categorisation is a stack of brand-matching rules that drifts between products, ignores the merchant category code already sitting on the data, and quietly files anything it does not recognise as discretionary. That last habit flatters affordability, which is exactly the wrong direction for a lender.
Enrich replaces the stack with a single service. A merchant classified once is classified for every product afterwards, so the Australian merchant dictionary behind it compounds in value. Moroku holds that dictionary itself, so no additional third party processes your customers' data.
Auditable
Every response carries its source, confidence and engine_version. "Groceries, because MCC 5411, engine 1.3.0" is a statement a credit team can stand behind. Pin a version and a historical batch replays to exactly the same report.
Conservative
Unknown spend is flagged unverified and classified essential, never silently discretionary. Affordability is never flattered by what the engine does not know, which is the part a responsible-lending reviewer cares about.
Deterministic first
Merchant category code tables and dictionary lookups give the same answer every time and cite their reason. A language model classifies each unknown merchant exactly once; from then on its cached answer is deterministic too.
Same input, same outputA priority chain. The first hit wins.
Every transaction runs the chain in order. Cheap, certain signals are consulted before probabilistic ones, so a confident answer is never second-guessed by a weaker tier. Statement lines carry no merchant category code, so that step is simply skipped for them.
- 1ExclusionsTransfers, ATM withdrawals, cash advancestransfer
- 2SavingsDirected deposits and withdrawalssavings
- 3IncomeRecognised salary and benefitsincome
- 4CreditAny other credituncategorised_credit
- 5User and tenant overridesLearned from correctionsuser_override
- 6MCC tableISO 18245 merchant category codes mapped to the taxonomymcc · 0.95
- 7Global dictionaryThe compounding Australian merchant mapdictionary
- 8RulesPattern rules as the deterministic floorrules · 0.70
- 9Language model classificationOnce per new merchant, then cachedllm_cache
- 10Conservative fallbackother_expenses · essential · unverifiedfallback
17 expense categories, 3 classifications, versioned.
Each category carries a default classification, and that classification is the axis that drives affordability. The taxonomy is served by GET /v1/taxonomy, so every consumer reads the same version rather than hard-coding its own copy.
Essential
Spend a household cannot easily avoid.
Financial commitment
Obligations a lender must see.
Discretionary
Spend that can flex when budgets tighten.
Non-expense outcomes
Returned explicitly and marked excluded, so they never land in spend. The consumer decides whether to drop them.
Batch in, enriched out. JSON all the way.
A per-tenant bearer key, up to 1,000 transactions per call, and idempotent writes through an Idempotency-Key header.
base https://enrich.moroku.digital
auth Authorization: Bearer mk_live_… (or mk_test_…)
{
"transactions": [{
"id": "t1",
"description": "SQ *THE DAILY GRIND 4821 SYDNEY AU",
"mcc": "5814",
"amount": -5.60,
"date": "2026-07-14"
}]
}
{
"results": [{
"id": "t1",
"category": "dining_entertainment",
"classification": "discretionary",
"confidence": 0.95,
"source": "mcc",
"excluded": false,
"merchant": { "match_key": "the daily grind" },
"engine_version": "1.3.0"
}],
"summary": { "confident_pct": 1.0 // share at ≥ 0.8 }
}
Request a key and make your first call.
Access is by request today. Tell us the product and expected volume and we issue a per-tenant key pair: a test environment to build against and a live one for real traffic.
Moroku customers
Institutions running Moroku Kanopi, Odyssey or Money.
Included with your platformUsage metered per tenant from day one
- Test and live keys on request
- Full categorise, corrections and taxonomy API
- Per-tenant usage reporting
- Learning scoped to your tenant
Australian fintechs
Lenders, brokers and advisers building their own products.
Per 1,000 transactionsPricing by arrangement
- The same API and Australian taxonomy
- Developer agreement and onboarding
- Isolated tenant: your learning stays yours
- Only merchant-level facts are ever shared
From request to first call
- STEP 1
Request a key
Send us the product name and expected volume. We issue your
testandlivekeys and hand them over securely. - STEP 2
Integrate
Point your client at
/v1/categorisewith the bearer key, batch your transactions, and readcategoryandconfidence. - STEP 3
Close the loop
When a user recategorises a transaction, post it to
/v1/corrections. Enrich learns, and every consumer benefits at the next sync.
Talk to us about Enrich
Tell us what you are building and roughly how many transactions a month.