Using Quick Estimates to build your own calculator
Calculate a novated lease estimate, then list the estimates your API key has created
Let's say a customer is on your website looking at a vehicle. They want a rough idea of what a novated lease would cost, and they have not shared their name or contact details yet.
This guide will show you how to give them that figure with a quick estimate. Your app sends the vehicle price, salary, lease length, fuel type, kilometres, business use, and state. The financier product and budget come from the lead settings in your Karia sales workspace. The response includes the estimated net cost, tax savings, lease payment, and running costs. When they decide to go ahead, pass the returned estimate id as quickEstimateId on create lead.
Prerequisites
- Read Quick Start to get your
orgIdandworkspaceId. - Read Getting an API Key to get your API key. The key needs
origination:quick-estimate:createto calculate, andorigination:quick-estimate:viewto list. - Enabled Lead Generation in your sales and origination workspace.
Workflow
- Capture vehicle price, salary, lease term, fuel type, and business use percentage.
- Send above details to the quick estimate endpoint.
- Store the returned
id. This will be needed later if you wish to create a lead from this estimate. - Call the list endpoint to retrieve estimates this API key has already created.
To turn an estimate into a lead, collect the customer's name and contact details, then pass the stored id as quickEstimateId when you create a lead.
Create a quick estimate
Create a quick estimate
/organisation/{organisationId}/workspace/{workspaceId}/origination/quick-estimateAuthorizationv
{
"type": "Bearer API key"
}Pathv
/organisation/{organisationId}/workspace/{workspaceId}/origination/quick-estimate{
"organisationId": 1,
"workspaceId": 2
}origination.quickEstimate.createBodyv
{
"salary": 150000,
"leaseTerm": 60,
"startingPrice": 60000,
"payrollCycle": "weekly",
"includeRunningCosts": true,
"businessUse": 20,
"fuelType": "petrol",
"annualKms": 15000,
"state": "vic"
}Request fields
| Field | Required | Rules |
|---|---|---|
salary | Yes | Annual salary before tax, excluding superannuation. Greater than 0. |
startingPrice | Yes | Drive-away price. Greater than 0. |
leaseTerm | Yes | Lease length in months. Greater than 0 and at most 60. |
businessUse | Yes | Percentage from 0 to 100. |
fuelType | Yes | petrol, diesel, hybrid, plug_in_hybrid, or electric. |
payrollCycle | No | weekly (default), fortnightly, monthly, or bi_monthly. |
includeRunningCosts | No | Defaults to true. Fuel, registration, insurance, servicing, and tyres are then included in the cost. |
annualKms | No | Whole number, defaults to 15000. |
state | No | act, nsw, nt, qld, sa, tas, vic (default), or wa. Used for stamp duty and registration. |
startingPriceType | No | Only drive_away_price is accepted. That is also the default. |
Response
A successful response is the calculated estimate. The fields most integrations use are:
| Field | Meaning |
|---|---|
id | Estimate ID. Send this as quickEstimateId when you create a lead. |
expiresAt | When the estimate stops being valid. |
assumptions | The inputs the calculation actually used, including defaults. |
tax.fbt.methods | Net cost and tax savings for each FBT method. |
finance.leasePayment | Lease payment for each payroll cycle, including GST. |
budget | Running-cost line items for each payroll cycle, when running costs were included. |
pricing | Drive-away price, stamp duty, registration, GST, and luxury car tax. |
tax.fbt.methods has up to five methods: statutoryMethod, operatingCost, fbtExempt, fbtExemptEv, and fullFbtApplied. A method is null when it does not apply to the vehicle, so check before reading it. Electric vehicles are the usual case for fbtExemptEv.
Each method has a period for every payroll cycle:
Request payrollCycle | Response period key | Payments per year |
|---|---|---|
weekly | weekly | 52 |
fortnightly | fortnightly | 26 |
monthly | monthly | 12 |
bi_monthly | biMonthly | 24 |
GST amounts are split into exGstAmount, gstAmount, and incGstAmount. Show incGstAmount when you want the figure the customer pays.
Running costs are budget.<period>.items. Each item has a name and an incGstAmount. budget.<period>.totals is the sum.
List quick estimates
The list only returns estimates created by the owner of the API key you authenticate with. Sending createdBy has no effect.
List quick estimates
/organisation/{organisationId}/workspace/{workspaceId}/origination/quick-estimateAuthorizationv
{
"type": "Bearer API key"
}Pathv
/organisation/{organisationId}/workspace/{workspaceId}/origination/quick-estimate{
"organisationId": 1,
"workspaceId": 2
}origination.quickEstimate.listBodyv
{
"query": {
"page": "1",
"limit": "20"
},
"response": {
"items": [
{
"id": "019a17b4-86c6-7ba2-ab0c-ad037219b341",
"createdAt": "2026-10-27T02:00:00.000Z",
"salary": 150000,
"leaseTerm": 60,
"startingPrice": 60000,
"fuelType": "petrol",
"annualKms": 15000,
"businessUse": 20,
"state": "vic",
"includeRunningCosts": true
}
],
"pagination": {
"totalItems": 1,
"totalPages": 1,
"pageSize": 20,
"limit": 20,
"currentPage": 0
}
}
}page starts at 1. pagination.currentPage is the upstream page index, so the first page comes back as 0.
Each item is a summary of the inputs, not the calculated pricing. Call create again if you need a fresh calculation.
Turn an estimate into a lead
Creating a lead is a separate endpoint, origination.lead.create. The key needs origination:lead:create.
quickEstimateId is optional. Send the estimate id when this lead should start from that calculation: the lead is created with status estimating, and its first estimate is copied from the quick estimate. Omit the field to create a lead with status new and no estimate. null is also accepted and means the same as omitting it.
{
"firstName": "Jane",
"lastName": "Citizen",
"email": "jane.citizen@example.com",
"phone": "+61400111222",
"quickEstimateId": "019a17b4-86c6-7ba2-ab0c-ad037219b341"
}phone must be E.164, for example +61400111222. A local number such as 0400111222 is rejected.
If the workspace already has a lead with the same email or phone inside its match window (7 days by default), the API returns that lead with isMatched: true and does not attach your quickEstimateId. A match window of 0 in the workspace's lead settings turns this off.

