Skip to content

Policy Schema

The policy schema represents lending policies from various lenders, categorized by policy triggers and containing detailed policy content in markdown format.

Policies document how lenders assess and treat different aspects of loan applications, such as:

  • Income assessment (PAYG, self-employed, rental, overseas)
  • Expense calculations and buffers
  • Property type restrictions
  • Borrower eligibility criteria
  • Special circumstances and exceptions
interface Policy {
lender: LenderName;
triggers: PolicyTrigger[];
content: string;
lastVerifiedOn: string;
highlights?: string[];
}
FieldTypeDescription
lenderstringLender identifier (e.g., 'cba', 'westpac', 'anz')
triggersstring[]Array of policy trigger keywords
contentstringMarkdown-formatted policy text
lastVerifiedOnstringISO 8601 timestamp of last policy verification
highlightsstring[]Search result highlights (when using search query)

Triggers categorize policies by topic. Common triggers include:

TriggerDescription
paygPAYG salary and wages assessment
casualCasual employment income
commissionCommission and bonus income
overtimeOvertime income assessment
self_employedSelf-employed income (ABN holders)
rental_incomeRental property income
investment_incomeDividends, interest, distributions
overseas_incomeForeign-sourced income
centrelinkGovernment benefits and pensions
child_supportChild support received
TriggerDescription
living_expensesLiving expense assessment methods
hemHousehold Expenditure Measure
declared_expensesDeclared vs minimum expenses
child_support_paidChild support payments
TriggerDescription
property_typeAcceptable property types
security_valuationValuation requirements
constructionConstruction loan policies
ruralRural property lending
commercialCommercial property security
TriggerDescription
first_home_buyerFirst home buyer concessions
visa_statusVisa and residency requirements
credit_historyCredit score and history requirements
age_restrictionsAge-related lending limits
TriggerDescription
lvr_limitsMaximum LVR by property type
interest_onlyInterest-only lending policies
offset_accountsOffset account availability
lmiLenders Mortgage Insurance requirements
serviceabilityServicing calculation methodologies

Policy content is stored as markdown for rich formatting:

# PAYG Income Assessment
## Standard Assessment
- Minimum 3 months employment required
- Base salary assessed at 100%
- Probation period accepted with conditions
## Commission Income
- Minimum 12 months history required
- Average of last 2 years assessed at 80%
- Must be regular and ongoing
## Overtime
- Minimum 12 months history required
- Assessed at 80% of average
- Must be substantiated with payslips
{
"data": [
{
"lender": "cba",
"triggers": ["payg", "commission", "overtime"],
"content": "# PAYG Income Assessment\n\n## Standard Assessment\n- Minimum 3 months employment...",
"lastVerifiedOn": "2025-10-15T00:00:00.000Z"
},
{
"lender": "westpac",
"triggers": ["payg"],
"content": "# PAYG Salary Income\n\nWestpac assesses PAYG income...",
"lastVerifiedOn": "2025-10-20T00:00:00.000Z"
}
],
"meta": {
"timestamp": "2025-11-03T10:30:00.000Z",
"count": 2
}
}

When using the search parameter, matching text is highlighted:

{
"data": [
{
"lender": "anz",
"triggers": ["self_employed"],
"content": "# Self-Employed Income...",
"lastVerifiedOn": "2025-10-18T00:00:00.000Z",
"highlights": [
"...ABN holders with <em>2 years</em> of trading history...",
"...average of last <em>2 years</em> tax returns..."
]
}
],
"meta": {
"timestamp": "2025-11-03T10:30:00.000Z",
"count": 1
}
}
Terminal window
# Get all PAYG income policies
curl -X GET 'https://api.quickli.com/api/v1/policies?lenders=cba,westpac,anz&triggers=payg' \
-H "Authorization: Bearer {credentials}"
Terminal window
# Search for specific requirements
curl -X GET 'https://api.quickli.com/api/v1/policies?lenders=cba&triggers=self_employed&search=tax+returns' \
-H "Authorization: Bearer {credentials}"
Terminal window
# Get policies covering multiple topics
curl -X GET 'https://api.quickli.com/api/v1/policies?lenders=cba&triggers=payg,commission,overtime' \
-H "Authorization: Bearer {credentials}"

Scenario: Need to understand how CBA assesses commission income.

Terminal window
curl -X GET 'https://api.quickli.com/api/v1/policies?lenders=cba&triggers=commission' \
-H "Authorization: Bearer {credentials}"

Review:

  • Minimum history requirements
  • Assessment percentage
  • Documentation needed
  • Any special conditions

Scenario: Compare self-employed income policies across lenders.

Terminal window
curl -X GET 'https://api.quickli.com/api/v1/policies?lenders=cba,westpac,anz,nab&triggers=self_employed' \
-H "Authorization: Bearer {credentials}"

Analyze:

  • Which lender has most favorable terms?
  • Trading history requirements
  • Documentation differences
  • Assessment methodologies

Scenario: Check if lenders accept rural properties.

Terminal window
curl -X GET 'https://api.quickli.com/api/v1/policies?lenders=cba,westpac,anz&triggers=rural' \
-H "Authorization: Bearer {credentials}"

Review:

  • Maximum LVR for rural
  • Land size restrictions
  • Valuation requirements
  • Any exclusions

Scenario: Find policies mentioning “probation period”.

Terminal window
curl -X GET 'https://api.quickli.com/api/v1/policies?lenders=cba,westpac&triggers=payg&search=probation' \
-H "Authorization: Bearer {credentials}"

Result: Highlighted excerpts showing probation period policies.

import ReactMarkdown from 'react-markdown';
function PolicyViewer({ policy }: { policy: Policy }) {
return (
<div>
<h2>{policy.lender.toUpperCase()} Policy</h2>
<p>Triggers: {policy.triggers.join(', ')}</p>
<p>Last verified: {new Date(policy.lastVerifiedOn).toLocaleDateString()}</p>
<div className="policy-content">
<ReactMarkdown>{policy.content}</ReactMarkdown>
</div>
</div>
);
}
import markdown
def render_policy(policy):
html_content = markdown.markdown(policy['content'])
print(f"Lender: {policy['lender']}")
print(f"Triggers: {', '.join(policy['triggers'])}")
print(f"Last Verified: {policy['lastVerifiedOn']}")
print("\nPolicy Content:")
print(html_content)
// Extract plain text from markdown
function stripMarkdown(content) {
return content
.replace(/#{1,6}\s/g, '') // Remove headers
.replace(/\*\*(.*?)\*\*/g, '$1') // Remove bold
.replace(/\*(.*?)\*/g, '$1') // Remove italic
.replace(/\[(.*?)\]\(.*?\)/g, '$1'); // Remove links
}
console.log(stripMarkdown(policy.content));

Policies are regularly verified and updated to reflect:

  • Lender policy changes
  • Rate and criteria updates
  • New policy announcements
  • Seasonal or promotional changes

Best practice: Check lastVerifiedOn date and consider policies older than 3 months as potentially outdated.

The API automatically filters policies by:

  1. Lender access: Only lenders you have permission for
  2. White-label exclusion: White-label lenders are hidden from public API
  3. Trigger matching: Only policies with requested triggers

By default, policies are sorted by:

  1. Trigger order: Policies appear in the order of requested triggers
  2. Lender name: Within each trigger, sorted alphabetically by lender

When using search, sorting is by relevance score instead.

To get unsorted results:

Terminal window
curl -X GET 'https://api.quickli.com/api/v1/policies?lenders=cba&triggers=payg&orderResults=false' \
-H "Authorization: Bearer {credentials}"
Terminal window
curl -X GET 'https://api.quickli.com/api/v1/policies?lenders=cba,westpac&triggers=payg,commission&search=12+months' \
-H "Authorization: Bearer {credentials}" \
-H "Content-Type: application/json"
{
"data": [
{
"lender": "cba",
"triggers": ["payg", "commission"],
"content": "# PAYG and Commission Income\n\n## Standard PAYG\n- Minimum 3 months employment...\n\n## Commission Income\n- Requires 12 months history...",
"lastVerifiedOn": "2025-10-15T00:00:00.000Z",
"highlights": [
"...Requires <em>12 months</em> history of commission payments..."
]
},
{
"lender": "westpac",
"triggers": ["payg", "commission"],
"content": "# Employment Income Assessment\n\n## PAYG Income\n- Minimum 6 months employment...\n\n## Commission\n- Average of last 12 months...",
"lastVerifiedOn": "2025-10-20T00:00:00.000Z",
"highlights": [
"...Average of last <em>12 months</em> commission income..."
]
}
],
"meta": {
"timestamp": "2025-11-03T10:30:00.000Z",
"count": 2
}
}

Last updated: 2025-11-03