Curvestone
POST/check

Review Protection Advice

Check that protection recommendations alongside a mortgage are suitable and properly documented.

Who is this for

Compliance Officer at a mortgage network or brokerage. When a broker recommends a mortgage, they should also discuss and recommend protection products (life insurance, critical illness cover, income protection, buildings & contents). You need to check that the protection advice was suitable, properly documented, and meets FCA requirements — whether as part of a mortgage case review or as a standalone protection review.

What you'll do

  • 1
    Submit the protection recommendation documents alongside (or separately from) the mortgage case
  • 2
    The platform checks suitability of protection recommendations against the client's circumstances
  • 3
    Verify that adequate reasons are documented for any protection declined by the client
  • 4
    Receive findings on gaps in cover or documentation

The API call — with a mortgage case

Add the protection_review modifier to any mortgage case type to include protection checks alongside the standard compliance checks.

protection_with_mortgage.py
python
from curvestone import Agent
agent = Agent() # reads CURVESTONE_API_KEY from env
# Protection review as part of mortgage case
result = agent.check(
case_type="residential_mortgage",
depth="full_check",
modifiers=["protection_review"],
documents=[
open("fact_find.pdf", "rb"),
open("suitability_letter.pdf", "rb"),
open("protection_recommendation.pdf", "rb"),
open("demands_and_needs.pdf", "rb"),
],
reference="CASE-2026-00451",
)
print(f"Triage: {result.triage}")
print(f"Checks: {len(result.checks)}")
print(f"Findings: {len(result.findings)}")

Standalone protection review

You can also run a protection-only review by using protection as the case type. This is useful when reviewing protection advice that was given independently of a mortgage.

standalone_protection.py
python
from curvestone import Agent
agent = Agent() # reads CURVESTONE_API_KEY from env
# Standalone protection review
result = agent.check(
case_type="protection",
depth="full_check",
documents=[
open("fact_find.pdf", "rb"),
open("protection_recommendation.pdf", "rb"),
open("demands_and_needs.pdf", "rb"),
],
reference="PROT-2026-00088",
)
print(f"Triage: {result.triage}")
print(f"Findings: {len(result.findings)}")

The response

RAG-scored results across both mortgage compliance and protection checks, with detailed findings for any issues.

response.json
json
1{
2 "id": "job_5kRx2mNpQ3",
3 "type": "check",
4 "status": "completed",
5 "triage": "amber",
6 "reference": "CASE-2026-00451",
7 "processing_time": "134s",
8 "scoring": "rag",
9 "checks": [
10 { "name": "Suitability of Advice", "triage": "green" },
11 { "name": "Income Verification", "triage": "green" },
12 { "name": "Affordability Assessment", "triage": "green" },
13 { "name": "Product Selection", "triage": "green" },
14 { "name": "Disclosure & Consent", "triage": "green" },
15 { "name": "Protection — Life Cover", "triage": "green" },
16 { "name": "Protection — Critical Illness", "triage": "amber" },
17 { "name": "Protection — Income Protection", "triage": "red" },
18 { "name": "Protection — Buildings & Contents", "triage": "green" }
19 ],
20 "findings": [
21 {
22 "severity": "amber",
23 "check": "Protection — Critical Illness",
24 "finding": "Critical illness cover recommended at £150,000 but the client's outstanding mortgage is £285,000. Cover amount does not match the mortgage balance.",
25 "remedial_action": "Document the rationale for the lower cover amount, or adjust the recommendation to match the outstanding mortgage balance."
26 },
27 {
28 "severity": "red",
29 "check": "Protection — Income Protection",
30 "finding": "No income protection was recommended or discussed. The client is self-employed with no sick pay entitlement. The demands and needs document does not record any discussion of income protection or the client's reason for declining.",
31 "remedial_action": "Record the income protection discussion in the demands and needs document. If the client declined, document the specific reasons and ensure the client understands the risk of having no income protection as a self-employed individual."
32 }
33 ],
34 "cost": "£3.50"
35}

What happens

Modifier or standalone — your choice

Protection review can run as a protection_review modifier on any mortgage case type (adding protection checks to the existing compliance checks) or as a standalone protection case type for protection-only advice. When used as a modifier, you get both mortgage compliance and protection suitability in a single API call.

Four protection types checked

The platform checks each protection type individually: life cover, critical illness, income protection, and buildings & contents. For each type, it verifies: was it discussed? Was a recommendation made? Does the cover amount match the client's circumstances? If the client declined, was the reason documented?

Findings tied to specific documents

Each finding references the specific check that flagged the issue and includes a concrete remedial action. In the example above, the amber finding on critical illness identifies a mismatch between the recommended cover amount and the mortgage balance. The red finding on income protection identifies a complete gap — no discussion recorded at all for a self-employed client.

Consumer Duty alignment

This is increasingly important as the FCA focuses on Consumer Duty and ensuring customers are getting good outcomes. Protection gaps are a key area of regulatory scrutiny — a client who takes on a large mortgage without adequate protection is not receiving good advice. The structured findings give you an auditable record that protection suitability was assessed.

GreenProtection discussed, recommended, and documented.
AmberCover gaps or documentation issues. Remedial action needed.
RedProtection type not discussed or documented at all.