Curvestone

Mortgage & Property Finance

FCA MCOB, FCA CONC — UK mortgage compliance and lender criteria matching

8 case types·40+ modifiers·500+ lender criteria per lender·4 depth tiers

Quick Reference

minimal.py
python
result = agent.check(
case_type="residential_mortgage",
depth="full_check",
modifiers=["debt_consolidation"],
documents=[open("fact_find.pdf", "rb")],
reference="CASE-2026-00451",
)

Case Types

NameAPI IDDescription
Residentialresidential_mortgageOwner-occupied residential mortgages — purchase, remortgage, product transfer
Buy-to-Letbuy_to_letStandard, specialist/HMO, portfolio landlord, consumer BTL, let-to-buy
Equity Releaseequity_releaseLifetime mortgages, home reversion plans, retirement interest-only (RIO)
Self Buildself_buildCustom and self-build mortgages with staged release
Second Chargessecond_chargeSecond charge secured loans on residential property
Bridgingbridging_financeShort-term bridging loans for property purchase or development
Commercialcommercial_mortgageCommercial property — investment and owner-occupier
Developmentdevelopment_financeProperty development with staged drawdown and development costings
ProtectionprotectionLife, critical illness, income protection, buildings & contents review

Modifiers

Repayment & Structure

NameAPI IDDescription
Interest Onlyinterest_onlyAdds repayment vehicle assessment, IO suitability, minimum equity requirement checks
Part & Partpart_and_partSplit repayment — part capital & interest, part interest only
Limited Companylimited_companyCompany structure verification, director checks, net profit assessment
Joint Borrower Sole ProprietorjbspJoint income assessment where only one party is on the title deed
Portfolio Landlordportfolio_landlordCross-portfolio assessment, aggregate borrowing, professional landlord checks

Purpose

NameAPI IDDescription
RemortgageremortgageExisting lender comparison, switching rationale, day-1 remortgage checks
Capital Raisingcapital_raisingChecks vary by sub-purpose (see below)
Let-to-Buylet_to_buyConverting existing home to BTL while purchasing new residence
Further Advancefurther_advanceAdditional borrowing on existing mortgage
Product Transferproduct_transferRate switch on existing mortgage — limited re-underwriting

Capital Raising Sub-Purposes

debt_consolidationhome_improvementsbusiness_purposesdivorce_settlementpurchase_landpurchase_btl

Applicant

NameAPI IDDescription
First Time Buyerfirst_time_buyerFTB-specific criteria, scheme eligibility, LTV caps
Vulnerable Customervulnerable_customerVulnerability assessment, enhanced suitability, support documentation
Self Employedself_employedSA302/tax calculations, 1-3 years accounts, declining profits assessment
ContractorcontractorIT contractor, CIS, umbrella company, fixed-term, zero-hours checks
ExpatexpatForeign currency income, country restrictions, time out of UK, minimum income
Foreign Nationalforeign_nationalVisa type checks (skilled worker, spouse, settlement), residency requirements
Retired / Lending into RetirementretirementMaximum age at end of term, pension income assessment, RIO eligibility

Property

NameAPI IDDescription
New Buildnew_buildFlat vs house, off-plan, warranties, builder incentives, lender exposure limits
Non-Standard Constructionnon_standardSteel frame, timber frame, concrete, PRC, single-skin, BISF
Ex-Local Authorityex_local_authorityFlat vs house distinction, specific LTV caps
Flat Above Commercialflat_above_commercialIncluding above food outlets, deck access, basement flats
Listed Buildinglisted_buildingGrade 1, Grade 2 distinctions
LeaseholdleaseholdRemaining term checks, ground rent escalation (doubling, RPI-linked)
Shared Ownershipshared_ownershipHousing association terms, staircasing, minimum share

Adverse Credit

Each modifier includes time-based variations: discharged less than 3 years, 3-6 years, over 6 years, and ongoing.

NameAPI IDDescription
CCJsccjCounty court judgements — amount thresholds (up to/over £500), number, satisfied/unsatisfied, time since
DefaultsdefaultsSimilar time and amount thresholds
BankruptcybankruptcyDischarged timeframes, ongoing/current
IVAivaIndividual voluntary arrangement — discharged timeframes
Debt Management PlandmpTimeframes, ongoing status
Debt Relief OrderdroTimeframes
Missed Paymentsmissed_paymentsMortgage/secured, credit card, utility, mobile phone arrears
RepossessionrepossessionHistorical repossession
Payday Loanspayday_loansHistory of payday loan usage

Scheme

NameAPI IDDescription
Help to Buyhelp_to_buyEquity loan scheme, mortgage guarantee
Shared Ownershipshared_ownershipMin initial share, re-sale shares
Right to Buyright_to_buyDiscount period checks
Deposit Unlockdeposit_unlockFTB/home mover eligibility, loan amount limits
Forces Help to Buyforces_help_to_buyMilitary personnel specific scheme
Green Mortgagesgreen_mortgageEPC rating requirements, energy efficiency incentives

Modifiers are additive. A single case can combine multiple modifiers (e.g. residential_mortgage + interest_only + debt_consolidation + vulnerable_customer). The resolution engine automatically determines which criteria apply for the combination.

Depths

NameAPI IDDurationScoringPriceDescription
Admin Checkadmin_check~18spass_fail£0.50Document presence against network file standards
Soft Checksoft_check~30spass_fail£0.50Admin + income, basic eligibility, obvious blockers
Full Checkfull_check~2 minrag£3.00Complete regulatory compliance review — suitability, affordability, disclosure
Lender Criterialender_criteria~45spass_reject£3.00Case checked against lender's specific 500+ lending criteria
Network Reviewnetwork_review~3 minrag£8.00Full check + network policy overlay, cross-firm benchmarking

Scoring Modes

pass_fail

Used by admin_check and soft_check. Binary outcome. Each check returns pass or fail. The overall result is pass if all checks pass, or fail if any check fails.

rag

Used by full_check and network_review. Each check returns green, amber, or red. Amber and red findings include descriptions and remedial actions. The overall triage is the worst-case result across all checks.

pass_reject

Used by lender_criteria. Case either passes all criteria or is rejected with specific failed criteria listed. Each criterion returns pass or reject. The overall result is pass only if every criterion passes.

Worked Example: Residential with Debt Consolidation

Residential mortgage with debt consolidation modifier at full_check depth.

Request

request.py
python
from curvestone import Agent
agent = Agent()
result = agent.check(
case_type="residential_mortgage",
depth="full_check",
modifiers=["debt_consolidation"],
documents=[
open("fact_find.pdf", "rb"),
open("suitability_letter.pdf", "rb"),
],
reference="CASE-2026-00451",
)

Response

response.json
json
1{
2 "id": "job_7kTx9mNpQ2",
3 "type": "check",
4 "status": "completed",
5 "triage": "amber",
6 "reference": "CASE-2026-00451",
7 "processing_time": "147s",
8 "scoring": "rag",
9 "checks": [
10 { "name": "Suitability of Advice", "triage": "green" },
11 { "name": "Income Verification", "triage": "green" },
12 { "name": "Affordability Assessment", "triage": "amber" },
13 { "name": "Product Selection", "triage": "green" },
14 { "name": "Disclosure & Consent", "triage": "green" },
15 { "name": "Debt Consolidation Rationale", "triage": "amber" },
16 { "name": "Total Cost Comparison", "triage": "green" }
17 ],
18 "findings": [
19 {
20 "severity": "amber",
21 "check": "Affordability Assessment",
22 "finding": "Affordability buffer is within 2% of the lender's stress-test threshold. Disposable income margin after consolidation is £127/month, below the recommended £200 buffer.",
23 "remedial_action": "Request an updated income schedule or evidence of additional income sources. Consider whether a longer term reduces monthly outgoings sufficiently."
24 },
25 {
26 "severity": "amber",
27 "check": "Debt Consolidation Rationale",
28 "finding": "The suitability letter references debt consolidation as a primary objective but does not include a total cost comparison showing the client saves money over the term of the new mortgage versus maintaining existing debts.",
29 "remedial_action": "Add a total cost comparison table to the suitability letter showing: (a) current monthly debt payments and total remaining cost, (b) new mortgage payment including consolidated debt, and (c) net saving or cost over the mortgage term."
30 }
31 ],
32 "cost": "£3.20"
33}

Ask

Use POST /ask to ask natural-language questions about a completed mortgage job, a document, or lender criteria.

Example questions

  • Why was the suitability letter rated amber?
  • Does this case meet Halifax residential criteria for interest-only?
  • What documents are missing for a bridging finance application?
  • Summarise the key risks for this equity release case.
  • Which lenders accept adverse credit within the last 3 years?

Questions can reference a job_id for context-aware answers grounded in the original documents and findings. £0.05 per turn.

Monitor

Use POST /monitor to set up recurring watches relevant to the mortgage cluster.

Monitor typeWhat it watchesTypical schedule
criteria_updateLender criteria pages for policy changesevery_15_days
regulation_changeFCA MCOB updates and regulatory noticesweekly
website_changeAR firm websites and social media contentdaily

Monitors can trigger downstream actions via on_finding — e.g. automatically re-run a check when lender criteria change. £15/month per monitor.

See also