Angle JSON
Angle Auto Finance Application JSON
Application JSON details shown with system field source information.
When Angle Application event created, information stored in attached PDF in Response section.
Use to help diagnose issues when application fails.
Top Notes
[1] Mapping: Field delivered from mapping. Visit Angle Mapping page.
[2] individualDetails - addresses - previous address: Shown if populated. Otherwise section not passed.
[3] individualDetails - addresses - employmentType (Previous Employment): Optional section added when previous employment details required.
[4] additionalDetails - answers: Hard-coded. Check process matches information being sent.
JSON Structure Overview
Application JSON contains following main sections with field mappings and data sources.
externalSystemReference, contractAttributes, campaignDetails
{ "externalSystemReference": "CODE_179519", "contractAttributes": { "signatureDate": "2024-04-08", "contractStartDate": "2024-04-08", "advance": "Advanced", "installmentDeferredMonths": 1 }, "campaignDetails": { "productCode": "NOVLEASE" } } clientDetails
"clientDetails": { "clientNumber": "", "owner": "", "clientApplication": "", "legalName": "", "groupName": "", "taxRegion": "VIC" } applicantDetails
"applicantDetails": { "primaryApplicant": { "applicantType": "PRIMEB", "businessDetails": { "industry": "[1] Mapping" } } } individualDetails
"individualDetails": { "firstName": "", "lastName": "", "otherNamesExist": "N", "title": "Mr", "dateOfBirth": "1988-08-12", "gender": "Male", "relationshipStatus": "Married", "visaStatus": "Citizen", "residentialStatus": "RentingEmployerProvided", "countryOfResidence": "AU", "numberOfDependents": 0, "externalSystemReference": "CODE_179519", "anzsicCode": "A011500", "driversLicenseDetails": { "number": "5245124", "state": "NSW", "expiryDate": "2026-02-16", "cardNumber": "BA555500" } } Note: All fields marked [1] above are delivered from mapping. Refer Angle Mapping page.
employmentDetails
"employmentDetails": [ { "employmentType": "FullTimeEmployed", "occupationType": "Other", "startDate": "2023-01-03", "employerName": "MKT Taxation Advisors", "entityType": "Other", "companyRegistrationNumber": "51 094 591 438", "externalSystemReference": "CODE_179519", "anzsicCode": "AB33990" } ] Note: employmentType, occupationType, entityType marked [1] delivered from mapping.
contactDetails (individualDetails)
"contactDetails": { "emails": [ { "type": "WK", "value": "[angle_api_contact_details Email Address]", "defaultDelivery": "EmailBusiness" }, { "type": "HM", "value": "", "defaultDelivery": "EmailHome" } ], "phones": [ { "type": "HM", "countryCode": "61", "areaCode": "02", "number": "" }, { "type": "WK", "countryCode": "61", "areaCode": "08", "number": "[angle_api_contact_details Phone]" } ], "mobiles": [ { "type": "MB", "countryCode": "61", "number": "" } ] } addresses
Driver addresses used in JSON only if stored using autocomplete address process (address_detail_pid exists).
Postal address not passed in JSON.
When driver at current home address less than 3 years, previous home address required.
"addresses": [ { "externalSystemReference": "CODE_179519", "addressType": "Street", "unitNumber": "", "streetNumber": "65", "streetName": "SAMPSON ST", "suburb": "ORANGE", "state": "NSW", "postalCode": "2800", "country": "AU", "effectiveDateFrom": "2022-07-03" }, { "externalSystemReference": "CODE_179519", "addressType": "Street", "unitNumber": "", "streetNumber": "25", "streetName": "JULIA ST", "suburb": "PORTLAND", "state": "VIC", "postalCode": "3305", "country": "AU", "effectiveDateFrom": "2017-07-03", "effectiveDateTo": "2022-07-02" }, { "externalSystemReference": "CODE_179519", "addressType": "Mailing", "unitNumber": "", "streetNumber": "65", "streetName": "SAMPSON ST", "suburb": "ORANGE", "state": "NSW", "postalCode": "2800", "country": "AU", "effectiveDateFrom": "2023-01-03" } ] Note [2]: Previous address shown if populated. Otherwise section not passed.
employmentType (Previous Employment)
{ "employmentType": "Unknown", "occupationType": "Other", "startDate": "2016-09-02", "endDate": "2023-01-02", "employerName": "Taxation Consultants R Us", "entityType": "Other", "companyRegistrationNumber": "", "externalSystemReference": "CODE_179519", "anzsicCode": "T999999" } Note [3]: employmentType, occupationType, entityType hard-coded. anzsicCode hard-coded T999999.
paymentInstructions
"paymentInstructions": { "payment": { "paymentMethod": "CBA Direct Credit" } } consent and additionalDetails
"additionalDetails": { "isCreditCheckAuthorised": "Y", "isIdentificationVerified": "N", "isIdentificationVerifiedByAnotherSystem": "Y" }, "consent": { "isPrivacyConsentGiven": "Y", "isDvsConsentGiven": "Y" } Note [4]: isIdentificationVerified hard-coded. Check process matches information being sent.
financialCircumstances
capacityAssessment questions have hard-coded answers. Review credit application process before submitting to ensure answers correct for driver.
Income and Expense records from specific fields in Drivers / Finances tab. See Financial Circumstances details.
Asset and Liability records from Drivers / Assets & Liabilities tab.
Note: When liability passed for Credit Card Limit, Angle system recalculates Monthly Payment based on own criteria. Response PDF contains different amount for this field.
"financialCircumstances": { "capacityAssessment": { "isAssessmentQuestionsAsked": "Y", "isSelfDeclaration": "N", "isReductionClaimed": "Y", "areAnyChangesExpected": "N" }, "assets": [ {"amount": 750000, "type": "Other"}, {"amount": 25000, "type": "Car"} ], "liabilities": [ { "amount": 11000, "description": "Motor Vehicle Loan", "type": "Automotive Loan" }, { "amount": 25000, "description": "Credit Card Limit", "type": "Credit Card", "expense": {"amount": 1201, "frequency": "Monthly"}, "financierName": "Commonwealth Bank of Australia" } ], "incomes": [ { "amount": 1200, "frequency": "Monthly", "description": "Monthly Spouse Net Income", "type": "Spousal Income" }, { "amount": 1630, "frequency": "Monthly", "description": "Monthly Rental Income", "type": "Rental Income" }, { "amount": 3200, "frequency": "Monthly", "description": "Monthly Investment Income", "type": "Investment Income" } ], "expenses": [ { "amount": 3250, "frequency": "Monthly", "description": "Mortgage", "type": "Rent or Board Expense" }, { "amount": 1200, "frequency": "Monthly", "description": "Rent", "type": "Rent or Board Expense" }, { "amount": 1500, "frequency": "Monthly", "description": "Household", "type": "Basic Living Expense" }, { "amount": 250, "frequency": "Monthly", "description": "Credit Cards", "type": "Basic Living Expense" }, { "amount": 2500, "frequency": "Monthly", "description": "Vehicle", "type": "Car and Transport" } ] } applicationDetails
"applicationDetails": { "term": 60, "termType": "Monthly", "interestRate": 0.04, "purchaseMoneySecurityInterest": "N", "instalmentFrequency": "Monthly", "applicationPurpose": "Non-Business", "assets": [ { "classification": "MV", "condition": "New", "make": "VOLVO", "annualKms": 15000, "externalSystemReference": "CODE_179519", "model": "XC60", "subModel": "ULTIMATE B5 BRIGHT MHEV", "taxRegion": "VIC", "transmissionType": "8 SP AUTOMATIC", "fuelType": "PREMIUM UNLEADED PETROL", "odometer": 0, "numberOfDoors": 4, "buildDate": "2024-01-01", "purchasePrice": 87665.2, "luxuryCarTax": 1262.31, "nvic": "0DP324", "possessionDate": "2024-04-08", "recommendedRetailPriceCost": 80057.69, "engineCapacity": 2, "residualValue": 13226.36, "insurances": [ { "insuranceType": "Comprehensive Insurance", "insurerName": "Other", "premium": 2867.88, "sumInsured": 87665.2, "commencementDate": "2024-04-08", "insuranceTerm": {"value": 60, "frequency": "M"} } ], "fees": [ {"code": "AKFN", "amount": 20, "description": "Acc keeping fees"}, {"code": "BKGE", "amount": 3250.23}, {"code": "BKGE2", "amount": 0}, {"code": "ESTFEENL", "amount": 920}, {"code": "ORIGFEE", "amount": 440}, {"code": "PPSRFEE", "amount": 0}, {"code": "DDF", "amount": 0}, {"code": "ETFEE", "amount": 0}, {"code": "REGO", "amount": 925}, {"code": "SD", "amount": 2500.1} ] } ] } stateChangeNotification
"stateChangeNotification": { "loanConsultantEmail": "[angle_api_contact_details Email Address]" } Employment Type Mapping
Field location: Drivers / Finances tab.
Angle Finance field name: employmentType
Employment Type mapped to employmentType. Below accepted values by Angle Finance.
Accepted Current Employment Values
Accepted Previous Employment Values
Not mapped and not used in application:
Default Mappings
Review fm_driver_employment_types
System may contain some or all records below. Review and update selection criteria and status_flag settings.
Mapping Updates
If Angle modify list by adding field name options or removing existing values, refer Mapping Updates process pages.
Useful Queries
Employment Type Mappings
select tif.table_name, tif.field_name, tift.field_value, det.description, tif.interface_field_name, tift.interface_value from qt_interface_fields as tif left join qt_interface_field_translations as tift on tift.interface_field_id = tif.interface_field_id left join fm_driver_employment_types as det on det.driver_employment_type_code = tift.field_value where tif.interface_type = 'angle' and tif.interface_field_name = 'employmentType' and tift.status_flag = 'active' order by tift.interface_value desc, tift.field_value, det.description; Employment Type List with Mappings
select proper(det.description) as employment_type, tif.interface_type, tif.table_name, tif.field_name, tift.field_value, tif.interface_field_name, tift.interface_value from fm_driver_employment_types as det left join qt_interface_field_translations as tift on tift.field_value = det.driver_employment_type_code and tift.status_flag = 'active' left join qt_interface_fields as tif on tif.interface_field_id = tift.interface_field_id and tif.interface_type = 'angle' and tif.interface_field_name = 'employmentType' where det.status_flag = 'active' order by tift.interface_value desc, tift.field_value, det.description; Set-up Queries for Catch-e Staff
Selections and Data Checks
select * from fm_driver_employment_types; select * from gb_unique_ids where table_name = 'fm_driver_employment_types'; Create New Employment Types
START TRANSACTION; SELECT @next_id := unique_id from gb_unique_ids where table_name = 'fm_driver_employment_types'; INSERT INTO fm_driver_employment_types (driver_employment_type_id, driver_employment_type_code, external_code, description) VALUES (@next_id, 'FTM', 'PERMANENT_FULL_TIME', 'full-time'); SELECT @next_id := MAX(driver_employment_type_id) + 1 from fm_driver_employment_types; INSERT INTO fm_driver_employment_types (driver_employment_type_id, driver_employment_type_code, external_code, description) VALUES (@next_id, 'PTM', 'PERMANENT_PART_TIME', 'permanent-part-time'); SELECT @next_id := MAX(driver_employment_type_id) + 1 from fm_driver_employment_types; INSERT INTO fm_driver_employment_types (driver_employment_type_id, driver_employment_type_code, external_code, description) VALUES (@next_id, 'DCR', '', 'Dependent Contractor'); SELECT @next_id := MAX(driver_employment_type_id) + 1 from fm_driver_employment_types; INSERT INTO fm_driver_employment_types (driver_employment_type_id, driver_employment_type_code, external_code, description) VALUES (@next_id, 'ICR', 'SELF_EMPLOYED_CONTRACTOR', 'Independent Contractor'); SELECT @next_id := MAX(driver_employment_type_id) + 1 from fm_driver_employment_types; REPLACE INTO gb_unique_ids VALUES('fm_driver_employment_types', @next_id); COMMIT; Review New Records
select * from fm_driver_employment_types; Notes
Application JSON structure complex with multiple sections covering individual, employment, financial details
Field mappings [1] required for several fields to align Catch-e and Angle Finance values
Previous employment details optional and hard-coded values used
Driver must be autocomplete address compliant for address data to pass
Credit Card Limit monthly payment recalculated by Angle system
capacityAssessment questions hard-coded - review before submission
Contact details from angle_api_contact_details Global Control if populated
Employment Type only 3 current types accepted: FullTimeEmployed, PartTimeEmployed, Contractor
8 employment types result in failed application: Casual, Other, Retired, Self Employed, Social Security, Student, Temporary, Unemployed